公寓受限网络下websockets通信报ConnectionRefusedError 111如何解决?
解决方案
连接失败核心原因
- 当前服务端代码绑定了
localhost,该地址仅支持本机访问,同网络下其他设备无法连接到该服务 - 公寓公网IP为多用户共用,无公寓入口路由器管理权限的前提下无法配置端口映射,公网请求发送到公寓IP的4421端口后会直接被拦截,无法转发到目标PC
- 多数公寓WiFi默认开启AP隔离,同一WiFi下的不同设备之间禁止互相访问,直接连接内网IP的请求会被拦截
可落地解决方案(按优先级排序)
方案1:PC开热点直连(零成本、适配本地传输需求)
完全绕过公寓网络限制,传输延迟更低:
- PC开启系统自带的移动热点功能,树莓派连接该热点的WiFi
- 服务端代码修改监听地址为
0.0.0.0,对应代码段改为:
start_server = websockets.serve(senddata, "0.0.0.0", 4421)
- 查询PC在热点局域网下的IP地址(Windows系统开热点后默认IP为
192.168.137.1,可通过ipconfig确认),客户端代码的URI改为ws://<PC热点内网IP>:4421即可正常连接
方案2:无AP隔离场景下内网访问
若PC和树莓派均需要连接公寓WiFi:
- 服务端修改监听地址为
0.0.0.0 - 在树莓派端ping PC的内网IP(ipconfig查询到的PC IPv4地址),若可ping通则无AP隔离,客户端直接填写PC的内网IP即可连接
- 若ping不通则为AP隔离限制,直接更换方案1或方案3
方案3:自行购买路由器组网
和之前私人住宅的网络环境完全一致:
- 购买普通家用无线路由器,将路由器WAN口的MAC地址修改为已在公寓注册的设备MAC地址,再将路由器WAN口接入公寓网络接口
- PC和树莓派均连接自有路由器的WiFi,可自行配置内网互访或端口映射规则,不受公寓网络限制
方案4:内网穿透(仅适用于跨网传输场景)
若需要在公寓外的网络访问PC服务,可使用内网穿透工具将PC的4421端口映射到公网,客户端连接穿透后的公网地址即可。本地传输不推荐使用该方案,会额外增加传输延迟。
内容的提问来源于stack exchange,提问作者MitchFails
相关产品推荐
相关产品推荐

