UDP-пакеты появляются в wireshark, но не принимаются программой - PullRequest
3 голосов
/ 28 мая 2010

Я пытаюсь прочитать пакеты UDP, отправленные FPGA с моего компьютера. Они отправлены к порту 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, где разрешаю весь трафик в брандмауэре для IP FPGA, а также для python. Та же программа на компьютере с Windows XP тоже ничего не получает ...

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

Ответы [ 2 ]

3 голосов
/ 01 июня 2010

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

3 голосов
/ 28 мая 2010

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

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

...