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 通信。你可以根据具体需求调整代码。


3 回复

当然,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那样保证数据的可靠传输,所以它更像是派对上的即兴表演——充满乐趣但不总是那么有序!


dgram 模块是 Node.js 提供的一个用于处理 UDP 数据报的内置模块。UDP(用户数据报协议)是一种无连接的、不可靠的传输层协议。以下是如何使用 dgram 模块创建 UDP 服务器和客户端的基本示例。

创建一个 UDP 服务器

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} from ${rinfo.address}:${rinfo.port}`);
});

server.on('error', (err) => {
    console.error(`Server error:\n${err.stack}`);
    server.close();
});

server.bind(41234); // 绑定到端口41234

这段代码首先导入了 dgram 模块,然后创建了一个 UDP 服务器实例。服务器监听指定的端口(本例中为 41234),并为接收到的消息和错误设置事件处理器。

创建一个 UDP 客户端

const dgram = require('dgram');
const client = dgram.createSocket('udp4');

client.on('error', (err) => {
    console.error(`Client error:\n${err.stack}`);
    client.close();
});

function sendMessage(message, port, address) {
    client.send(message, port, address, (err) => {
        if (err) throw err;
        console.log(`Sent data: ${message} to ${address}:${port}`);
    });
}

sendMessage("Hello Server", 41234, '127.0.0.1'); // 发送消息到服务器

client.on('message', (msg, rinfo) => {
    console.log(`Received message: ${msg} from ${rinfo.address}:${rinfo.port}`);
    client.close(); // 接收到消息后关闭客户端
});

这个客户端首先创建一个 UDP 套接字,并定义了一个函数 sendMessage 来发送消息。这里向运行在同一机器上的服务器发送一条消息,并且当客户端接收到响应消息时会关闭自身。

这两个例子展示了如何使用 Node.js 的 dgram 模块来实现简单的 UDP 通信。你可以根据需要修改这些代码以适应更复杂的应用场景。

Node.js中的dgram模块用于创建UDP套接字,实现数据报的发送和接收。首先,通过dgram.createSocket()创建一个socket实例,可以指定协议类型如udp4udp6。然后,使用.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}`);
});
回到顶部