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

Python Socket跨网连接失败,如何实现不同网络设备间的Socket通信

问题根因

  • 家用网络环境下,公网IP属于运营商分配给光猫/路由器的地址,不会直接分配到你的PC网卡上,因此直接在bind参数中填写公网IP会触发报错。
  • 内网设备默认处于NAT地址转换网络下,公网侧的设备无法主动向内网设备发起连接,这是跨网连接失败的核心原因。

解决方案

场景1:你拥有公网IP(可在路由器后台查看WAN口IP,若与公网查询到的IP一致即为有公网IP)

  1. 修改服务端绑定地址为0.0.0.0,代表监听本地所有网卡的请求,对应代码修改为:
s.bind(('0.0.0.0', 12345))
  1. 登录路由器管理后台,找到端口映射/虚拟服务器配置页,添加映射规则:将外部端口12345映射到你PC的内网IP、内部端口12345,协议选择TCP。
  2. 放行路由器防火墙和PC本地防火墙12345端口的入站请求。
  3. 客户端connect参数填写你的公网IP即可正常建立连接。

场景2:无公网IP(路由器WAN口IP为10/100/172.16-31开头的保留地址,属于运营商CGNAT场景)

  1. 服务端同样修改绑定地址为0.0.0.0,启动服务端程序。
  2. 使用内网穿透工具将本地12345端口映射到公网,获取对应公网访问地址和端口。
  3. 客户端connect参数填写穿透工具提供的公网地址、端口即可正常连接。

内容的提问来源于stack exchange,提问作者Arpanet_01

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:09:02