我正在尝试用我的计算机读取FPGA发送的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
我使用带有Norton Internet Security的Windows 7,我允许防火墙中的所有流量用于FPGA IP以及python。 Windows XP计算机上的相同程序也没有收到任何内容......
感谢您的帮助!
答案 0 :(得分:3)
您的操作系统的TCP / IP堆栈不会永久保存这些数据包。您的脚本看起来非常依赖于运行时的。在循环中尝试recvfrom
,然后在后台运行脚本。然后,开始从FPGA发送数据包。
为了更加方便,请从Python的stdlib中探索SocketServer
模块。
答案 1 :(得分:3)
好的,我发现了问题:FPGA中的UDP校验和计算错误。 Wireshark显示每个包,但默认情况下不检查校验和是否正确。当我将校验和设置为0x0000
时,包将以python的形式到达!再次感谢您的帮助!