Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在node.js(255.255.255.255)中订阅广播地址_Javascript_Node.js_Udp_Multicast - Fatal编程技术网

Javascript 如何在node.js(255.255.255.255)中订阅广播地址

Javascript 如何在node.js(255.255.255.255)中订阅广播地址,javascript,node.js,udp,multicast,Javascript,Node.js,Udp,Multicast,我无法收听在255.255.255.255上广播的消息。假设ArtNet控制器在端口6454上的255.255.255.255上广播(另请参阅) 当我尝试使用node.js的dgram模块收听255.255.255时,我得到一个“EINVAL”错误,因为255.255.255是一个无效地址 我试过订阅192.255.255.255,192.168.255.255,和192.168.10.255(而不是255.255.255),这些都不起作用。在Windows和Ubuntu上测试 const dg

我无法收听在
255.255.255.255
上广播的消息。假设ArtNet控制器在端口6454上的
255.255.255.255
上广播(另请参阅)

当我尝试使用node.js的
dgram
模块收听
255.255.255
时,我得到一个“EINVAL”错误,因为
255.255.255
是一个无效地址

我试过订阅
192.255.255.255
192.168.255.255
,和
192.168.10.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)
socket.addMembership()
用于注册一个套接字作为多播流量的目标。这里的用例是广播,而不是多播,所以根本不要尝试使用
addMembership()

您不需要做任何特殊的事情来接收广播流量。只需像您已经做的那样将套接字绑定到适当的端口(在本例中为6454),然后每当接收到该端口的广播时,套接字的消息事件回调就会触发


如果您想编写一个测试程序,通过将广播流量发送到端口6454来训练您的侦听器,那么该测试程序需要在尝试将
255.255.255.255
广播地址的
发送到端口6454之前,在其dgram套接字上调用
setBroadcast()
at Socket.addMembership(dgram.js:581:11) ...
EINVAL-表示错误:无效值。 不能将套接字绑定到RFC数量中所述的任何广播地址