如何订阅node.js中的广播地址(255.255.255.255)
How to subscribe to broadcast address in node.js (255.255.255.255)
我无法收听 255.255.255.255
上广播的消息。 ArtNet protocol docs say that ArtNet controllers broadcast onto 255.255.255.255
on port 6454 (see also here。
当我尝试使用 node.js 的 dgram
模块收听 255.255.255.255
时,出现 "EINVAL" 错误,因为 255.255.255.255
无效地址。
我试过订阅 192.255.255.255
、192.168.255.255
和 192.168.10.255
(而不是 255.255.255.255
)。 None 这些作品中的任一个。在 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()
。
您无需执行任何特殊操作即可接收广播流量。只需 bind()
将您的套接字连接到适当的端口(在本例中为 6454),就像您已经在做的那样,然后只要收到对该端口的广播,您的套接字的消息事件回调就会触发。
如果您想编写一个测试程序通过向端口 6454 发送广播流量来测试您的侦听器,那么该测试程序将需要在尝试 send()
之前在其 dgram 套接字上调用 setBroadcast()
255.255.255.255
广播地址的端口 6454。
Error: addMembership EINVAL
at Socket.addMembership (dgram.js:581:11)
...
EINVAL - 表示错误:无效值。
您不能将套接字绑定到 RFC 数量中所述的任何广播地址。
我无法收听 255.255.255.255
上广播的消息。 ArtNet protocol docs say that ArtNet controllers broadcast onto 255.255.255.255
on port 6454 (see also here。
当我尝试使用 node.js 的 dgram
模块收听 255.255.255.255
时,出现 "EINVAL" 错误,因为 255.255.255.255
无效地址。
我试过订阅 192.255.255.255
、192.168.255.255
和 192.168.10.255
(而不是 255.255.255.255
)。 None 这些作品中的任一个。在 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()
。
您无需执行任何特殊操作即可接收广播流量。只需 bind()
将您的套接字连接到适当的端口(在本例中为 6454),就像您已经在做的那样,然后只要收到对该端口的广播,您的套接字的消息事件回调就会触发。
如果您想编写一个测试程序通过向端口 6454 发送广播流量来测试您的侦听器,那么该测试程序将需要在尝试 send()
之前在其 dgram 套接字上调用 setBroadcast()
255.255.255.255
广播地址的端口 6454。
Error: addMembership EINVAL
at Socket.addMembership (dgram.js:581:11)
...
EINVAL - 表示错误:无效值。
您不能将套接字绑定到 RFC 数量中所述的任何广播地址。