7.一、使用net模块实现基于TCP的数据通讯node
7.1.一、建立TCP服务器缓存
在node.js中能够很方便的建立一个TCP服务器,只需调用net模块中的CreateServer方法便可。服务器
var server=net.createSever([options],[connctionListener])socket
options参数值为一个对象,能够在该对象中受用一个布尔类型的allowHalfOpen属性,当该属性被指定为false时,当TCP服务器接收到客户端发送的一个FIN包时将会回发一个FIN包,当该属性被设定为true时,当TCP服务器接收到客户端发送的一个FIN包时不回发FIN包,这使的TCP 服务器能够继续向客户端发送数据,但不会继续接收客户端发送的数据。开发者必须调用end方法来关闭该socket链接。该属性默认值为false。函数
connectionListener参数用于指定当客户端与服务器端创建链接时所要调用的回调函数。回调函数以下所示:ui
function(socket){//回调函数代码}server
在该回调函数中使用一个参数,参数值为该TCP服务器监听的socket端口对象。对象
createServer方法返回被建立的TCP服务器。事件
当客户端与服务器端创建链接时,触发connection事件,咱们也能够不在createServer方法中使用connectionListener参数,而是经过connection事件进行监听,而且该事件的回调函数的方法来指定客户端与服务器端链接时须要执行的处理,以下所示:ip
server.on('connection',function(socket){//回调函数代码})
7.1.二、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.三、建立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.四、net模块中的类方法
7.二、使用dgram模块实现基于UDP的数据通讯。