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

跨LAN的Java Socket TCP连接超时问题排查求助

跨LAN TCP连接超时问题排查

问题描述

尝试在两个不同局域网的设备间建立TCP连接,已在服务器路由器配置端口转发,但服务器未收到任何数据。客户端初始化Socket后,控制台未输出测试用的"connected"信息,约15秒后连接中断并抛出异常:

java.net.ConnectException: Connection timed out: connect
推测客户端未成功连接主机,需排查问题根源。

客户端代码(Client.java)

try {
    Socket s = new Socket("00.00.00.000", 6666);
    System.out.println("connected");
    s.getOutputStream().write((int) (Math.random() * 10));
    s.close();
} catch (UnknownHostException uhe) {
    uhe.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

服务端代码(Server.java)

try {
    ServerSocket ss = new ServerSocket(6666);
    while (true) {
        Socket s = ss.accept();        
        System.out.println("Server: " + s.getInputStream().read());     
        s.close();
    }
} catch (IOException e) {
    e.printStackTrace();
}

服务器路由器端口转发配置

端口转发参数如下:

  • 外部端口:6666
  • 内部IP地址:服务器所在局域网的私有IP
  • 内部端口:6666
  • 协议类型:TCP

排查步骤

  • 修正客户端目标IP:把代码中的00.00.00.000替换为服务器的真实公网IP,可在服务器通过IP查询网站获取。
  • 核对端口转发配置:
    • 确认内部IP是服务器的静态局域网IP,避免DHCP自动分配导致IP变动
    • 检查外部端口、内部端口均设为6666,协议选择TCP,配置已保存并生效
  • 测试端口连通性:
    • 在客户端用telnet 公网IP 6666或nc -zv 公网IP 6666命令测试端口是否可达,不通则说明端口转发未生效或有防火墙拦截
  • 检查防火墙规则:
    • 服务器本地防火墙需放行6666端口的TCP入站请求
    • 路由器端确认未开启额外安全策略阻断6666端口
  • 验证服务端状态:
    • 确保服务端程序正常运行,且ServerSocket绑定的是0.0.0.0或服务器局域网IP(不能是127.0.0.1,否则仅本地可访问)
    • 在服务器执行netstat -ano | findstr 6666(Windows)或netstat -tulpn | grep 6666(Linux),确认6666端口处于监听状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:30:52