前言
在 Node.js 中,net
模块用于构建 TCP 服务器和客户端,而 dgram
模块则用于构建 UDP 服务器和客户端。
1. TCP(net 模块)
1.1 什么是 TCP
TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层协议。它提供了双方通信的稳定连接,确保数据的有序传输和可靠性。
1.2 net 模块的使用
1.2.1 创建 TCP 服务器
import net from 'net';
const server = net.createServer((socket) => {
console.log('客户端已连接');
// 接收客户端发送的数据
socket.on('data', (data) => {
console.log(`接收到数据:${data}`);
});
// 监听客户端断开连接事件
socket.on('end', () => {
console.log('客户端已断开连接');
});
});
// 监听端口
server.listen(8080, () => {
console.log('TCP 服务器已启动');
});
1.2.2 创建 TCP 客户端
import net from 'net';
const client = net.createConnection({ port: 8080, host: 'localhost' }, () => {
console.log('成功连接到服务器');
// 发送数据到服务器
client.write('Hello, TCP Server!');
});
// 监听服务器返回的数据
client.on('data', (data) => {
console.log(`从服务器接收到数据:${data}`);
});
// 监听连接断开事件
client.on('end', () => {
console.log('与服务器断开连接');
});
分别执行服务端和客户端就可以看到服务端打印了从客户端接收到的消息。
2. UDP(dgram 模块)
2.1 什么是 UDP
UDP(User Datagram Protocol)是一种无连接的、不可靠的、面向消息的传输层协议。它不保证数据的有序性和可靠性,适用于一些实时性要求较高的场景。
2.2 dgram 模块的使用
2.2.1 创建 UDP 服务器
import dgram from 'dgram';
const server = dgram.createSocket('udp4');
server.on('message', (msg, rinfo) => {
console.log(`接收到来自 ${rinfo.address}:${rinfo.port} 的消息:${msg}`);
});
// 监听端口
server.bind(41234, () => {
console.log('UDP 服务器已启动');
});
2.2.2 创建 UDP 客户端
import dgram from 'dgram';
const client = dgram.createSocket('udp4');
// 发送消息到服务器
client.send('Hello, UDP Server!', 41234, 'localhost', (err) => {
if (err) throw err;
console.log('消息发送成功');
});
// 监听服务器回复的消息
client.on('message', (msg, rinfo) => {
console.log(`接收到服务器的回复:${msg}`);
});
分别执行服务端和客户端就可以看到服务端打印了从客户端接收到的消息。
TCP 和 UDP 的区别
TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是两种不同的传输层协议,它们在数据传输的方式、特性和应用场景上存在一些明显的区别。
1. 连接性
- TCP: 面向连接的协议。在数据传输之前,必须先建立连接,然后进行数据传输,最后释放连接。连接的建立和断开过程会引入一些开销。
- UDP: 无连接的协议。发送数据之前不需要建立连接,直接将数据发送给目标,不关心目标是否准备好接收。由于无连接的特性,UDP 的开销较小。
2. 可靠性
- TCP: 提供可靠的、面向连接的服务。通过数据的序列号、确认和重传机制,确保数据的有序性和可靠性。如果数据丢失或出错,TCP 会进行重传,直到数据正确被接收。
- UDP: 不提供可靠性保证。由于无连接的特性,UDP 不进行数据的重传,数据可能会丢失或乱序。在一些实时性要求较高、允许数据丢失的应用场景中使用。
3. 有序性
- TCP: 提供有序的数据传输。通过序列号和确认机制,保证数据在传输过程中的有序性,接收方按照序列号进行数据的组装。
- UDP: 不提供有序性保证。由于无连接的特性,数据的到达顺序不受保障。
4. 数据量
- TCP: 面向字节流的协议,会将数据拆分成小的数据包进行传输。TCP 保证数据的完整性,适用于大数据量的传输。
- UDP: 面向报文的协议,每个数据包都是一个独立的报文。UDP 不会对数据进行拆分和组装,适用于小数据量、实时性要求较高的场景。
5. 应用场景
- TCP: 适用于要求可靠性、有序性、面向连接的应用场景,如文件传输、电子邮件等。
- UDP: 适用于实时性要求较高、允许数据丢失的应用场景,如音视频传输、在线游戏等。