在本地网络上进行服务公告/发现的简便方法是通过广播UDP数据包。
常量:
PORT = 50000
MAGIC = "fna349fn" #to make sure we don't confuse or get confused by other programs
公告:
from time import sleep
from socket import socket, AF_INET, SOCK_DGRAM, SOL_SOCKET, SO_BROADCAST, gethostbyname, gethostname
s = socket(AF_INET, SOCK_DGRAM)
s.bind(('', 0))
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
my_ip= gethostbyname(gethostname())
while 1:
data = MAGIC+my_ip
s.sendto(data, ('<broadcast>', PORT))
print "sent service announcement"
sleep(5)
发现:
from socket import socket, AF_INET, SOCK_DGRAM
s = socket(AF_INET, SOCK_DGRAM)
s.bind(('', PORT))
while 1:
data, addr = s.recvfrom(1024)
if data.startswith(MAGIC):
print "got service announcement from", data[len(MAGIC):]
这段代码是从python.org的演示代码
broadcast.py中改编而来。