【问题标题】:UDP packages appear in wireshark, but are not received by programUDP包出现在wireshark中,但程序没有收到
【发布时间】:2026-01-10 23:35:01
【问题描述】:

我正在尝试用我的计算机读取 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 计算机上的相同程序也没有收到任何内容...

感谢您的帮助!

【问题讨论】:

  • 当你说“XP 计算机也没有收到任何东西”时,你真的是指一小部分数据包,就像 Windows 7 机器一样?另外,数据包的传递速度有多快?
  • 不,XP电脑什么也得不到。来自FPGA的数据包以大约每秒一个的频率到达,数据长度为1196Bytes。

标签: python udp wireshark


【解决方案1】:

您的操作系统的 TCP/IP 堆栈不会为您永久保存这些数据包。您的脚本看起来非常依赖于 when 它的运行时间。尝试循环recvfrom,并在后台运行脚本。然后,开始从您的 FPGA 发送数据包。

为了更加方便,探索 Python 标准库中的 SocketServer 模块。

【讨论】:

  • 感谢您的回答,伊莱!我实际上也尝试在循环中使用它,例如: while 1: received ,address= sock.recvfrom(2048) print received, address 同样在这种情况下,只捕获了非常少量的包......
【解决方案2】:

好的,我发现了问题:FPGA 中的 UDP 校验和计算错误。 Wireshark 显示每个包,但默认情况下它不检查校验和是否正确。当我将校验和设置为0x0000 时,包会以 python 形式到达!再次感谢您的帮助!

【讨论】: