Python - получать через UDP - PullRequest
0 голосов
/ 25 июня 2019

Я инженер с небольшими знаниями в области программирования.На самом деле я пытаюсь запрограммировать устройство, которым нужно управлять с помощью программного обеспечения нашего компьютера.

Устройство подключено к нашему компьютеру напрямую с помощью кабеля локальной сети и имеет определенный 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 секунд, если не получает никаких данных?

...