Nodejs数据报模块dgram的使用
Nodejs数据报模块dgram的使用dgram
模块是 Node.js 中用于创建 UDP 套接字的内置模块。UDP(用户数据报协议)是一种无连接协议,适用于不需要保证数据包顺序和可靠传输的场景。
以下是 dgram
模块的基本用法示例:
创建服务器
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('listening', () => {
const address = server.address();
console.log(`Server listening on ${address.address}:${address.port}`);
});
server.on('message', (msg, rinfo) => {
console.log(`Server got message: ${msg.toString()} from ${rinfo.address}:${rinfo.port}`);
});
server.bind(41234); // 绑定到端口 41234
创建客户端
const dgram = require('dgram');
const client = dgram.createSocket('udp4');
client.on('error', (err) => {
console.error(`Client error: ${err.stack}`);
client.close();
});
client.on('message', (msg, rinfo) => {
console.log(`Client received reply: ${msg.toString()}`);
});
client.send(Buffer.from('Hello Server'), 41234, 'localhost', (err) => {
if (err) throw err;
console.log('Message sent to server');
});
发送和接收数据
在上面的示例中,服务器监听来自任何主机的 UDP 数据报,并打印接收到的消息。客户端向服务器发送一条消息,并在接收到响应后打印出来。
更多功能
设置超时
server.on('message', (msg, rinfo) => {
console.log(`Server got message: ${msg.toString()} from ${rinfo.address}:${rinfo.port}`);
setTimeout(() => {
console.log('Timeout occurred');
server.close(); // 关闭套接字
}, 5000);
});
广播
// 在服务器端设置广播
server.setBroadcast(true);
// 在客户端发送广播消息
client.send(Buffer.from('Hello Broadcast'), 41234, '255.255.255.255', (err) => {
if (err) throw err;
console.log('Broadcast message sent');
});
多个套接字
你也可以在同一端口上创建多个套接字来处理不同的逻辑:
const socket1 = dgram.createSocket('udp4');
const socket2 = dgram.createSocket('udp4');
socket1.bind(41234);
socket2.bind(41234);
socket1.on('message', (msg, rinfo) => {
console.log(`Socket 1 got message: ${msg.toString()} from ${rinfo.address}:${rinfo.port}`);
});
socket2.on('message', (msg, rinfo) => {
console.log(`Socket 2 got message: ${msg.toString()} from ${rinfo.address}:${rinfo.port}`);
});
这些示例展示了如何使用 dgram
模块进行基本的 UDP 通信。你可以根据具体需求调整代码。
当然,Node.js中的dgram
模块就像是给你的应用添加了一对翅膀,让你可以轻松地发送和接收UDP数据报。想象一下,你正在举办一场派对,而dgram
就是那个让音乐(数据)在整个场地(网络)中流畅播放的音响系统。
首先,你需要创建一个“音响”(socket),这可以通过dgram.createSocket
来完成。比如,你想创建一个监听41234端口的音响:
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
然后,你可以设置这个“音响”监听特定的消息,就像派对上的人们期待着听到他们的歌一样:
server.on('message', (msg, rinfo) => {
console.log(`Server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
最后,别忘了启动你的“音响”,让它开始播放音乐:
server.bind(41234);
现在,你已经准备好发送数据了,就像向派对上的朋友发送消息一样简单:
const client = dgram.createSocket('udp4');
client.send('Hello UDP!', 41234, 'localhost', (err) => {
if (err) throw err;
client.close();
});
这样,你就有了一个基本的UDP服务器和客户端。记住,UDP不像TCP那样保证数据的可靠传输,所以它更像是派对上的即兴表演——充满乐趣但不总是那么有序!
Node.js中的dgram
模块用于创建UDP套接字,实现数据报的发送和接收。首先,通过dgram.createSocket()
创建一个socket实例,可以指定协议类型如udp4
或udp6
。然后,使用.bind()
绑定到特定端口监听数据,.send()
方法用于发送数据报,.on('message', callback)
监听并处理接收到的消息。例如:
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.bind(41234);
server.on('message', (msg, rinfo) => {
console.log(`服务器接收到消息: ${msg} 来自 ${rinfo.address}:${rinfo.port}`);
});