Python Socket无法接收UDP数据包问题排查求助
Python UDP Socket无法接收数据包排查建议
问题背景
在搭载Ubuntu 18.04的NVIDIA Jetson NX上配置Python Socket接收以太网UDP数据包:
- 以太网适配器已配置固定IP
- 通过
tcpdump可观测到目标IP为192.168.33.30、端口4098的UDP数据包 - 已完全禁用防火墙,但运行以下代码仍无法接收数据:
import socket UDP_IP = "192.168.33.30" UDP_PORT = 4098 sock = socket.socket(socket.AF_INET, # Internet socket.SOCK_DGRAM) # UDP sock.bind((UDP_IP, UDP_PORT)) while True: data, addr = sock.recvfrom(4096) print("received message: %s" % data)
排查建议
- 尝试绑定到全接口地址:将
UDP_IP改为"0.0.0.0",让Socket监听所有可用网络接口,避免因网卡绑定配置问题导致无法接收。 - 检查端口占用情况:执行
sudo lsof -i :4098或sudo netstat -tulpn | grep 4098,确认端口4098是否被其他进程占用。 - 验证数据包目标MAC:确认发送端发出的UDP数据包目标MAC地址为Jetson NX以太网适配器的MAC,排除ARP解析或网络转发导致的数据包丢失。
- 本地测试UDP发送:在Jetson NX终端执行
nc -u 192.168.33.30 4098,手动输入内容发送,验证代码是否能接收,排查发送端问题。 - 开启网卡混杂模式:执行
sudo ip link set eth0 promisc on(替换eth0为你的实际网卡名称),确保系统能处理非自身MAC的数据包(tcpdump会临时开启该模式,但程序运行时可能已恢复)。 - 查看系统网络日志:通过
dmesg | grep -i udp或journalctl -u systemd-networkd查看是否存在UDP相关的系统错误日志。 - 尝试以root权限运行代码:虽然4098属于非特权端口,但可尝试
sudo python3 your_script.py,排除潜在的权限限制问题。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

