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

Python Socket局域网可用公网无法通信如何修改代码?

公网Socket通信修改方案

你当前程序仅能在局域网运行的核心原因是服务端绑定了内网私有IP,且公网到内网的流量转发通道没有打通,公网请求无法直接触达内网的服务端设备,按以下步骤调整即可:

第一步:先完成网络层配置(必须前置操作,否则代码修改无效)

  • 先确认你的宽带是否具备公网IP:在服务端设备上直接搜索「公网IP」,如果查到的IP是10、172.16-31、192.168开头的私有地址,说明运营商做了多层NAT,需要先联系运营商申请公网IP。
  • 登录路由器管理后台,找到端口映射/虚拟服务器功能,新增映射规则:外部端口填2101,内部端口填2101,内部IP填服务端设备的内网IP192.168.1.56,协议选择TCP,保存后生效。
  • 记录下你的路由器公网IP,后续客户端需要连接这个地址。

第二步:代码修改

服务端server.py调整

把原固定绑定内网IP的逻辑改成监听所有网卡,这样既可以接收内网请求,也能接收路由器转发过来的公网请求,修改后代码如下:

#server.py 修改后
import socket
import pyautogui
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 0.0.0.0代表监听本机所有网卡的请求
server.bind(("0.0.0.0",2101))
        
server.listen(5)

klienti , addr = server.accept()
asdf = pyautogui.prompt("mesiji:")
klienti.send(bytes(asdf,"utf-8"))

客户端client.py调整

把原连接的内网IP替换成你记录的路由器公网IP即可:

#client.py 修改后
import socket
import pyautogui

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 把引号内的内容替换成你实际的公网IP
server.connect(("你的路由器公网IP",2101))

mesiji = server.recv(1024)
pyautogui.alert(mesiji.decode("utf-8"))

额外注意事项

  • 家用宽带普遍会封禁80、443、8080这类常用端口,你用的2101属于高位端口,一般不会被封,若测试仍无法连接,可以更换10000-65535区间的其他端口,同步修改端口映射规则和代码里的端口号即可。
  • 需确认服务端设备防火墙放开了2101端口的TCP入站规则,客户端设备防火墙放开2101端口的TCP出站规则,避免流量被防火墙拦截。
  • 若运营商无法提供公网IP,可以用内网穿透工具替代端口映射,配置逻辑为将内网服务端的2101端口映射到穿透工具的公网节点端口,客户端连接穿透工具提供的公网地址即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 06:27:02