如何使用Python Socket连接不同WiFi网络下的两台电脑?
跨WiFi网络Python Socket连接失败解决方案
核心故障原因
- 内网IP不可路由:你代码中填写的
my ipv4如果是路由器分配的内网地址(192.168.x.x、10.x.x.x、172.16-31.x.x段),不同WiFi属于独立内网时,该地址无法被外部网络直接识别访问 - 端口访问被拦截:服务端设备的系统防火墙、所在路由器的端口过滤规则,会拦截外部网络对21312端口的TCP连接请求
- NAT穿透限制:两台设备都处于内网环境下,没有公网IP映射时,无法直接建立跨内网的TCP连接
解决步骤
- 同运营商家庭网络场景:进入服务端所在WiFi的路由器管理后台,添加端口映射规则,将21312端口(TCP协议)映射到服务端设备的内网IP的21312端口
- 替换连接IP:客户端代码中填写的目标IP要改为服务端网络的公网IP,可在服务端设备上直接查询公网IP获取
- 放开端口限制:临时关闭服务端设备的系统防火墙测试连接,连通后再添加21312端口的TCP入站规则即可
- 跨公网场景:使用内网穿透工具映射服务端端口,或使用公网服务器做消息中转
代码修复(原代码存在缩进错误,修正后可正常运行)
服务端代码
from socket import * lista = ['computer'] s = socket(AF_INET, SOCK_STREAM) port = 21312 # 0.0.0.0表示监听所有网卡的连接请求 s.bind(('0.0.0.0', port)) s.listen(5) while True: for i in range(0, len(lista)): a = str(lista[i]).encode() c, addr = s.accept() print("CONNECTION WITH", addr) c.send(a) print(a) c.close()
客户端代码
import socket from socket import * port = 21312 while True: s = socket(AF_INET, SOCK_STREAM) # 此处替换为服务端的公网IP或内网穿透映射地址 s.connect(('你的服务端公网IP', port)) odebrana = s.recv(1024) decoded = odebrana.decode() print(decoded) s.close()
内容的提问来源于stack exchange,提问作者Michał Strugarek
相关产品推荐
相关产品推荐

