我使用pyzeroconf(https://github.com/jstasiak/python-zeroconf/)设置了一个zeroconf:
TYPE = "_motion._tcp.local."
NAME = "_yyyyXXXX." + TYPE
PORT = 4321
logging.basicConfig(level=logging.DEBUG)
logging.getLogger("zeroconf").setLevel(logging.DEBUG)
zeroconf = Zeroconf()
def reg_srv():
info = ServiceInfo(TYPE,
NAME,
socket.inet_aton("127.0.0.1"), PORT, 0, 0,
{"desc":"HOME Bonjour test"})
zeroconf.register_service(info)
我使用nc -l 4321
来接收连接。
但是套接字(来自远程计算机或电话)报告连接被拒绝。
当我转向使用dns-sd -R "XXX" "_motion._tcp" "local" 4321
时,效果很好。
我错过了什么?
---更新:
我发现它归因于socket.inet_aton("127.0.0.1")
。如果我用我的局域网IP地址改变它可以工作。
但是我应该如何设置此地址值以适应动态IP地址?
---更新:
我换了:
socket_addr = socket.gethostbyname(socket.gethostname())
info = ServiceInfo(TYPE,
NAME,
socket.inet_aton(socket_addr), PORT, 0, 0,
{"desc":"HOME Bonjour test"})
如何同时支持ipv4和ipv6地址?
使用socket.getaddrinfo()
获取多个地址并且每个地址都注册一个服务?