簡體   English   中英

使用 pyzmq 廣播到子網地址

[英]Broadcasting to subnet address using pyzmq

我正在嘗試使用廣播數據包到子網地址,我成功地嘗試使用套接字的廣播選項來做到這一點,但我最近開始學習 ZeroMQ,所以我想用它來將數據包廣播到子網。 我使用了zmq.PUBzmq.SUB但在訂閱者端,由於我使用了子網地址,因此數據包未送達。 如果我使用機器的 IP 地址,那么它就可以工作,但這不是我想要的。

是否有使用 ZMQ 進行廣播的選項?


這是我到目前為止嘗試過的代碼:

出版商:

import zmq
import time

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://192.X.X.255:9999")  # Note.

while True:
    socket.send_string('hello')
    time.sleep(1)

訂戶:

context = zmq.Context()
sub=context.socket(zmq.SUB)  # Note.
sub.setsockopt(zmq.SUBSCRIBE, b"")  # Note.
sub.connect('tcp://192.x.x.255:9999') -> publishing only to subnet

while True:
    print(sub.recv())

我們可以使用常規套接字進行數據包廣播,例如,使用:

sock.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)

但我想以我用 ZMQ 的方式替換它。 ZMQ 是否真的以不同的方式進行廣播發現,或者我們應該使用與常規廣播相同的代碼?

假設您有三台具有相同子網和定義端口的三個不同 IP 地址的機器(M1、M2、M3) 我們想向每個訂閱者( M1, M2 )發布一條消息(從M1 ),因此我們將有以下代碼片段:

發布者(機器 1):

import zmq
import time

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:9999")  # Note.

while True:
    socket.send_string('hello-all')
    time.sleep(1)

訂閱者(機器 2):

context = zmq.Context()
sub=context.socket(zmq.SUB)
sub.setsockopt(zmq.SUBSCRIBE, b"")
sub.connect('tcp://Machine1_IP:9999')  # Note

while True:
    print(sub.recv())

訂戶(Machine3):

context = zmq.Context()
sub=context.socket(zmq.SUB)
sub.setsockopt(zmq.SUBSCRIBE, b"")
sub.connect('tcp://Machine1_IP:9999')  # Note

while True:
    print(sub.recv())

暫無
暫無

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

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