UDP包在Wireshark中出现,但程序未接收到
我正在尝试用我的电脑读取由FPGA发送的UDP数据包。这些数据包发送到21844端口和192.168.1.2这个IP地址(这是我电脑的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,安装了诺顿互联网安全软件,我在防火墙中允许FPGA的IP和Python的所有流量。相同的程序在一台Windows XP的电脑上也没有接收到任何数据包……
谢谢大家的帮助!
2 个回答
3
你电脑里的TCP/IP协议栈不会一直保存那些数据包给你。你的脚本看起来很依赖于它运行的时机。试着在一个循环里使用recvfrom
,然后把脚本放在后台运行。接着,从你的FPGA开始发送数据包。
为了更方便,你可以看看Python标准库里的SocketServer
模块。
3
好的,我找到了问题所在:FPGA里的UDP校验和计算错了。Wireshark可以显示每一个数据包,但默认情况下它并不会检查校验和是否正确。当我把校验和设置成0x0000
时,数据包就能在Python中正常接收了!再次感谢你的帮助!