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

使用Python通过Socket连接Google Cloud服务器时公网IP无法连接如何解决

公网可访问的Socket通信配置方案

核心问题原因

你当前代码服务端绑定的127.0.0.1是本地回环地址,仅允许同一台机器上的进程发起连接,外部设备(包括同一局域网其他设备、公网设备)都无法访问这个监听端口。

分步修改配置

  • 第一步:修改服务端监听地址
    将服务端代码中的HOST参数改为0.0.0.0,即可监听服务器所有可用的网络接口,无论是本地请求还是公网传入的请求都能被接收。
    修改后的服务端代码如下:
    import socket
    
    HOST = '0.0.0.0'  # 监听所有网络接口
    PORT = 65432        # 监听端口(非特权端口需大于1023)
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((HOST, PORT))
        s.listen()
        conn, addr = s.accept()
        with conn:
            print('Connected by', addr)
            while True:
                data = conn.recv(1024)
                if not data:
                    break
                # 此处替换为你自己的运算逻辑,返回处理后的GPS坐标即可
                conn.sendall(data)
    
  • 第二步:放行服务端端口访问权限
    你需要在两处开放65432端口的TCP访问权限:
    1. 云服务器控制台的防火墙规则:添加入站规则,允许TCP协议的65432端口,测试阶段可将来源IP设为0.0.0.0/0,正式使用时再缩小到你客户端的公网IP段提升安全性
    2. 服务器系统内部的防火墙:如果你的服务器系统开启了ufw/firewalld等防火墙,执行对应命令放行端口,比如ufw的操作命令为ufw allow 65432/tcp
  • 第三步:修改客户端连接地址
    将客户端代码中的HOST参数替换为你的Google Cloud服务器的公网IP即可,修改后的参考代码如下:
    import socket
    
    HOST = '替换为你的云服务器公网IP'  # 云服务器的公网IP地址
    PORT = 65432        # 服务端开放的端口
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((HOST, PORT))
        s.sendall(b'Hello, world')
        data = s.recv(1024)
    
    print('Received', repr(data))
    

额外注意事项

  • 测试连通性时可以先在客户端设备上执行nc -zv 你的公网IP 65432,如果返回连接成功再运行代码,能快速定位是网络问题还是代码问题
  • 如果需要长期使用,建议在云服务器控制台给实例绑定静态公网IP,避免实例重启后公网IP变化需要反复修改客户端代码

内容的提问来源于stack exchange,提问作者Michael Hüppe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:15:04