【发布时间】:2020-12-04 05:18:32
【问题描述】:
我有一个 python 应用程序,它通过 UDP 广播数据包搜索网络上的设备。我的代码在 Windows、MacOS (Darwin)、Docker (Windows Host) 下运行良好,但在 MacOS (Darwin) 上运行良好。谁能指出我找到并解决原因的方向。
Mac IP(和要找到的设备)的 IP 为 192.168.2.x 通常 192.168.2.255 作为广播作品
Python 代码: (为 MacOS 尝试了各种广播地址)
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
server.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
server.settimeout(0.2)
server.bind(("", 9302))
message = msgpack.packb({“service”: “control.ws”})
a=2
print("\tLooking for Server:")
while a>1:
print("\t\tSending broadcast #"+str(a))
server.sendto(message, (Broadcast_Addr, 9101))
print("\t\t…Broadcast to: “, Broadcast_Addr)
time.sleep(1)
try:
data, addr = server.recvfrom(1024)
except socket.error as e:
print(“Error getting socket data: %s” % e)
print(“Exiting Program Now”)
sys.exit(1)
except:
print(”****Stopped looking - Major Error!")
sys.exit(1)
else:
Server_Data = msgpack.unpackb(data)
#Server was found
a=a-1
Windows Docker 调用(有效)
docker run -it -p 8765:8765 -v C:\ABC_Volume:/logs -p 9101:9101/udp -p 9302:9302/udp myimage:v1
MacOS Docker 调用(不起作用)*
m$ docker run -it -p 8765:8765 -p 9101:9101/udp -p 9302:9302/udp myimage.v1
【问题讨论】:
-
在什么方面不起作用?你能更正 Python 代码中的缩进和引号吗?
docker run行你有启动 shell 而不是运行你的脚本,并且有一些--link到其他容器;你能提供一个足以构建和运行它的minimal reproducible example 吗? -
它不起作用,因为python代码永远不会在网络上找到设备。我不确定广播是否没有离开主机,或者没有回复(我不知道如何检查)。对代码和命令感到抱歉 - 我已经清理了它们。我不确定如何重现,因为您需要找到设备。