You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:30:45