【发布时间】:2018-11-20 16:23:30
【问题描述】:
我正在尝试使用已知端口向我的子网发布消息(就像使用原始套接字时的广播),但在订阅者端,未收到消息。这个想法是第二台机器不应该知道第一台机器的 IP 地址,这就是我使用广播 IP 的原因。使用 UDP 或 TCP 原始套接字,它可以工作,但我正在尝试学习 pub-sub 模式,不知道如何融入这个想法。
这是我的代码:
出版商:
import zmq
import sys
import time
context=zmq.Context()
socket=context.socket(zmq.PUB)
socket.bind("tcp://192.168.1.255:5677")
while True:
data='hello'.encode()
socket.send(data)
#time.sleep(1)
订阅者:
context=zmq.Context()
sub=context.socket(zmq.PUB)
sub.setsocketopt(zmq.SUBSCRIBE, "".encode())
sub.connect('tcp://192.168.1.255:5677')
sub.recv()
print(sub.recv())
就原始 UDP 而言,我编写了一个完美运行的代码。
广播:
def broadcast(Host,port):
#send bd
sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
msg=get_ip_data("wlp3s0")
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
time.sleep(1.5)
# print("yes sending", client)
sock.sendto(msg.encode(), (Host,port))
接收:
def broadcast_recv():
#listen bd
sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind((get_bd_address("wlp1s0"),12345))
# receive broadcast
msg, client = sock.recvfrom(1024)
a=(msg.decode())
print(a)
【问题讨论】:
-
在我看来,您的代码没有基于 pyzmq 示例,例如 github.com/IntelPython/source-publish/tree/master/pyzmq/… 0 为什么不呢?
标签: python sockets zeromq pyzmq