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

如何实现本地Python Socket客户端与AWS EC2 Ubuntu服务端的通信?

本地Socket客户端连接AWS EC2服务端完整解决方案

一、EC2服务端Socket监听配置

  1. 服务端绑定地址规则
    服务端代码必须绑定0.0.0.0,而非私网IP或公网IP。0.0.0.0表示监听实例所有可用网络接口,能同时接收私网和公网转发的请求。绑定公网IP会启动失败,因为EC2的公网IP是AWS通过NAT映射的,实例本身并未直接绑定该IP。
    示例Python服务端代码:

    import socket
    
    HOST = '0.0.0.0'  # 核心:绑定所有网络接口
    PORT = 12345       # 自定义端口,确保未被系统占用
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((HOST, PORT))
        s.listen()
        conn, addr = s.accept()
        with conn:
            print(f"Connected by {addr}")
            while True:
                data = conn.recv(1024)
                if not data:
                    break
                conn.sendall(data)
    
  2. EC2本地防火墙配置
    Ubuntu默认使用ufw防火墙,需开放对应端口的入站流量:

    # 允许指定端口的TCP流量
    sudo ufw allow 12345/tcp
    # 重启防火墙使规则生效
    sudo ufw reload
    

    执行sudo ufw status可查看当前防火墙规则是否生效。

二、客户端与服务端地址对应

  • 服务端:绑定0.0.0.0,端口与代码中指定的一致(如12345)
  • 客户端:连接地址填写EC2的公网IP(或公网域名),端口与服务端保持一致。
    公网IP可在EC2控制台实例详情页查看,也可在实例内执行curl ifconfig.me获取。

三、实现服务端24/7运行

方法1:nohup后台运行(快速简单)

# 后台运行服务端脚本,输出日志到nohup.out文件
nohup python3 your_server_script.py &

关闭SSH连接后进程仍会持续运行,日志可通过cat nohup.out查看。

方法2:systemd服务配置(稳定可靠)

  1. 创建服务配置文件:
    sudo nano /etc/systemd/system/socket-server.service
    
    写入以下内容(替换脚本路径和名称):
    [Unit]
    Description=Socket Server Service
    After=network.target
    
    [Service]
    User=ubuntu
    WorkingDirectory=/home/ubuntu/your_script_directory
    ExecStart=/usr/bin/python3 /home/ubuntu/your_script_directory/your_server_script.py
    Restart=always  # 进程意外退出时自动重启
    
    [Install]
    WantedBy=multi-user.target
    
  2. 启动并设置开机自启:
    sudo systemctl daemon-reload
    sudo systemctl start socket-server
    sudo systemctl enable socket-server
    
    查看服务状态:sudo systemctl status socket-server

四、EC2安全组规则检查

  1. 登录AWS EC2控制台,找到目标实例,点击"安全组"链接进入配置页面。
  2. 添加入站规则:
    • 类型:自定义TCP
    • 端口范围:填写服务端使用的端口(如12345)
    • 源:测试阶段可选择0.0.0.0/0(允许所有IP访问),生产环境建议限制为本地PC的公网IP。
  3. 出站规则保持默认(允许所有出站流量)即可。

额外排查步骤

若仍出现超时错误,按以下顺序排查:

  1. 在EC2实例执行netstat -tulpn | grep 12345(替换为你的端口),确认服务端是否在监听0.0.0.0:12345。
  2. 在本地PC执行telnet ec2-public-ip 12345测试端口连通性,若不通则说明安全组或本地防火墙存在拦截。
  3. 检查本地PC防火墙是否允许出站到该端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:50:51