如何解决如何使用nodejs发送udp包?
嗯,我有一个小路由,应该发送一个 UDP 包并打印一个确认。根据节点上的文档,以下应该可以正常工作:
const dgram = require('dgram');
export async function sendUDP(sess,parameters: {},res) {
const client = dgram.createSocket('udp4');
client.send('Hello World!',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包已经发送的回复。
当我发布到正确的 URL 时,我注意到邮递员收到的回复 Send udp packet
。所以这是有效的。
然而,UDP 包似乎丢失了,在我的本地 ubuntu 上使用 tcpdump
导致什么都没有:
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 是本地主机的接口。
此link中的更多信息
如果您想保存流量日志,可以使用 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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。