我听不到广播的消息255.255.255.255。该ARTNET协议文档说,ARTNET控制器广播到255.255.255.255端口6454(也可参见这里。
当我尝试255.255.255.255使用node.js的dgram模块进行侦听时,我得到一个“ EINVAL”错误,因为这255.255.255.255是一个无效的地址。
我试着订阅192.255.255.255,192.168.255.255以及192.168.10.255(代替255.255.255.255)。这些都不起作用。在Windows和Ubuntu上测试。
const dgram = require('dgram');
const sock = dgram.createSocket('udp4', (msg, peer) => { console.log(msg, peer); });
sock.bind(6454, () => { sock.addMembership('255.255.255.255'); }); 堆栈跟踪:
dgram.js:581 throw errnoException(err, 'addMembership'); ^
Error: addMembership EINVAL at Socket.addMembership (dgram.js:581:11) at Socket.sock.bind (/home/kyle/temptest/listen3.js:15:8) at Object.onceWrapper (events.js:286:20) at Socket.emit (events.js:198:13) at startListening (dgram.js:128:10) at state.handle.lookup (dgram.js:249:7) at process._tickCallback (internal/process/next_tick.js:63:19) at Function.Module.runMain (internal/modules/cjs/loader.js:834:11) at startup (internal/bootstrap/node.js:283:19) at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在您的问题中,您尝试使用Node.js的dgram模块监听ARTNET协议的广播消息,但遇到了无效地址的错误。广播地址255.255.255.255是一个特殊的IP地址,用于在同一局域网内广播消息,但是直接将其作为多播组地址添加是不正确的,因为这个操作在UDP套接字层面并不支持。
对于您的需求,实际上不需要显式地加入到255.255.255.255这个广播地址。当您在UDP套接字上绑定一个端口并设置为监听模式时,该套接字会自动接收来自同一子网内任何地址(包括广播地址)发来的数据包,只要这些数据包的目标端口与您监听的端口匹配。
因此,您应该修改代码如下:
const dgram = require('dgram');
// 创建UDP socket并绑定到6454端口
const sock = dgram.createSocket('udp4');
sock.on('listening', () => {
const address = sock.address();
console.log(`Server listening ${address.address}:${address.port}`);
});
sock.on('message', (msg, rinfo) => {
console.log(`Received ${msg.length} bytes from ${rinfo.address}:${rinfo.port}`);
// 在这里处理接收到的消息
});
// 绑定到本地所有IPv4接口上的6454端口
sock.bind(6454);
这段代码将创建一个UDP服务器,监听所有IPv4接口上的6454端口。这样,无论广播消息来自哪个IP地址(包括255.255.255.255),只要目标端口是6454,您的程序就能接收到这些消息。无需调用addMembership
方法,因为它主要用于多播而非广播。