最近发现zeroconf这个模块十分好用,可以在进程间广播一些服务信息,下面列出服务端广播和浏览端查收两部分代码;
import socket
from zeroconf import *
desc = {'path': '/~pennyworth/'}
info = ServiceInfo("_http._tcp.local.",
"Hope's Test Web Site._http._tcp.local.",
socket.inet_aton("127.0.0.1"), 8080, 0, 0,
desc, "hope.local.")
r_s = Zeroconf()
r_s.registerService(info)
while True:
try:
pass
except KeyboardInterrupt:
r_s.unregisterService(info)
r_s.close()
break
通过调用ServiceBrowser浏览后要延时会儿,不然还没查询到服务呢;
import time
import socket
from zeroconf import *
class HopesListener(object):
def __init__(self):
self.r = Zeroconf()
def addService(self,zeroconf,type,name):
print()
print(f"Service {type}")
info = self.r.getServiceInfo(type, name)
if info:
address_ip = socket.inet_ntoa(info.getAddress())
address_port = info.getPort()
print(f'IP:{address_ip},Port:{address_port}')
print()
if __name__ == '__main__':
r_b = Zeroconf()
listener = HopesListener()
browser = ServiceBrowser(r_b, "_http._tcp.local.", listener)
time.sleep(5)
r_b.close()