我是一位几乎没有编程知识的工程师。实际上,我正在尝试对应通过我们的机器软件控制的设备进行编程。
该设备已通过LAN电缆直接插入我们的机器计算机中,并且具有特定的IP地址。在浏览器中输入IP地址时,我可以打开界面。
对于我的程序,我正在编写一个代码,其中数据帧从计算机发送到设备。数据帧包含一个十六进制代码,该代码基本上被设备解释为命令,例如enable xy。
设备还发送数据帧,其中包含机器计算机必须接收的状态和值。
在我的代码中,我打开了两个套接字:
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client .sendto(MESSAGE, (UDP_IP, UDP_PORT)) #IP and PORT of the device
server.bind((UDP_IP, UDP_PORT))
data, addr = server.recvfrom(1024)
我的第一个问题是,如果我输入设备的IP地址并且出现此错误,则server.bind无法正常工作:
WinError 10049:请求的地址在其上下文中无效。
我的第二个问题是,每当我执行server.recvfrom程序时,都会像循环一样被捕获,并且不会继续。也许计算机没有接收到任何数据,并且仅在接收到数据后才退出recvfrom。那可能吗?我该如何实现recvfrom的超时,例如如果接收不到任何数据,则在5秒后退出?