Python UDP Socket无法接收数据求助:硬件发数但代码无响应
解决Python UDP Socket无法接收硬件数据的问题
以下是针对你遇到问题的排查方向和解决方案:
1. 先确认UDP数据包的目标信息
打开Wireshark,用过滤规则udp.port == 9999查看硬件发送的数据包:
- 确认目标IP是你本机的
192.168.0.10,还是广播地址(如192.168.0.255) - 确认目标端口确实是
9999
2. 修正套接字绑定配置
你代码中定义了localIP = "192.168.0.10"但绑定用的是('', localPort),虽然''等价于监听所有网卡,但如果硬件只向特定IP发送数据,直接绑定到指定IP更可靠:
# 替换原绑定代码 sckt.bind((localIP, localPort))
3. 开启广播接收权限(如果硬件发的是广播包)
如果Wireshark显示目标是广播地址,需要给套接字添加广播接收选项:
# 创建套接字后添加这一行 sckt.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
4. 检查防火墙拦截
- Windows:打开「Windows Defender防火墙」→「允许应用通过防火墙」,找到你的Python解释器(如python.exe),确保UDP权限被勾选
- Linux/macOS:用
ufw status(Linux)或pfctl -s rules(macOS)检查是否拦截了UDP 9999端口的入站流量
完整修改示例代码
import socket localIP = "192.168.0.10" localPort = 9999 bufferSize = 1024 # 创建UDP套接字 sckt = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM) # 开启广播接收(如果硬件发广播包则需要) sckt.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # 绑定到指定IP和端口 sckt.bind((localIP, localPort)) print(f"UDP server up and listening on {localIP}:{localPort}") while True: bytesAddressPair = sckt.recvfrom(bufferSize) message = bytesAddressPair[0] address = bytesAddressPair[1] clientMsg = f"Message from Client: {message}" clientIP = f"Client IP Address: {address}" print(clientMsg) print(clientIP)
内容的提问来源于stack exchange,提问作者WITC
相关产品推荐
相关产品推荐

