Node.js之TCP/IP数据通讯详解

本文主要为大家带来一篇node.js学习之tcp/ip数据通讯(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

1.使用net模块实现基于TCP的数据通讯

提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信

1.1创建TCP服务器

在Node.js利用net模块创建TCP服务器

var server = net.createServer([options],[connectionListener])//options:false当TCP服务器接收到客户端发送的一个FIN包时将会回发一个FIN包   true当TCP服务器接收到客户端发送的一个FIN包时将不会回发FIN包,这使得TCP服务器可以继续向客户端发送数据,但不会继续接收客户端发送的数据。来发者必须调用end方法来关闭socket连接。默认为falseconnectionListener:指定当客户端与服务器端简历连接时所要调用的回调函数function(socket){ //回调函数代码}

登录后复制

参数值为TCP服务器监听的socket端口对象createServer方法返回被创建的TCP服务器

当客户端与服务器建立连接时,触发connection事件,可以利用下面方式执行回调函数

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

登录后复制

在创建TCP服务器后,使用listen方法通知服务器开始监听客户端连接

server.listen(port,[host],[backlog],[callback])//port指定需要监听的端口号,host:指定需要监听的IP地址或主机名,如果省略,服务器将监听来自于任何IPv4地址的客户端连接backlog:指定位于等待队列中的客户端连接的最大数量callback:无参回调函数server.listen(path,[callback])//server:代表一个使用unix端口的服务器path:指定需要监听的路径,会触发listening事件,然后执行回调函数callbackserver.listenting(handle,[callback])//server 代表一个TCP服务器handle:指定需要监听的socket句柄(该句柄可以为一个TCP服务器对象,socket端口对象,文件描述符)

登录后复制

现举例创建一个TCP服务器:

var net = require('net')var server = net.createServer(function(socket){ console.log('客户端与服务器连接已建立')})server.listen(8431,'localhost',function(){ console.log('服务器端开始监听')})

登录后复制

运行后可得如下结果:

Node.js之TCP/IP数据通讯详解

利用telnet访问对应的服务器:

telnet localhost 8431

登录后复制

会出现的结果如下:

Node.js之TCP/IP数据通讯详解

socket端口对象举例:

var net = require('net')var file = require('fs').createWriteStream('./message.txt');var server = net.createServer(function(socket){console.log('客户端与服务器连接已建立')server.getConnections(function(err,count){ console.log('当前存在%d个客户端连接。',count); 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',address);socket.pipe(file);socket.setEncoding('utf8');socket.on('data',function(data){ console.log(data.toString()); console.log('已接受到%d字节数据。',socket.bytesRead);});socket.on('end',function(){ file.end('再见') console.log('客户端连接被关闭。')})socket.pause();setTimeout(function(){ console.log('*************') socket.resume(); socket.pipe(file,{end:false});},30*1000);// socket.pipe(file,{end:false});// setTimeout(function(){ // file.end('再见。'); // socket.unpipe(file);// },5000);socket.setTimeout(10*1000);socket.on('timeout',function(){ console.log('客户端连接超时'); socket.setTimeout(0);})})

登录后复制

1.2 创建TCP客户端

建立TCP客户端举例:

var net = require("net");var client = new net.Socket();client.setEncoding('utf8');client.connect(8431,'localhost',function(){console.log('已连接到服务器');client.write('你好');console.log('当前已发送%d字节',client.bytesWritten);client.end('再见')console.log('当前已发送%d字节',client.bytesWritten);// setTimeout(function(){ // client.end('再见');  // },10*1000)});client.on('data',function(data){//console.log('已接收服务器端发送的数据: '+data);console.log('已接收服务器端发送的数据');})client.on('error',function(err){console.log('与服务器连接或通信的过程中发生了一个错误,错误编码为%s',err.code);client.destroy();})

登录后复制

同时需要建立对应的服务器:

var net = require('net');var fs = require('fs');var server = net.createServer();server.on('connection',function(socket){console.log('客户端与服务器端连接已建立');socket.setEncoding('utf8');var readStream = fs.createReadStream('./server.js');readStream.on('data',function(data){ var flag = socket.write(data); console.log('write方法的返回值为:'+flag); console.log('缓存队列中当前缓存了%d字符。',socket.bufferSize);})socket.on('data',function(data){ console.log('已连接客户端发送的数据:'+data); socket.write('确认数据:'+data);})socket.on('error',function(err){ console.log('客户端通信的过程中发生了一个错误,错误编码为%s',err.code); socket.destroy();})socket.on('end',function(){ console.log('客户端连接被关闭。'); server.unref();})socket.on('close',function(had_error){ if(had_error){  console.log('由于一个错误导致socket端口被关闭。');  server.unref(); }else{  console.log('socket端口被正常关闭。'); }})server.getConnections(function(err,count){ if(count==2)  server.close();});});server.listen(8431,'localhost');server.on('close',function(){console.log('TCP服务器被关闭。');})

登录后复制

在Node.js中利用下面方法可以向客户端或服务器不断发送探测包,以确定连接状态;

socket.setKeepAlive([enable],[initialDelay])//enable:true:启用Keep-alive机制,不断向对方发送一个探测包,如果没有回应表示连接关闭initialDelay:间隔时间(毫秒)

登录后复制

相关推荐:

Node.js创建Web、TCP服务器

浅析TCP传输的三次握手四次挥手策略

TCP/IP与UDP究竟有什么区别

以上就是Node.js之TCP/IP数据通讯详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2788953.html

(0)
上一篇 2025年3月8日 18:33:54
下一篇 2025年2月23日 18:08:31

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • AngularJS表单元素值实现绑定操作详解

    本文主要介绍了angularjs实现表单元素值绑定操作,结合具体实例形式分析了angularjs针对表单元素属性相关操作技巧,需要的朋友可以参考下,希望能帮助到大家。 ng-disabled:绑定控件的disabled属性 ng-show:…

    2025年3月8日
    200
  • JavaScript for循环if判断语句详解

    本文主要为大家带来一篇javascript for循环 if判断语句(学习笔记)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 for(初始值;循环条件;操作){   满足条件要执行的代码…

    编程技术 2025年3月8日
    200
  • vue中使用express和fetch获取本地json文件技巧分享

    本文主要介绍了详解vue中使用express+fetch获取本地json文件,非常具有实用价值,需要的朋友可以参考下,希望能帮助到大家。 自己在做个vue小demo的时候,想模拟从服务器获取json数据的过程,一开始的想法是使用fetch直…

    2025年3月8日
    200
  • JS判断数组详细介绍

    如何判断数组?有的小伙伴们应该知道,但是有的却说不上来js如何判断数组。下面小编就针对这个问题给大家收集整理了份资料,感兴趣的朋友一起看看吧,希望大家能掌握js判断数组的知识。 typeof运算符 typeof会返回这个类型的字符串 var…

    编程技术 2025年3月8日
    200
  • NodeJs通过async和await处理异步的方法

    我们在编写express后台,经常要有许多异步io的处理。在远古时代,我们都是用chunk函数处理,也就是我们最熟悉的那种默认第一个参数是error的函数。我们来模拟一个mongo数据库的操作,感受一下。 本文主要介绍NodeJs通过asy…

    编程技术 2025年3月8日
    200
  • 细说AngularJS的控制器函数

    前面我们和大家分享过angularjs学习之控制器、数据绑定、作用域详解,本文我们主要介绍angularjs中控制器函数的定义与使用方法,结合具体实例形式分析了angularjs控制器函数的定义、绑定及相关使用技巧,需要的朋友可以参考下,希…

    2025年3月8日
    200
  • JS合并json对象实例

    我们分享过很多关于json对象的文章,本文主要介绍js实现合并json对象的方法,涉及javascript递归调用与json格式数据遍历的相关操作技巧,需要的朋友可以参考下,希望能帮助到大家。 一、问题: 求json对象合并的方法 var …

    2025年3月8日
    200
  • form转json实现方法

    本文主要介绍了jquery实现的form转json功能,结合完整实例形式分析了jquery将form表单数据封装成json传输的具体步骤与相关操作技巧,需要的朋友可以参考下,希望能帮助到大家。 nbsp;html PUBLIC “-//W3…

    2025年3月8日
    200
  • JS实现websocket实时消息提示

    本文主要介绍了js实现websocket长轮询实时消息提示的效果的相关资料,需要的朋友可以参考下,希望能帮助到大家。 效果图如下: 参考代码如下: jsp代码:             “>”  style=”max-width:90…

    2025年3月8日
    200
  • JavaScript中出现的错误处理方式

    javascript的事件驱动范式增添了丰富的语言,也是让使用javascript编程变得更加多样化。如果将浏览器设想为javascript的事件驱动工具,那么当错误发生时,某个事件就会被抛出。理论上可以认为这些发生的错误只是javascr…

    2025年3月8日
    200

发表回复

登录后才能评论