[英]Broadcasting to subnet address using pyzmq
我正在嘗試使用廣播數據包到子網地址,我成功地嘗試使用套接字的廣播選項來做到這一點,但我最近開始學習 ZeroMQ,所以我想用它來將數據包廣播到子網。 我使用了zmq.PUB
、 zmq.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 ),因此我們將有以下代碼片段:
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)
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())
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.