Пакеты UDP появляются в wireshark, но не принимаются программой


Я пытаюсь прочитать пакеты UDP, отправленные ПЛИС с моим компьютером. Они отправляются на порт 21844 и на IP-адрес 192.168.1.2 (который является IP-адресом моего компьютера). Я вижу пакет в wireshark, у них нет ошибок. Однако когда я запускаю этот маленький скрипт python, он получает только очень небольшую часть всех пакетов, также в зависимости от того, работает wireshark или нет.

import socket
import sys


HOST, PORT = "192.168.1.2", 21844
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((HOST,PORT)) 
received ,address= sock.recvfrom(2048)
print address

Я использую windows 7 с Norton Internet Security, где я разрешаю весь трафик в брандмауэре для FPGA IP, а также для python. Та же программа на компьютере под управлением Windows XP также ничего не получает...

Спасибо за любую помощь!

2 2

2 ответа:

Стек TCP/IP вашей ОС не будет хранить эти пакеты для вас вечно. Ваш скрипт выглядит как нечто, что очень сильно зависит от , Когда он запускается. Попробуйте recvfrom в цикле и запустить скрипт в фоновом режиме. Затем начните отправлять пакеты с вашего ПЛИС.

Для дополнительного удобства изучите Модуль SocketServer из stdlib Python.

Хорошо, я нашел проблему: контрольная сумма UDP в FPGA была вычислена неправильно. Wireshark показывает каждый пакет, но по умолчанию он не проверяет правильность контрольной суммы. Когда я устанавливаю контрольную сумму в 0x0000, то пакеты поступают в python! Еще раз спасибо за помощь!