簡體   English   中英

如何訂閱 node.js (255.255.255.255) 中的廣播地址

[英]How to subscribe to broadcast address in node.js (255.255.255.255)

我無法收聽255.255.255.255上廣播的消息。 ArtNet 協議文檔說 ArtNet 控制器在端口 6454 上廣播到255.255.255.255 (另請參見此處

當我嘗試使用 node.js 的dgram模塊收聽255.255.255.255時,我收到“EINVAL”錯誤,因為255.255.255.255是無效地址。

我嘗試訂閱192.255.255.255192.168.255.255192.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)

socket.addMembership()用於注冊一個套接字作為多播流量的目的地。 您在這里的用例是廣播,而不是多播,所以根本不要嘗試使用addMembership()

您不需要做任何特別的事情來接收廣播流量。 只需將您的套接字bind()到適當的端口(在本例中為 6454),就像您已經在做的那樣,然后只要收到對該端口的廣播,就應該觸發套接字的消息事件回調。

如果您想編寫一個測試程序來通過向端口 6454 發送廣播流量來鍛煉您的偵聽器,那么該測試程序將需要在其 dgram 套接字上調用setBroadcast() ,然后再嘗試在255.255.255.255廣播地址處向端口 6454 send() .

Error: addMembership EINVAL at Socket.addMembership (dgram.js:581:11)... EINVAL - 表示錯誤:無效值。 您不能將套接字綁定到 RFC 數量中所述的任何廣播地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM