2019独角兽企业重金招聘Python工程师标准>>>

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

Node.js实现基于TCP与UDP的数据通信相关推荐

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

    在Node.js中,提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信. 创建TCP服务器 在Node.js中,可以很方便地创建一个TCP服务器,只需调用net模块中的createS ...

  2. Node.js权威指南 (7) - 实现基于TCP与UDP的数据通信

    7.1 使用net模块实现基于TCP的数据通信 / 136 7.1.1 创建TCP服务器 / 136 7.1.2 socket端口对象 / 142 7.1.3 创建TCP客户端 / 151 7.1.4 ...

  3. 基于tcp和udp的socket实现

    2019独角兽企业重金招聘Python工程师标准>>> 本文介绍如何用Java实现Socket编程.首先介绍Java针对Socket编程提供的类,以及它们之间的关系.然后分别针对TC ...

  4. 实验一 基于TCP和UDP的客户端和服务器端

    基于TCP和UDP的客户端和服务器端 一. 实验要求 二.实验目的 三. 实验环境 四. 实验内容 五. 实验原代码 六. 实验结论 七. 实验错误及改正 八. 总结 一. 实验要求 (1)分别编写基 ...

  5. 基于TCP和UDP的socket

    为什么学习socket 你自己现在完全可以写一些小程序了,但是前面的学习和练习,我们写的代码都是在自己的电脑上运行的,虽然我们学过了模块引入,文件引入import等等,我可以在程序中获取到另一个文件的 ...

  6. 群聊系统项目(基于TCP、UDP实现)

    最近学习了网络编程后, 写了一个基于TCP.UDP协议的群聊系统. 技术栈 1.TCP.UDP通信       2.生产.消费模型, 支持并发       3.自定义协议封装数据 & json ...

  7. 浅谈基于TCP和UDP的协议设计

    From:http://blog.sina.com.cn/s/blog_48d4cf2d0101859x.html 一个基于TCP/WebSockets的超级精简的长连接消息协议:https://st ...

  8. C++基于TCP和UDP的socket通信

    TCP和UDP属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它事先为要发送的数据开辟好连接通道(三次握手),然后再进行数据发送:而UDP则不为IP提供可靠性,一般用于实时的视频流传输,像rt ...

  9. udp协议没有粘包问题、基于socketserver实现并发的socket(基于tcp、udp协议)、基于udp协议的套接字、操作系统原理以及进程知识

    基于udp协议的套接字通信服务端 from socket import *server=socket(AF_INET,SOCK_DGRAM) #数据报协议->udp server.bind((' ...

最新文章

  1. springcloud 子项目怎么导入_使用eclipse一步一步创建SpringCloud项目(二)—— 使用feign和ribbon调用微服务...
  2. pytorch Bert 情感分类
  3. CUDA编程指南阅读笔记
  4. 2018年4月1日 蓝桥杯 C/C++B组答案 递增三元组
  5. [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试
  6. 简而言之,JUnit:另一个JUnit教程
  7. C++学习笔记系列三
  8. Vue 子组件调用父组件的方法
  9. 回溯策略的汉诺塔问题
  10. 小白都不知道的互联网行业黑化大全
  11. 涉及第三方支付接口,怎么测?
  12. oc 中正则表达式不区分中英文分号的问题
  13. NLP【07】transformer原理、实现及如何与词向量做对接进行文本分类(附代码详解)
  14. 没想到你们是这样的女生……
  15. 一个人的精神结构和他的精神资源
  16. 基于Java机器学习自学笔记(第81-87天:CNN卷积神经网络的入门到全代码编写)
  17. Unity数据可视化 温度图效果(一)
  18. MVC框架的简单描述
  19. 怎样快速提取视频中的音频文件?
  20. python 操作excle和word

热门文章

  1. H5移动页面的touch事件与点击穿透问题
  2. Maven 中央仓库地址
  3. 初中生问题:求任意凸多边形的交叉面积
  4. 游戏开发:OpenGL入门学习
  5. jQuery之换肤与cookie插件
  6. [ASP.NET MVC 小牛之路]01 - 理解MVC模式
  7. 基于OSSIM的漏洞***测试视频教程
  8. 汇总常用的jQuery操作Table tr td方法
  9. [转载]最完整PHP.INI中文版
  10. insert select带来的问题