File tree Expand file tree Collapse file tree 4 files changed +101
-0
lines changed Expand file tree Collapse file tree 4 files changed +101
-0
lines changed Original file line number Diff line number Diff line change 1+ 创建 UDP 服务器
2+
3+ UDP User Datagram Protocol, 用户数据报协议, 是OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
4+
5+ UDP 有不提供数据包分组、组装 和 不能对数据包进行排序的缺点, 也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP 用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的CS 模式的网络应用都需要使用UDP 协议。
6+
7+ TCP 传输控制协议 UDP 协议直接位于 IP 协议的上一层。
8+
9+ UDP 和 TCP 都属于 传输层协议。
10+
11+ UDP 协议的主要作用是将网络数据流量压缩成数据包的形式。
12+
13+ 一个典型的数据包就是一个二进制数据的传输单位。
14+
15+ 每个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
16+
17+ ## TCP 和 UDP 的区别
18+
19+ TCP 是面向连接的; 而UDP 是无连接的,即发送数据之前不需要建立连接。
20+
21+ TCP 提供可靠的服务。 通过TCP 连接传送的数据无差错,不丢失,不重复,且按序到达; UDP是尽最大努力交付,即 不保证可靠交付。
22+
23+ TCP 通过校验和,重传控制,序号标识,滑动窗口,确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
24+
25+ UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时要求的通信或广播通信。
26+
27+ 每一条TCP连接只能是点到点的;而UDP支持一对一,一对多,多对一和多对多重交呼方式。
28+
29+ TCP 对系统资源要求较多; UDP 对系统资源要求较少。
30+
31+
32+ UDP 服务器
33+ UDP 客户端
34+
35+ 创建UDP服务器
36+
37+
Original file line number Diff line number Diff line change 1+ const dgram = require ( 'dgram' ) ;
2+ const server = dgram . createSocket ( 'udp4' ) ;
3+
4+ server . on ( 'error' , ( err ) => {
5+ console . log ( 'error 事件' ) ;
6+ server . close ( ) ;
7+ } ) ;
8+
9+ server . on ( 'message' , ( msg , rinfo ) => {
10+ console . log ( '服务器' )
11+ } ) ;
12+
13+ server . on ( 'listening' , ( ) => {
14+ const address = server . address ( ) ;
15+ console . log ( 'address' , address )
16+ } ) ;
17+
18+ server . bind ( 8888 )
19+
20+ // Node.js只要套接字开始监听数据报消息,就会发出 listening 事件,只要创建UDP套接字,就回发生这种情况。
21+ // server.address() 方法用于获取 server 所使用的地址。
22+
23+ // msg
24+ // rinfo
Original file line number Diff line number Diff line change 1+ const dgram = require ( 'dgram' ) ;
2+ const server = dgram . createSocket ( 'udp4' ) ;
3+
4+ server . on ( 'error' , ( err ) => {
5+ console . log ( 'error 事件 服务器错误' ) ;
6+ server . close ( ) ;
7+ } ) ;
8+
9+ server . on ( 'close' , ( ) => {
10+ console . log ( '服务器close事件' )
11+ } )
12+
13+ server . on ( 'message' , ( msg , rinfo ) => {
14+ console . log ( `服务器从${ rinfo . address } :${ rinfo . port } 接收消息: ${ msg } ` ) ;
15+ console . log ( `地址类型是${ rinfo . family } ,消息大小${ rinfo . size } ` ) ;
16+
17+ server . send ( msg + " too!" , rinfo . port , rinfo . address ) ;
18+ } ) ;
19+
20+ server . on ( 'listening' , ( ) => {
21+ const address = server . address ( ) ;
22+ console . log ( `服务器监听 ${ address . address } :${ address . port } ` )
23+ } ) ;
24+
25+ server . bind ( 9999 )
Original file line number Diff line number Diff line change 1+ const dgram = require ( 'dgram' ) ;
2+
3+ const message = Buffer . from ( 'i love u' ) ;
4+
5+ const client = dgram . createSocket ( 'udp4' ) ;
6+
7+ client . on ( 'message' , ( msg , rinfo ) => {
8+ console . log ( `客户端${ rinfo . address } :${ rinfo . port } 接收到消息:${ msg } ` ) ;
9+ console . log ( `地址类型是${ rinfo . family } , 消息大小是${ rinfo . size } ` ) ;
10+ } ) ;
11+
12+ // 每隔2秒执行一次
13+ setInterval ( ( ) => {
14+ client . send ( message , 9999 , 'localhost' )
15+ } , 2000 )
You can’t perform that action at this time.
0 commit comments