← 中文资源

简体中文版本

Java ConnectException: Connection refused

诊断 Java 的 java.net.ConnectException Connection refused:用 telnet 与 netstat 区分客户端、防火墙与远端监听问题。

阅读英文原文

症状

调用快速失败并报 java.net.ConnectException: Connection refused。这种立即失败有别于超时,且可能只影响某台主机或某个端口。

诊断

探测端口并查看监听:

nc -vz app.internal 8080
ss -ltnp | grep 8080

若远端显示 127.0.0.1:8080,说明仅监听回环,远端连接会被拒绝。

修复

绑定到正确的网卡并开放端口:

server:
  address: 0.0.0.0
  port: 8080

在客户端加入带退避的重试以应对启动间隙:

for (int i = 0; i < 5; i++) {
    try { return connect(); }
    catch (ConnectException e) { Thread.sleep(200L << i); }
}

验证

从客户端主机再次探测;端口可接受连接,Java 调用成功且不再抛出该异常。