Python Socket编程示例中替换'localhost'需使用什么IP地址
Socket通信中
localhost替换规则与IP获取方法 localhost本质是本机环回地址的域名,对应IP127.0.0.1,仅支持客户端、服务端运行在同一台设备时使用,跨设备通信必须替换为服务端的实际可达IP,具体选择和获取方式如下:
场景对应IP选择规则
- 本地同机调试:无需替换,直接保留
localhost或填127.0.0.1即可,流量不经过物理网卡,仅在本机内部流转,适合开发阶段验证逻辑。 - 同局域网跨设备访问(比如服务端跑在台式机,客户端跑在同WiFi下的笔记本、手机、硬件开发板):替换为服务端设备的局域网私有IP。
- 跨公网访问(客户端和服务端不在同一局域网):替换为服务端的公网IP,家用宽带环境下需要在路由器配置8089端口的端口映射,云服务器直接使用控制台提供的公网IP即可。
IP地址获取方式
- Windows设备查局域网IP:打开命令提示符执行
ipconfig,找到当前联网网卡对应的「IPv4地址」字段,一般为192.168.x.x、10.x.x.x、172.16.x.x开头的地址。 - macOS/Linux设备查局域网IP:打开终端执行
ip addr(部分老版本系统用ifconfig),找到当前联网网卡下的inet对应的地址即为局域网IP。 - 公网IP查询:在服务端设备上打开浏览器搜索“本机IP”,即可直接看到当前设备的公网出口IP。
关键注意点:如果需要允许外部设备连接服务端,
bind()方法不能绑定localhost/127.0.0.1,否则服务端只会接收本机的连接请求,外部连接会被直接拒绝。需要监听所有网卡流量时直接填0.0.0.0即可,同时覆盖本机、局域网、公网的访问请求。
修改后的可跨设备访问代码示例
服务端代码
import socket serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定0.0.0.0监听所有网卡的8089端口 serversocket.bind(('0.0.0.0', 8089)) serversocket.listen(5) # 最大允许5个连接排队 while True: connection, address = serversocket.accept() print(f"收到来自{address}的新连接") # 自行补充数据收发逻辑 connection.close()
客户端代码
import socket clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 将此处IP替换为前面查到的服务端实际IP,同机调试可填127.0.0.1 clientsocket.connect(('服务端实际IP', 8089)) # 自行补充数据收发逻辑
常见排错点
- 跨设备连接超时优先检查服务端系统防火墙是否放开了8089端口的TCP入站规则。
- 云服务器公网连接失败优先检查控制台安全组是否放开8089端口的访问权限。
- 局域网连接失败确认两个设备连在同一个路由器下,且路由器未开启AP隔离功能。
内容的提问来源于stack exchange,提问作者Marsh Mellows
相关产品推荐
相关产品推荐

