java.net.ConnectException: Connection refused本质是TCP层收到RST包,表明目标IP和端口可达但无服务监听;排查重点为验证服务是否真实运行并绑定到访问地址+端口,而非单纯检查网络连通性。

遇到 java.net.ConnectException: Connection refused,本质是客户端发出了 TCP SYN 包,但服务端明确回了 RST —— 说明目标 IP 和端口“可达”,但没人监听。排查重点不是网络通不通,而是“服务有没有真在指定地址+端口上听着”。
确认服务进程是否真实运行并监听正确端口
不能只看“服务启动了”,要验证它是否绑定到了你访问的那个 IP 和端口。
- 用
ss -tuln | grep :端口号(推荐)或netstat -tuln | grep :端口号查本地监听状态,例如ss -tuln | grep :3658看 Arthas 是否在监听 - 注意监听地址:
127.0.0.1:8080只接受本机连接;0.0.0.0:8080或具体内网 IP(如192.168.1.100:8080)才能被外部访问 - 检查服务日志,确认没有因端口被占、配置路径错误、证书缺失等导致静默失败或自动退出
- Docker 场景下,执行
docker ps确认容器运行,并用docker port 容器名核对端口映射(比如-p 8080:3000表示宿主机 8080 映射到容器 3000)
验证监听地址是否对外可用
即使端口在监听,如果绑定了 127.0.0.1,远程或容器外就无法连上。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 查看服务启动命令或配置文件,确认 bind 地址不是
localhost或127.0.0.1(尤其 Spring Boot 默认只绑本地) - Java 应用常见写法:
server.address=0.0.0.0(application.properties)或启动参数加--server.address=0.0.0.0 - Arthas 启动时若未指定
-h 0.0.0.0,默认只监听127.0.0.1,远程连接必拒
测试端口连通性,区分“拒接”和“超时”
用底层工具绕过应用层,直接测 TCP 层是否通。
立即学习“Java免费学习笔记(深入)”;
-
telnet 目标IP 端口或nc -zv 目标IP 端口:返回Connection refused→ 网络可达,但端口无服务;返回timeout或No route to host→ 网络/防火墙问题 - 如果是本机调用,目标 IP 别写
localhost或127.0.0.1,尤其在 Docker 或 Kubernetes 中,这会指向调用方自身而非目标服务 - 云服务器务必检查安全组规则,是否放行目标端口的入方向流量(TCP 协议,对应端口)
检查客户端配置与实际部署一致性
连错地址,自然被拒。常见低级但高频失误:
- 代码或配置里 host 写错(比如
localhsot)、端口多一位(80800而非8080) - 使用域名时,执行
nslookup 域名或dig 域名看解析结果是否为服务真实部署的 IP(Ingress 或 LB 场景下易解析到无效 VIP) - 检查
/etc/hosts(Linux/macOS)或C:\Windows\System32\drivers\etc\hosts(Windows),是否有静态映射把域名指到了错误 IP - 确认协议匹配:HTTP 客户端别连 HTTPS 端口(443),gRPC 客户端别连普通 HTTP 服务端口

















