You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

EC2实例Ping正常但Java客户端TCP套接字无法连接问题咨询

排查EC2实例Socket Server无法连接的问题

我之前在Windows Server的EC2实例上部署Socket服务时也碰到过一模一样的情况——能ping通但连不上端口,结合你的环境给你几个实用的排查方向:

  • 检查EC2实例本地的Windows防火墙
    安全组已经开了全流量,但Windows Server自带的防火墙可能还在拦截端口。你可以:

    1. 登录实例后,打开「Windows Defender防火墙」,手动添加入站规则,允许Socket Server使用的TCP端口(比如你用的是8090就填8090);
    2. 或者用命令行快速添加规则:
      netsh advfirewall firewall add rule name="Allow Socket Server" dir=in action=allow protocol=TCP localport=你的端口号
      
      也可以临时关闭防火墙测试一下(测试完成后记得重新开启),如果能连上了,那就是本地防火墙的问题。
  • 确认Socket Server的绑定地址
    很多人会不小心把Server绑定到127.0.0.1(本地回环地址),这样只有实例内部能访问,外部根本连不上。检查你的Java代码,确保ServerSocket绑定到0.0.0.0(允许所有网卡访问)或者实例的公网/私网IP,比如:

    ServerSocket serverSocket = new ServerSocket(你的端口号, 0, InetAddress.getByName("0.0.0.0"));
    
  • 验证端口是否处于监听状态
    在EC2实例的命令行里执行:

    netstat -ano | findstr :你的端口号
    

    看看有没有状态为LISTENING的条目,对应的PID是不是你的Socket Server进程。如果没有,说明Server没有正常启动或者绑定端口失败,得先排查Server端代码的问题。

  • 检查客户端的连接参数
    确保Java客户端用的是EC2实例的公网IP/弹性IP(私网IP只能在VPC内部访问),并且端口号和Server端完全一致,没有输错。另外,确认客户端用的是TCP协议(如果你的Server是TCP的话),别搞成UDP了。

  • 用基础工具测试端口连通性
    先别纠结Java代码,在Win10客户端用telnet或者nc(netcat)测试端口能不能通:

    telnet 实例公网IP 你的端口号
    

    如果telnet能连上,那问题大概率在Java客户端代码里(比如超时设置、异常处理没做);如果连不上,还是回到网络层面排查。

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

火山引擎 最新活动