如何使用nodejs发送udp包?

好吧,我有一个小路由,应该发送一个 UDP 包并打印一个确认。根据节点上的文档,以下内容应该可以正常工作:

const dgram = require('dgram');

export async function sendUDP(sess, parameters: {}, res) {
    const client = dgram.createSocket('udp4');
    client.send('Hello World!',0, 12, 12000, '127.0.0.1', function(err, bytes) {
        client.close();
    });

    //res is the response object from express
    return res.send("Send udp packet");
}

它应该向回调 IP(本地机器)上的端口 12000 发送 UDP 请求。并发送UDP数据包已发送的回复。

Send udp packet当我发布到正确的 URL 时,我注意到邮递员收到的回复。所以这是有效的。

但是,UDP 包似乎丢失了,tcpdump在我的本地 ubuntu 上使用会导致虚无:

sudo tcpdump -n udp port 12000

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp5s0, link-type EN10MB (Ethernet), capture size 262144 bytes

0 packets captured
0 packets received by filter
0 packets dropped by kernel

(当然,tcpdump 在功能测试期间一直保持运行)。UDP 请求去哪里了?发生了什么?

我希望有一个生活记录器,以便我可以轻松地使用 udp 测试 nodejs 应用程序。

回答

你需要告诉 tcpdump 它需要监听的接口

tcpdump -i lo udp 端口​​ 12000

lo 是本地主机的接口。

此链接中的更多信息

如果要保存流量日志,可以使用wireshark。

我使用 '!(udp.port == 53 || tcp.port == 53) && udp' 作为过滤器,只查看 udp 数据包。

我将此代码添加到我的服务器并将 udp 数据包发送到那里以打印内容

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

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

serverUDP.on('message', (msg, rinfo) => {
  console.log(`serverUDP got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});

serverUDP.on('listening', () => {
  const address = serverUDP.address();
  console.log(`serverUDP listening ${address.address}:${address.port}`);
});

serverUDP.bind(3001);

这是节点文档中的代码示例


以上是如何使用nodejs发送udp包?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>