Я инженер с небольшими знаниями в области программирования.На самом деле я пытаюсь запрограммировать устройство, которым нужно управлять с помощью программного обеспечения нашего компьютера.
Устройство подключено к нашему компьютеру напрямую с помощью кабеля локальной сети и имеет определенный 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)
Моя первая проблема заключается в том, что server.bind не работает, если я набираю IP-адрес устройства и получаю этоошибка:
WinError 10049: запрошенный адрес недопустим в его контексте.
Моя вторая проблема заключается в том, что всякий раз, когда я выполняю сервер.recv из моей программы перехватывается как в цикле и не продолжается.Может быть, компьютер не получает никаких данных, и программа recvfrom завершает работу, только если получала данные.Это возможно?Как я могу добиться тайм-аута для recv, например, из-за того, что он завершает свою работу через 5 секунд, если не получает никаких данных?