Я пытаюсь опубликовать сообщение (это похоже на широковещательную рассылку при использовании необработанных сокетов) в моей подсети с известным портом, но на конце подписчика сообщение не получено.Идея заключается в том, что 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))
recv:
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)