1.利用网络模块实现基于TCP的数据通信
提供了一个网络模块来实现服务器和客户端之间的通信
1.1创建TCP服务器
用网络模块在Node.js中创建TCP服务器
var server=net . createserver([options],[connection listener])//options:false当TCP服务器收到客户端发送的FIN数据包时,会发回一个FIN数据包。true当TCP服务器收到客户端发送的FIN数据包时,它不会发回FIN数据包,这使得TCP服务器可以继续向客户端发送数据,但不会继续接收客户端发送的数据。发送方必须调用end方法来关闭套接字连接。默认值为falseconnectionListener:指定客户端与服务器恢复连接时要调用的回调函数(套接字){ //回调函数代码}。参数值是由TCP服务器监控的套接字端口对象。createServer方法返回创建的TCP服务器
当客户端与服务器建立连接时,会触发连接事件,回调函数可以通过以下方式执行
Server.on ('connection ',function(socket){//callback function code })使用侦听方法通知服务器在创建TCP服务器后开始侦听客户端连接。
Server.listen (port,[host],[backlog],[callback])//port指定要监控的端口号,host:指定要监控的IP地址或主机名。如果省略,服务器将侦听来自任何IPv4地址的客户端连接。backlog:指定等待队列中客户端连接的最大数量。回调:非参数回调函数server.listen(路径,[回调])//server:表示使用unix端口的服务器。路径:指定要侦听的路径。将触发监听事件,然后回调函数callbackserver.listening(句柄,[回调])//server表示一个TCP服务器句柄:指定要监听的套接字句柄(这个句柄可以是TCP服务器对象、套接字端口对象、文件描述符)。现在通过示例创建一个TCP服务器:
varnet=require(' net ')varserver=net . createserver(function(socket){ console . log('已建立客户端-服务器连接')}) server.listen (8431,' localhost ',function () {console.log('服务器开始侦听')})可以在运行后使用
使用telnet访问相应的服务器:
Telnet localhost 8431将有以下结果:
套接字端口对象的示例:
var net=required(' net ')var file=required(' fs ')。createWriteStream('。/message . txt ');var server=net . createserver(function(socket){ console . log('客户端-服务器连接已建立')server . getconnections(function(err,count) {console.log('当前有%d个客户端连接。计数);server . MaxConnections=4;Console.log('最大TCP服务器连接数为%d ',server . MaxConnections);})//server . close(function(){//console . log(' TCP服务器已关闭'。);//})}) server.listen (8431,‘localhost’,function(){ console . log(‘服务器开始侦听’)})server . on(‘connection’,function(socket){ address=socket . address();Console.log('监控的地址信息是%j ',地址);socket.pipe(文件);socket . setencoding(' utf8 ');socket.on('data ',function(data){ console . log(data . tostring());Console.log('已收到%d字节的数据。socket . BytesRead);});Socket.on ('end ',function(){ file . end(' goodbye ')console . log('客户端连接已关闭'))})socket . pause();setTimeout(function(){ console . log(' * * * * * * * * * * * * * *)socket . resume();socket.pipe(文件,{ end : false });},30*1000);//socket.pipe(文件,{ end : false });//settimeout(function(){//file . end('再见'));//socket . unpip(文件);//},5000);socket . settimeout(10 * 1000);Socket.on ('timeout ',function () {console.log('客户端连接超时');socket . settimeout(0);})})1.2创建TCP客户端
建立TCP客户端的示例:
var net=必需(' net ');定义变量客户端=新网socket();客户。setencoding(' utf8 ');client.connect(8431,' localhost ',function(){console.log('已连接到服务器');client.write('你好');console.log('当前已发送%d字节,客户。写入的字节);client.end('再见)console.log('当前已发送%d字节,客户。写入的字节);//setTimeout(函数(){//client。' end('再见');//},10*1000)});client.on('data ',function(data){//console.log('已接收服务器端发送的数据:' '数据);console.log('已接收服务器端发送的数据');})client.on('error ',function(err){console.log('与服务器连接或通信的过程中发生了一个错误,错误编码为“%s”,错误。代码);客户。销毁();})同时需要建立对应的服务器:
var net=必需(' net ');var fs=require(' fs ');var服务器=网络。CreateServer();server.on('connection ',function(socket){console.log('客户端与服务器端连接已建立');插座。setencoding(' utf8 ');var readStream=fs。createreadstream(' ./server。js’);readStream.on('data ',function(data){ var flag=socket。写(数据);console.log('write方法的返回值为:' flag);console.log('缓存队列中当前缓存了%d字符,插座。buffer size);})socket.on('data ',function(data){ console.log('已连接客户端发送的数据: '数据);socket.write(')确认数据:' '数据);})socket.on('error ',function(err){ console.log('客户端通信的过程中发生了一个错误,错误编码为“%s”,错误。代码);插座。销毁();})socket.on('end ',function(){ console.log('客户端连接被关闭。');服务器。unref();})socket.on('close ',函数(had _ error){ if(had _ error){ console。日志('由于一个错误导致窝端口被关闭。');服务器。unref();}else{ console.log('socket端口被正常关闭。');}})服务器. getConnections(函数(错误,计数){ if(计数==2)服务器。close();});});server.listen(8431,“localhost”);server.on('close ',function(){console.log('TCP服务器被关闭。');})在Node.js中利用下面方法可以向客户端或服务器不断发送探测包,以确定连接状态;
socket . setkeepalive([启用],[初始延迟])//启用:树:启用保持活力机制,不断向对方发送一个探测包,如果没有回应表示连接关闭初始时间:间隔时间(毫秒)以上这篇Node.js学习之传输控制协议数据通讯(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。