Потеря пакетов Python с использованием UDP ⇐ Python
-
Anonymous
Потеря пакетов Python с использованием UDP
Это странно.
У меня есть микроконтроллер в локальной сети, который отправляет данные UDP по широковещательному адресу (192.168.1.255). Он отправляет ответ на команды (также отправленные через UDP), а затем генерирует дейтаграмму каждые 5 секунд.
Команды отправляются по UDP на номер 23451, а данные и ответ на команду принимаются на номер 12345.
Используя стороннюю программу, я могу видеть команды, ответы и данные, полученные на моем компьютере.
Однако с помощью приведенного ниже кода я всегда могу получить данные, но никогда не смогу получить ответ на команду.
импортировать сокет ответ_порт = 12345 response_sock = socket.socket(socket.AF_INET, # Интернет сокет.SOCK_DGRAM) # UDP response_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Установите для параметра SO_REUSEADDR значение True, чтобы мы не получали ошибку при попытке выполнить привязку к тому же порту из другой программы response_sock.bind(('', порт_ответа)) пока правда: датаграмма, адрес = response_sock.recvfrom(1024) print(адрес, ":",датаграмма) Ответ на команду (который я не могу получить) выглядит так: UDP-SPI_0002 в ascii или 55 44 50 2D 53 50 49 5F 30 30 30 32 00 в шестнадцатеричном формате
Данные (которые я могу получить) выглядят так: 33 36 31 34 19 00 0B 00 06 00 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 15 18 00 00 F1 00 60 02 E2 64 44 58 D9 46 69 3F A5 29 EA 3F E8 A4 F5 3F 00 00 7E 00 37 00 07 00 00 00 79 02 10 4А
Проблема, с которой я сталкиваюсь, заключается в том, что данные всегда принимаются, но ответ на команду никогда не получен. Что я пробовал:
[*]Отключить передачу данных и отправлять только ответы на команды, безрезультатно. [*]Вставьте задержки между настройкой recvfrom и отправкой команды [*]Поместите recvfrom в отдельный поток
Это локальная сеть, без других компьютеров и доступа к Интернету. Для подтверждения я могу достоверно видеть данные и ответ на команду другого инструмента (https://udp-test-tool.informer.com/). Я использую Windows 10, Python 3.12
Это странно.
У меня есть микроконтроллер в локальной сети, который отправляет данные UDP по широковещательному адресу (192.168.1.255). Он отправляет ответ на команды (также отправленные через UDP), а затем генерирует дейтаграмму каждые 5 секунд.
Команды отправляются по UDP на номер 23451, а данные и ответ на команду принимаются на номер 12345.
Используя стороннюю программу, я могу видеть команды, ответы и данные, полученные на моем компьютере.
Однако с помощью приведенного ниже кода я всегда могу получить данные, но никогда не смогу получить ответ на команду.
импортировать сокет ответ_порт = 12345 response_sock = socket.socket(socket.AF_INET, # Интернет сокет.SOCK_DGRAM) # UDP response_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Установите для параметра SO_REUSEADDR значение True, чтобы мы не получали ошибку при попытке выполнить привязку к тому же порту из другой программы response_sock.bind(('', порт_ответа)) пока правда: датаграмма, адрес = response_sock.recvfrom(1024) print(адрес, ":",датаграмма) Ответ на команду (который я не могу получить) выглядит так: UDP-SPI_0002 в ascii или 55 44 50 2D 53 50 49 5F 30 30 30 32 00 в шестнадцатеричном формате
Данные (которые я могу получить) выглядят так: 33 36 31 34 19 00 0B 00 06 00 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 15 18 00 00 F1 00 60 02 E2 64 44 58 D9 46 69 3F A5 29 EA 3F E8 A4 F5 3F 00 00 7E 00 37 00 07 00 00 00 79 02 10 4А
Проблема, с которой я сталкиваюсь, заключается в том, что данные всегда принимаются, но ответ на команду никогда не получен. Что я пробовал:
[*]Отключить передачу данных и отправлять только ответы на команды, безрезультатно. [*]Вставьте задержки между настройкой recvfrom и отправкой команды [*]Поместите recvfrom в отдельный поток
Это локальная сеть, без других компьютеров и доступа к Интернету. Для подтверждения я могу достоверно видеть данные и ответ на команду другого инструмента (https://udp-test-tool.informer.com/). Я использую Windows 10, Python 3.12