node.js使用net模块创建服务器和客户端示例【基于TCP协议】

来源:脚本之家  责任编辑:小易  

TCP是字节流,你收到data的时候不一定是完整的JSON。正常应该拆包,处理粘包,双方约定编码等等

本文实例讲述了node.js使用net模块创建服务器和客户端。分享给大家供大家参考,具体如下:

nodejs中如何使用tcp(或者udp,socket.io等)发送和有这样的情景,有一主服务

node.js中net模块创建服务器和客户端

node搭建的net服务器,接受数据多的时候,频发触发socket的error,错误提示为:{ Er

1.node.js中net模块创建服务器(net.createServer)

这是一段对以文件解析的程序!不过我不知道是什么类型的文件我可以给你说一下里面几个函数的作用你就可能明

// 将net模块 引入进来 var net = require("net"); // 创建一个net.Server用来监听,当连接进来的时候,就会调用我们的函数 // client_sock,就是我们的与客户端通讯建立连接配对的socket // client_sock 就是与客户端通讯的net.Socket var server = net.createServer(function(client_sock) { console.log("client comming", client_sock.remoteAddress, client_sock.remotePort); // 设置你接受的格式, // client_sock.setEncoding("utf8"); // client_sock.setEncoding("hex"); // 转成二进制的文本编码 // // 客户端断开连接的时候处理,用户断线离开了 client_sock.on("close", function() { console.log("close socket"); }); // 接收到客户端的数据,调用这个函数 // data 默认是Buffer对象,如果你强制设置为utf8,那么底层会先转换成utf8的字符串,传给你 // hex 底层会把这个Buffer对象转成二进制字符串传给你 // 如果你没有设置任何编码 <Buffer 48 65 6c 6c 6f 57 6f 72 6c 64 21> // utf8 --> HelloWorld!!! hex--> "48656c6c6f576f726c6421" client_sock.on("data", function(data) { console.log(data); client_sock.write("goodbye!!!"); client_sock.end(); // 正常关闭 }); client_sock.on("error", function(err) { console.log("error", err); }); }); // 当我开始监听的时候就会调用这个回掉函数 server.on("listening", function() { console.log("start listening..."); }); // 监听发生错误的时候调用 server.on("error", function() { console.log("listen error"); }); server.on("close", function() { console.log("server stop listener"); }); /* server.on("connection", function(client_sock) { console.log("client comming 22222"); }); */ // 编写代码,指示这个server监听到哪个端口上面。 // 127.0.0.1: 6080 // node就会来监听我们的server,等待连接接入 server.listen({ port: 6080, host: "127.0.0.1", exclusive: true, }); // 停止node对server的监听事件处理,那么node就没有其他的事件要处理,所以就退出了。 // server.unref(); // 取消node,对server的事件的监听; // server.close(); // 主动的掉这个server.close才会触发这个net.Server的close事件

翟天临 学术不端 网页 资讯 贴吧 知道 视频 音乐 图片 地图 文库 更多»

2.node.js中net模块创建客户端(net.connect())

养龟就要有个养龟的样子!我平时上街去公园都是两眼放光,看有什么石头适合给乌龟做晒台的。无论是巴西龟还是草龟,都需要有陆地面积,在水中放一块石头,让它们能上来休息、晒背。再来就是食物,新鲜的小鱼小虾是最好的,其次是蚯蚓、螺、蚌等,再次才是瘦肉,不到实在找不到食物的时候就不要喂肉。市场上卖的很便宜的那种袋装的龟粮绝对不要喂,里面几乎没什么营养,还含有大量激素,对龟生长很不利。最最关键的是水质,自来水必须要用太阳晒过2天再用。这样水里面的氯气几乎曝光了,就不会对乌龟眼睛造成刺激,减少了患白眼病的可能性。温度,夏秋两季好说,冬春两季,对于养龟新手来说会感到困惑。所以我建议,第一个冬天加温饲养,无论是小

var net = require("net"); // net.Socket, var sock = net.connect({ port: 6080, host: "127.0.0.1", }, function() { console.log('connected to server!'); }); // 连接成功调用的事件 sock.on("connect",function() { console.log("connect success"); // 在这里我们就可以发送数据了 sock.write("HelloWorld!", "utf8"); // end }); // end // 有错误发生调用的事件 sock.on("error", function(e) { console.log("error", e); }); // socket关闭的事件 sock.on("close", function() { console.log("close"); }); // 对方发送了关闭数据包过来的事件 sock.on("end", function() { console.log("end event"); }); // 当有数据发生的时候,调用; sock.on("data", function(data) { console.log(data); });

平均水平实际上是中等水平,也就是说总有一半的正常儿童的测量值低于平均水平。我特别反对儿保医生用"达标"来衡量孩子的生长状态。如果医生说他们"不达标",就会让家长误以为孩子"不正常",这种说法显然是不对的。评价孩子的生长状态,更重要的是自己和自己比,强调生长速度是否正常。这就需要用到一个非常重要的工具,即生长曲线。描绘生长曲线需要测量大量正常儿童的体格指标。从上图可以看到曲线由数条连续曲线组成,纵轴是体格测量值,横轴是年龄。最下面的一条曲线为-3个标准差,低于这条线则可能存在生长发育迟缓;最上面的一条曲线为+3个标准差,高于这一水平则可能存在生长过速。。中间的一条曲线代表平均值;另外,还有-1S

希望本文所述对大家node.js程序设计有所帮助。

谢谢邀请,我推荐几个实用类的APP吧。1.划卷尺-准确度挺高的iPhone/iPad尺子应用对于一些不适合完整移动的物体,比如桌面,比划卷尺也考虑到了。测量的时候,依旧移动设备,只不过需要在结果上添加一个手机的高度,这样就是整个移动的行程,准确度更高。2.秒表+–最像「秒表」的秒表应用[iPhone/iPad]秒表+是一款拟物化的秒表应用,配合音效,真实还原秒表本来面目。3.雨时–文艺范十足,为每日天气配上一首诗[iPhone]雨时是一款文艺优雅的天气预报应用,它会为每一天的天气配上一首诗。4.极限魔方–用AR解「魔方」[iPad/iPhone]极限魔方是一款魔方教学应用,适合用来快速入门魔方

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

nodejs可以接受tcp服务器的数据吗

nodejs中我们使用net模块来创建tcp服务器,tcp客户端,实现服务器与客户端之前的数据通信

创建tcp服务器

var server=net.createServer([optations],[connectionListener])

optations:{allowHalfOpen:boolean}

allowHalfOpen:false 当服务器接受到客户端发送的一个FIN包时候,会回发一个FIN包,当为true时服务器不会回FIN包,使得tcp服务器可以继续发送数据到客户端,但是不会接受客户端发送的数据,开发者必须调动end方法来关闭socket,默认是false

connectionListener:当客户端与服务器连接上了,可以触发的回调函数。

function(socket){

//.......

}

我们也可以不用回调函数来写连接上做什么处理,连接上会触发connection事件

var server=net.createServer()返回创建的tcp服务器

我们可以server.on('connection',function(socket){

})

在创建完tcp服务器我们通知服务器要监听客户端连接

server.listen(port,[host],[backlog],[callback])

port:监听的端口,为0时候tcp服务器分配一个随机的端口

host:监听的ip和主机名,省略该参数,服务器监听任何ipv4地址的客户端连接

backlog:指定等待队列中最大的客户端连接最大数量 默认511

当指定端口、ip这个时候服务器开始监听这个ip这个端口的客户端了,这个时候触发listening事件,可以指定callback参数来处理触发listening具体要做什么

我们也可以

server.on('lisening',function(){

//.......

})

创建一个tcp服务器后可以用server.address()查看tcp服务器监听的信息

var address=server.address()

addres是一个对象

prot :监听的端口

address:监听的ip

family:ipv4还是ipv6

我们可以使用getConnections()查看与服务器连接的客户端的数量

server.getConnections(callback)

callback:function(err,count){

}

err:错误信息

count:为连接服务器的数量

我们也可以设置最大的连接数,超过这个数字,服务器不允许连接

server.maxConnections=2

服务器关闭

server.close([callback])

这个 方法让tcp服务器拒绝新的客户端连接,原有已经连上的客户端是不关闭的,当所有的连接服务器的客户端关闭时候,服务器默认自动关闭,触发服务器的close事件

下面我们写一个tcp服务器

var net=require("net");

opations={allowHalfOpne:false}

var server=net.createServer(opations);

server.on('connection',function(socket){

server.maxConnections=2;

console.log("服务器最大连接数为%s",server.maxConnections)

server.getConnections(function(err,count){

console.log("已经有%s个客户端连接",count)

})

console.log("%s客户端与服务器建立连接",server.address().address)

})

server.on('error',function(err){

throw err;

})

server.on('listening',function(){

console.log("服务器开始监听%j",server.address())

console.log("服务器开始监听")

})

server.listen(9966,'192.168.0.3');

setTimeout(function(){

server.close(function(){

console.log("tcp服务器关闭11111")

})

console.log("tcp服务器关闭")

},20000)

注意连接成功的时候触发的connection事件,执行的方法,参数是一个socket端口对象,这个就是服务器所监听的端口对象,所以我们socket.address().address返回给我们的是监听ip

socket端口对象

port:端口

address:ip

family:ipv4 ipv6

socket端口对象,可以读取客户端发送的流数据,每次接收到客户端发送的数据触发data事件。

接受客户端发送的消息(在连接成功的触发函数中 让server监听data事件做相应的处理)

server.on('connection',function(socket){

socket.on('data',function(data){

socket.setEncoding("utf-8");

console.log(data)

//console.log(data.toString())

})

})

bytesRead为socket端口对象监听客户端发送的数据字节数

console.log(socket.bytesRead)

当客户端关闭时候,触发socket端口对象的end事件

我们把客户端连接发送的数据保存到一个文件下

var net=require("net");

var fs=require("fs");

var server =net.createServer();

var op={

flags:"a",

encoding:"utf-8"

}

var file=fs.createWriteStream('./socket.txt',op)

server.on('connection',function(socket){

socket.on('data',function(data){

file.write(data);

})

})

server.on('listening',function(){

console.log("监听开始")

})

server.listen('1111','192.168.0.3')

以管道形式发送数据到文件

var net=require("net");

var fs=require("fs");

var server =net.createServer();

var op={

flags:"a",

encoding:"utf-8"

}

var file=fs.createWriteStream('./socket.txt',op)

server.on('connection',function(socket){

//socket.on('data',function(data){

// file.write(data);

//})

socket.pipe(file,{end:false});

socket.on("end",function(){

file.end("wanbi")

})

})

server.on('listening',function(){

console.log("监听开始")

})

server.listen('1111','192.168.0.3')

tcp客户端

创建tcp客户端

var client =new net.socket([opations])

optation:fd 一个现有的socket端口对象文件描述

type :ipv4 、ipv6

allowHalfOpne:true、false

连接服务器

client.connect(prot,[host],[callback])

host不指定默认为本地ip

回调函数表示连接上了做什么

若没有可以socket端口对象触发connect事件

client.on("connect",function(){

})

当我们连接成功后客户端服务器端的socket端口对象有下面的属性

remoteAddress、remotePort、localAddress、localPort

socket端口对象可以写入服务器、客户端流数据

socket.write(data,[encodeing],[callback])

写入数据少时候我们直接写入缓存区,数据很多时候,缓存区满了,我们要把数据写入缓存队列中,这个时候write(data) 返回false,触发drain

我们可以用bufferSize看缓存队列中有多少个字节

socket.on("error",function(err){

})

当遇到error时候这个socket端口对象应该销毁

socket.destory()

socket.end([data],[encoding])

这个方法表示我们要关闭socket端口对象,这个不是关闭服务器的close方法,后者是关闭服务器,实现的效果是不能让客户端连接了,前者是关闭连接(socket端口对象)

当我们使用服务器的socket端口对象(连接客户端得)的end(data,encoding)方法时候,会触发客户端socket端口对象end事件

服务器:

socket.end('88');

客户端会执行下面的代码:

client.on("end",function(){

//......

})

服务器端不会退出应用程序,即使所有的客户端都断开了,这个时候我们要server.unref(),退出程序,可以用server.ref()阻止程序退出.

当socket端口对象彻底关闭时候会触发close事件,我们可以指定当端口对象关闭时候做的处理

socket.on(''close',faction(had_error){

if(had_error){}

else{}

})

socket.writtenBytes表示写了多少个字节

我们tcp服务器与客户端连接了,但是突然间有一个断电了,来不及向另一端发送关闭连接的FIN包,这样另一边这个socket端口永远处于连接状态,我们用socket.setKeepAlive([enable],[inteval])定时向另一端发送监测包,

我们实现一个服务器读一个文件的信息,当有客户单连接上,吧这个信息传给客户端,输出在控制台

服务器代码

var net=require("net");

var fs=require("fs");

var server =net.createServer();

var op={

flags:"r",

encoding:"utf-8"

}

var file=fs.createReadStream('./socket.txt',op)

server.on('connection',function(socket){

file.on('data',function(data){

socket.write(data);

})

socket.on("end",function(){

file.end("wanbi")

})

})

server.on('listening',function(){

console.log("监听开始")

})

server.listen('1111','192.168.0.3')

客户端代码

var net=require("net");

var client=new net.Socket();

client.connect(1111,'192.168.0.3')

client.on('connect',function(){

console.log("ok")

})

client.on("data",function(data){

console.log(data.toString())

})

nodejs中tcp服务器和http服务器实现的异同

一,相同点

1,都调用了createServer方法。

2,当客户端接入时都会执行一个回调函数。

二,不同之处

1,回调函数的中对象的类型。net服务器中,是个连接(connect)对象,而在HTTP服务器中,则是请求和响应对象。

2,原因:

1,http服务器是更高层的API,提供了控制和HTTP协议相关的一些功能。

2,浏览器在访问站点时不会只用一个连接,很多主流的浏览器为了更快的加载网站内容,能够像同一个主机打开八个不同的连接,并发送请求。Node为了不让我们担心是请求还是连接,为我们提供了请求和响应的抽象。因此,即使你能通过req.connection属性获得TCP连接对象,但大多数情况下你还是在与请求和响应的抽象打交道。

nodejs socket 怎么检测客户端主动断开连接

根据 https://github.com/LearnBoost/socket.io-spec 文档中说是在transport连接 (就是TCP)Close后再等一段时间(15秒,可配置)释放资源。我们知道一般TCP 不会轻易Close,网站没数据,可能连接一直存在着。

所以有两种思路,一个是自己在在Scoket.io的业务层设置定时器,超过一段时间无业务数据,释放socket.io的资源。另一种就是把TCP连接超时时间设短,不过要注意socket.io的socket不是node.js的socket,可以参考以下代码:

io.sockets.on(‘connection’, function (socket) {

socket.manager.transports[socket.id].socket.setTimeout(15000);

//…

}

如果client关闭后,大约15+15秒之后会释放资源。本回答被提问者采纳

nodejs 适合开发TCP服务吗

前段时间用sockit.io做实时通信的项目,非常好用,性能不错

自豪地采用 CNodeJS ionic

普通服务器,nodejs的socket最大并发连接数大概在什么级别

一台普通的配置稍微好点的 大概在 5000+左右!

  • 本文相关:
  • node.js net模块功能及事件监听用法分析
  • node.js利用net模块实现多人命令行聊天室的方法
  • nodejs学习笔记之net模块
  • nodejs简单实现tcp服务器端和客户端的聊天功能示例
  • 基于nodejs的tcp封包和解包的理解
  • nodejs之tcp服务端与客户端聊天程序详解
  • nodejs创建tcp服务器 - king0222
  • node.js中tcp socket多进程间的消息推送示例详解
  • node.js创建web、tcp服务器
  • node.js buffer模块功能及常用方法实例分析
  • nodejs学习笔记之fs文件模块
  • 详解使用typescript开发node.js项目(简单的环境配置)
  • node.js中bootstrap-table的两种分页的实现方法
  • 浅谈node 调试工具入门教程
  • nodejs+angularjs结合multiparty实现多图片上传的示例代码
  • 手把手教你使用typescript开发node.js应用
  • node.js安装配置图文教程
  • node.js 条形码识别程序构建思路详解
  • node.js 核心http模块,起一个服务器,返回一个页面的实例
  • nodejs可以接受tcp服务器的数据吗
  • nodejs中tcp服务器和http服务器实现的异同
  • nodejs socket 怎么检测客户端主动断开连接
  • nodejs 适合开发TCP服务吗
  • 普通服务器,nodejs的socket最大并发连接数大概在什么级别
  • nodejs怎么通过TCP接受到数据,然后通过socket.io发给前端
  • nodejs中如何使用tcp(或者udp,socket.io等)发送和接收二进制文件
  • node net搭建的tcp服务器频繁报错
  • 帮我解释下这段c++代码,用tcp通信 能帮我 make_buf(std::string msg) ...
  • 如何使用集成了ESP8266芯片的NodeMCU以配置一个可交互的TCP服务器
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved