Java 连接拒绝异常排查:Connection refused
围绕 java.net.ConnectException: Connection refused: connect 报错,说明常见原因、排查路径和处理方法,帮助快速定位端口、服务和网络连接问题。
java.net.ConnectException: Connection refused: connect 是 Java 网络编程和 Web 服务调试中很常见的异常。它的含义通常不是“代码一定写错了”,而是客户端已经向目标地址发起连接,但目标主机或端口拒绝了该连接。排查时应从服务是否启动、端口是否正确、网络是否可达和防火墙策略几个方向入手。
报错含义
当 Java 程序通过 Socket、HTTP 客户端、JDBC 驱动或 RPC 框架访问远端服务时,底层需要建立 TCP 连接。如果目标 IP 可达,但端口上没有进程监听,或监听进程主动拒绝连接,就可能抛出该异常。
常见场景包括访问 Tomcat、Spring Boot、数据库、Redis、消息队列、注册中心或内部 API。错误信息中的 connect 表示异常发生在建立连接阶段,还没有进入业务协议处理。
优先检查服务和端口
第一步是确认目标服务是否真的启动,并监听在预期端口。以本机 8080 端口为例,可以在 Windows 中执行:
netstat -ano | findstr 8080在 Linux 中可以使用:
ss -lntp | grep 8080如果没有监听结果,说明服务未启动、启动失败或端口配置不是 8080。如果端口被其他进程占用,应用可能启动失败,也可能启动到了其他端口,需要查看启动日志确认。
检查访问地址
很多连接拒绝来自地址写错。比如服务只监听 127.0.0.1,外部机器访问内网 IP 就可能失败;容器内服务监听在容器地址,宿主机却访问了错误端口;配置文件中把测试环境地址带到了本地环境。
排查时建议把主机、端口、协议拆开验证。先用 ping 或网络工具确认主机可达,再用 telnet、nc 或浏览器确认端口是否可连。对于 HTTP 服务,还要确认访问路径和协议是 http 还是 https。
Tomcat 和 Web 应用场景
如果错误发生在 Tomcat 或本地 Web 服务调试中,常见原因是服务器没有彻底关闭,端口仍被旧进程占用;也可能是应用启动报错,导致端口没有成功监听。可以先结束占用端口的进程,再重新启动服务。
taskkill /PID 进程号 /F但不建议只靠杀进程解决问题。更稳妥的做法是查看应用日志,确认是否存在端口冲突、配置缺失、依赖服务不可用、数据库连接失败等启动异常。
排查顺序建议
处理 java.net.ConnectException: Connection refused: connect 时,可以按固定顺序缩小范围:确认客户端配置的 host 和 port;确认服务端进程已启动;确认端口处于监听状态;确认网络和防火墙允许访问;最后再检查应用协议、鉴权和连接池配置。
这个异常的关键在于“连接阶段失败”。只要围绕连接链路逐段验证,通常都能较快定位是服务没起来、端口不对、地址不通,还是环境隔离导致的访问拒绝。


