使用node.js监听UDP数据包

5

我正在进行一个项目,其中一个C应用程序从端口44044发送udp数据报,我想使用node.js v0.10.20将这些数据包简单地回显到控制台。

我使用经典的示例来建立连接:

var dgram = require('dgram');
var port = 44044;

socket = dgram.createSocket('udp4');

socket.on('message', function (msg, info){
    console.log(msg.toString());
 });

socket.on('listening', function(){
    var address = socket.address();
    console.log("listening on :" = address.address + ":" + address.port);
});

socket.bind(port);

然而,当我运行这个示例时,我的 C 应用程序会抱怨它使用于广播的端口44044已被占用。相反,如果我先启动 C 应用程序,则 Node.js 应用程序会立即返回一个错误 "Error: bind EADDRINUSE"。
现在我知道这意味着我有两个服务器正在尝试在同一个端口上提供服务。但是我不知道如何获取一个 Node 线程来侦听端口44044上的 udp 广播。阅读 Node.js 文档并没有帮助我解决这个问题。
2个回答

1

尝试在您的C程序中使用SO_REUSEADDR,在您的node应用程序中使用:

socket = dgram.createSocket({ type: 'udp4', reuseAddr: true });

代替:

而不是:

socket = dgram.createSocket('udp4');

我尝试过这个,直到意识到节点0.10.20不支持在签名中使用对象调用dgram.createSocket。我将尝试更新我的node.js版本。 - Lynx-Lab

0
C应用程序发送自端口44044。它发送到哪个端口?那就是你的node.js程序需要监听的端口。

我使用了错误的术语。当我进入源代码时,似乎它发送到端口44044。我这样说的原因是因为我有另一个实用程序连接到端口44044并与我的C应用程序交互而没有问题。源端口未知,但就我对UDP的理解来看,这不是强制性的。C应用程序能同时从端口44044发送和接收吗? - Lynx-Lab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接