Node.js实现基于TCP与UDP的数据通信

7.1、使用net模块实现基于TCP的数据通信

7.1.1、创建TCP服务器

    在node.js中可以很方便的创建一个TCP服务器,只需调用net模块中的CreateServer方法即可。

    var server=net.createSever([options],[connctionListener])

    options参数值为一个对象,可以在该对象中受用一个布尔类型的allowHalfOpen属性,当该属性被指定为false时,当TCP服务器接收到客户端发送的一个FIN包时将会回发一个FIN包,当该属性被设定为true时,当TCP服务器接收到客户端发送的一个FIN包时不回发FIN包,这使的TCP 服务器可以继续向客户端发送数据,但不会继续接收客户端发送的数据。开发者必须调用end方法来关闭该socket连接。该属性默认值为false。

connectionListener参数用于指定当客户端与服务器端建立连接时所要调用的回调函数。回调函数如下所示:

function(socket){//回调函数代码}

在该回调函数中使用一个参数,参数值为该TCP服务器监听的socket端口对象。

createServer方法返回被创建的TCP服务器。

当客户端与服务器端建立连接时,触发connection事件,我们也可以不在createServer方法中使用connectionListener参数,而是通过connection事件进行监听,并且该事件的回调函数的方法来指定客户端与服务器端连接时需要执行的处理,如下所示:

server.on('connection',function(socket){//回调函数代码})

7.1.2、socket端口对象

    在node.js中,使用net,.socket代表一个socket端口对象。在使用createSever方法的connetionListener参数锁指定的回调函数的参数值即一个被自动创建的net.Socket对象,在对TCP服务器所指定的connection事件回调函数的参数值同样为一个被自动创建的net.socket对象。

  与TCP服务器对象的address方法类似,可以利用socket端口对象的address方法获取该socket端口的相关地址信息。

var address=socket.address();

address.prot:socket端口对象的端口号

address.address:socket端口对象所属地址

address.family:标识该socket端口对象所属地址是IPv4地址还是IPv6地址的字符串,例如“IPv4”

使用socket端口对象的address方法查看端口地址信息,代码如下:

var net=require('net');

var server=net.createServer();

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

    address=socket.address();

    console.log('socket端口对象的地址信息为:%j',address);

})

server.listen(8431,'localhost');

 

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

可通过对该事件进行监听并且指定回调函数的方法来指定当服务器端监听的socket端口对象接收到客户端发送的数据时所需执行的出来。

socket.on('data',function(data){//回调函数});

在该回调函数中,使用一个参数,参数值为一个Buffer对象或一个字符串对象。

另外,socket端口对象具有一个bytesRead属性,该属性值为socket端口对象接收到的客户端发送数据的字节数。

当客户端链接被关闭时触发socket端口对象的end事件。

可以利用socket对象的pipe方法将客户端发送的流数据写到文件等其他目标对象中。

socket.pipe(destination,[options]);

在pipe方法中,使用两个参数,其中destination参数为必须输入参数,options为可选参数。destination必须为一个可用于写入流数据的对象,options参数为一个对象,可以在该对象中使用一个布尔类型的end属性,如果该属性为true,则当数据被全部读取完毕时立即结束写操作,如果该属性为false,则不行结束写操作,目标对象中可以被继续写入新的数据,该属性值默认为true.

可以使用socket端口对象的unpipe方法取消对目标对象的写入操作。

在node.js中,可以使用socket对象的pause方法暂停data事件的触发,这是服务器把每个客户端发哦那个的数据暂时存在一个单独的缓存区,socket端口对象的resume方法恢复data事件的触发,这时将读取被 缓存的该客户端数据。

socket.pause();

socket.resume();

当存在大量的往TCP服务器端发送数据的客户端时,这一对方法可用来控制对每个客户端发送数据的读取速度。

 

当TCP服务器与客户端建立连接或通信过程中发生错误时,触发socket对象的error事件 。

在捕捉到错误之后,应该使用socket对象的destroy方法销毁该socketd端口对象,以确保该socket端口对象不会在被利用。

socket.destroy();

 

7.1.3、创建TCP客户端

    在node.js中,创建TCP客户端是一件非常简单的事,只要创建一个用于连接TCP服务器的socket端口对象即可。

var net=new net.Socket([options]);

创建了socket端口对象之后,可以使用两种connect方法链接TCP服务器。

方法一 socket.connect(port,[host],[connectListener]);

方法二 socket.connect(path,[connectListener])

 

7.1.4、net模块中的类方法

7.2、使用dgram模块实现基于UDP的数据通信。

 

 

转载于:https://my.oschina.net/wsh2016/blog/761377

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值