【发布时间】:2018-11-24 10:57:21
【问题描述】:
我正在尝试使用广播数据包到子网地址,我成功地尝试使用套接字的广播选项来做到这一点,但是我最近开始学习 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 是否真的以不同的方式进行广播发现,或者我们应该使用与常规广播相同的代码?
【问题讨论】:
-
我不知道“子网地址”的含义,但是在发布者端使用
.bind("tcp://*:1234"),每个订阅者都可以连接它并通过.connect("tcp://publisher-ip:1234")通过ZMQ获取消息,Is'不是你要找的东西吗? -
嗨,子网地址是ip地址和广播地址的混合,例如只有连接到路由器wifi的ppl才能收到我们发送的消息。地址看起来像 192.167.1.255,你可以在你的 ifconfig 中看到。所以这将避免向所有人发送消息。(255.255.255.255)@Benyamin jafari。我的发布者和订阅者都将使用相同的子网地址。一个发布,另一个给订阅者。
-
嗨,我想还是不明白你的意思。所以我举个例子作为答案,如果对你没有帮助,我会删除它。
-
@BenyaminJafari 您发布的答案可能仅对想要发布到整个网络的发布者有所帮助。 “*”这意味着我认为 255.255.255.255 地址。每个人都可以听发布者,我希望它是私有的,这就是我使用子网地址的原因。顺便说一句,如果你能帮忙,除了 pub-sub 或任何消息传递模式之外,我真的需要找到一种 zmq 方式来广播 udp 数据包。
标签: python sockets zeromq publish-subscribe pyzmq