同一网络下Python Socket无法跨设备连接的问题求助
问题:跨设备Socket连接失败(错误10060)
同一设备运行Socket服务端与客户端脚本可正常通信,但跨设备连接时停滞约20秒后抛出错误10060。已确认:
- 客户端使用服务端IP(192.168.0.34)
- 关闭Windows防火墙及杀毒软件
- 两台设备处于同一网络
- 脚本此前正常运行,更换宽带套餐后失效,同时部分无线智能家居设备也受影响
服务端:Raspberry Pi 3b,Python 3.4.2
客户端:Windows 10 PC,Python 3.7.8
排查与解决方案
- 关闭路由器AP隔离:更换宽带套餐后路由器可能默认开启AP隔离(客户端隔离),阻止同一WiFi下设备互访。进入路由器后台,找到无线设置中的AP隔离选项并关闭。
- 检查树莓派防火墙规则:树莓派的iptables可能限制了端口,执行
sudo iptables -L查看规则,临时关闭防火墙测试:sudo iptables -F - 修正服务端绑定IP:树莓派可能存在多网络接口或IP变更,将服务端绑定地址改为
0.0.0.0(监听所有接口),避免IP固定导致的问题:s.bind(('0.0.0.0', 1234)) - 测试基础网络连通性:
- Windows客户端执行
ping 192.168.0.34,确认是否能正常响应 - 执行
telnet 192.168.0.34 1234,直接测试端口是否可访问
- Windows客户端执行
- 确认端口监听状态:树莓派上执行
sudo netstat -tulpn | grep 1234,验证服务端是否真的在监听1234端口 - 检查路由器子网设置:确认2.4G和5G WiFi是否处于同一网段,部分路由器会将不同频段设备划分到不同子网,导致无法互访
服务端代码
import socket from time import sleep s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('192.168.0.34', 1234)) s.listen(5) clientsocket = None print("Listening") while True: clientsocket, address = s.accept() print("Connection Received") break # The code that runs after a client successfully connects
客户端代码
import socket from time import sleep print("Looking") s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('192.168.0.34', 1234)) print("Connected") sleep(20) # This is just so I can read any errors before the window closes for testing. # code to start sending data
内容的提问来源于stack exchange,提问作者Rymazon
相关产品推荐
相关产品推荐

