我正在尝试使用广播数据包到子网地址,我尝试使用套接字的广播选项成功地做到了这一点,但是最近我开始学习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是否真的以不同的方式进行广播发现,还是应该使用与常规广播相同的代码?
答案 0 :(得分:0)
假设您有三个机器(M1,M2,M3),它们具有三个具有相同子网和定义端口的不同IP地址。我们要在每个订户(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())