node.js - UDP 多播失败 - NodeJS/Windows 10

标签 node.js windows udp multicast

我正在绞尽脑汁试图让它发挥作用。我已经阅读了与 NodeJS UDP 相关的所有其他答案,但无济于事。我使用的是 Windows 10。

这是我收到的错误:

Uncaught Exception: Error: write ENOTSUP
at exports._errnoException (util.js:1022:11)
at ChildProcess.target._send (internal/child_process.js:654:20)
at ChildProcess.target.send (internal/child_process.js:538:19)
at sendHelper (cluster.js:751:15)
at send (cluster.js:534:12)
at cluster.js:509:7
at SharedHandle.add (cluster.js:99:3)
at queryServer (cluster.js:501:12)
at Worker.onmessage (cluster.js:450:7)
at ChildProcess.<anonymous> (cluster.js:765:8)
at emitTwo (events.js:111:20)
at ChildProcess.emit (events.js:191:7)
at process.nextTick (internal/child_process.js:744:12)
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickDomainCallback [as _tickCallback] (internal/process/next_tick.js:122:9)

这是我的代码:

let dgram = require('dgram'),
        server = dgram.createSocket('udp4'),
        multicastAddress = '239.255.255.250',
        multicastPort = 1900,
        myIp = '192.168.51.133';

    server.bind(multicastPort, myIp, function () {
        server.setBroadcast(true);
        server.setMulticastTTL(128);
        server.setInterface.getbyname(myIp);
        server.addMembership(multicastAddress, myIp);
    });

    //wait for incoming messages and print ip address
    server.on('message', function (data, rinfo) {
        console.log(new Date() + ' RECEIVER received from ', rinfo.address, ':');
        console.log(data.toString());
    });

    //Set up discovery message. Make sure to leave out any extra space in the message.
    var discover_message = new Buffer('M-SEARCH * HTTP/1.1\r\nHost: 239.255.255.250:1900\r\nMan: ssdp:discover\r\nST: colortouch:ecp\r\n');
    server.send(discover_message, 0, discover_message.length, 1900, multicastAddress);

最佳答案

终于找到这个问题的答案了。该问题是由于在 Windows 上并在 Node.js 中使用集群造成的。问题出在 server.bind 调用上。这是正确的工作代码:

server.bind({port: 1900, exclusive: true}, function () {
        console.log('PORT BIND SUCCESS');
        server.setBroadcast(true);
        server.setMulticastTTL(128);
        server.addMembership(multicastAddress, myIp);
    });

修复方法是传入对象 {port: 1900, Exclusive: true}。来源:https://github.com/misterdjules/node/commit/1a87a95d3d7ccc67fd74145c6f6714186e56f571

关于node.js - UDP 多播失败 - NodeJS/Windows 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44141668/

相关文章:

javascript - 我如何解决集中听众的个人 promise ?

node.js - vue-server-renderer – 尝试插入模板时无效表达式,例如带有标题或元数据

node.js - SailsJS geoNear 问题

windows - 将 Git Windows 版本与 Git 源代码管理提供程序一起使用的入门问题

windows - Git (Windows) - 从 separate-git-dir 存储库克隆失败

windows - StarDock 的 ModernMix 是如何工作的?

javascript - 当从客户端传递到 nodeJS 时,String 变成了 Object

iphone - 如何在 iPhone 应用程序的后台运行 UDP 套接字?

ios - UDP是否适合从iOS传输离散事件

udp - 使用 STUN 将 UDP 发送到 nat 后面的客户端