Skip to content

Commit 3a722f1

Browse files
committed
update: --
1 parent e2a034c commit 3a722f1

File tree

4 files changed

+101
-0
lines changed

4 files changed

+101
-0
lines changed

企业级/UDP.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
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)

0 commit comments

Comments
 (0)