dgram 模块是 Node.js 中用于提供 UDP 套接字的模块。它支持通过用户数据报协议 (UDP) 进行通信。UDP 是一种无连接的协议,因此不像 TCP 那样需要建立和维护连接,适用于低延迟、不需要确保可靠传输的场景。
1. 基本使用
1.1. 创建 UDP 套接字
javascript
const dgram = require('dgram');
const socket = dgram.createSocket('udp4'); // 创建一个 UDP4 (IPv4) 的套接字,或者用 'udp6' 来支持IPv 6
1.2. 绑定到端口
javascript
socket.bind(41234); // 绑定到端口号 41234
1.3. 发送消息
javascript
const message = Buffer.from('Hello UDP!');
socket.send(message, 0, message.length, 41234, 'localhost', (err) => {
if (err) console.error(err);
else console.log('Message sent!');
});
1.4. 接收消息
javascript
socket.on('message', (msg, rinfo) => {
console.log(`Received message: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
1.5. 关闭套接字
javascript
socket.close(); // 关闭 UDP 套接字
1.6. 错误处理
javascript
socket.on('error', (err) => {
console.error(`Socket error: ${err}`);
socket.close();
});
2. 完整的 UDP 示例
2.1. UDP 服务器
javascript
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('error', (err) => {
console.log(`Server error: ${err}`);
server.close();
});
server.on('message', (msg, rinfo) => {
console.log(`Server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
server.on('listening', () => {
const address = server.address();
console.log(`Server listening on ${address.address}:${address.port}`);
});
server.bind(41234); // 监听 41234 端口
2.2. UDP 客户端
javascript
const dgram = require('dgram');
const client = dgram.createSocket('udp4');
const message = Buffer.from('Hello, Server!');
client.send(message, 41234, 'localhost', (err) => {
client.close();
});
3. 常用事件
-
message:当接收到消息时触发。
-
error:当套接字发生错误时触发。
-
listening:当服务器成功绑定并开始监听时触发。
-
close:当套接字关闭时触发。
4. 适用场景
-
网络广播。
-
轻量级、低延迟通信,如实时游戏或流媒体。
-
对可靠性要求不高的数据传输,如 DNS 查询。