Python编写的简单UDP应用跨同局域网设备无法接收数据
问题核心原因
你代码中使用的127.0.0.1是本地回环地址,仅支持同一设备内部的进程通信,数据不会经过物理网卡传输到局域网其他设备,这是跨设备通信失败的核心原因,防火墙属于次要排查项。
修复步骤
1. 提前确认网络状态
- 确保树莓派和笔记本连接同一局域网
- 分别查询两台设备的局域网IP:
- Windows笔记本执行
ipconfig,查看WLAN/以太网对应的IPv4地址,格式一般为192.168.x.x - Linux/macOS设备执行
ip addr或ifconfig查询
- Windows笔记本执行
- 在树莓派终端执行
ping 笔记本局域网IP,确认网络连通
2. 修改树莓派端代码
树莓派作为发送端,不需要绑定本地回环地址,只需指定接收端(笔记本)的局域网IP即可,修改后代码示例:
import socket # 替换为你实际查询到的笔记本局域网IP target_ip = "192.168.3.25" port = 5005 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) message = b"Hello World" sock.sendto(message, (target_ip, port)) sock.close()
3. 修改笔记本端代码
笔记本作为接收端,需要绑定所有网卡才能接收局域网内其他设备发来的请求,将绑定IP改为0.0.0.0即可,修改后代码示例:
import socket # 0.0.0.0代表监听本机所有网卡的请求 ip = "0.0.0.0" port = 5005 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind((ip, port)) while True: data, addr = sock.recvfrom(1024) print("received message: %s" % data)
4. 防火墙排查(修改代码后仍失效时操作)
- Windows设备:打开Windows Defender防火墙高级设置,添加入站规则,放行5005端口的UDP流量
- Linux/macOS设备:在终端执行对应命令放行5005端口的UDP入站流量
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

