【问题标题】:using node.js to listen for udp datagrams使用 node.js 监听 udp 数据报
【发布时间】:2015-04-16 22:57:52
【问题描述】:

我正在开发一个 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 应用程序会立即返回错误“错误:绑定 EADDRINUSE”。

现在我明白这意味着我有两台服务器试图在同一个端口上提供服务。但我没有得到的是如何获得一个节点线程来监听端口 44044 上的 udp 广播?阅读 node.js 文档并没有帮助我解决这个问题。

【问题讨论】:

    标签: javascript node.js sockets udp


    【解决方案1】:

    尝试在您的 C 程序和节点应用程序中使用 SO_REUSEADDR

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

    代替:

    socket = dgram.createSocket('udp4');
    

    【讨论】:

    • 我尝试了这个,直到我意识到节点 0.10.20 不支持使用签名中的对象调用 dgram.createSocket。我会尝试更新我的 node.js 版本。
    【解决方案2】:

    C 应用端口 44044 发送。它发送到哪个端口?这是您的node.js 程序需要监听的端口。

    【讨论】:

    • 我使用了错误的术语。当我进入源代码时,它似乎发送到端口 44044。我之所以这么说是因为我有另一个实用程序连接到端口 44044 并与我的 C 应用程序交互没有问题。源端口未知,但据我对 udp 的了解,它不是强制性的。 C 应用程序是否可以同时从端口 44044 发送数据?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    相关资源
    最近更新 更多