【已解决】cn.hutool.core.io.IORuntimeException: ConnectException: Connection refused: connect
一、问题复现
使用 cn.hutool.http.HttpUtil
的 post()
方法时发生报错。
二、报错信息
cn.hutool.core.io.IORuntimeException: ConnectException: Connection refused: connect
at cn.hutool.http.HttpRequest.send(HttpRequest.java:1165)
at cn.hutool.http.HttpRequest.execute(HttpRequest.java:957)
at cn.hutool.http.HttpRequest.execute(HttpRequest.java:928)
at cn.hutool.http.HttpUtil.post(HttpUtil.java:192)
at cn.hutool.http.HttpUtil.post(HttpUtil.java:179)
...
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:607)
at java.net.Socket.connect(Socket.java:556)
at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
at sun.net.www.http.HttpClient.New(HttpClient.java:339)
at sun.net.www.http.HttpClient.New(HttpClient.java:357)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1228)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:990)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1342)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1317)
at cn.hutool.http.HttpConnection.getOutputStream(HttpConnection.java:449)
at cn.hutool.http.HttpRequest.sendFormUrlEncoded(HttpRequest.java:1188)
at cn.hutool.http.HttpRequest.send(HttpRequest.java:1157)
... 101 common frames omitted
三、解决方法
(1)参考方案
java.net.ConnectException: Connection refused: connect
错误通常表示你的应用程序尝试连接某个服务(如数据库、其他服务器或 API
),但连接被拒绝了。这种情况可能由以下几种原因引起:
-
常见原因
- 服务未启动:你尝试连接的服务可能没有启动,或者没有正确启动。
- 主机或端口错误:应用程序可能尝试连接错误的主机或端口,检查你的配置。
- 防火墙问题:防火墙可能阻止了应用程序与服务之间的连接。
- 网络问题:可能存在网络问题,如应用程序所在服务器与目标服务之间的连接中断。
- 端口未开启:目标服务可能没有在指定的端口上监听。
- 协议不匹配:如果应用程序尝试使用不兼容的协议(例如
HTTP
与HTTPS
),连接可能会被拒绝。 - 配置错误:目标服务(如数据库或服务器)的配置错误也可能导致连接被拒绝。
-
排查步骤
- 检查服务状态:确认你要连接的服务已经正常运行,并在正确的端口上监听。
- 检查主机和端口:再次核对连接配置(如数据库
URL
、服务器IP
或API
地址),确保它们是正确的。 - 测试连接:使用
ping
、telnet
或nc
等工具测试目标主机和端口是否可访问。 - 检查防火墙规则:确保防火墙没有阻止应用程序与服务之间的通信。
- 查看服务日志:检查目标服务的日志,查找任何可能导致连接被拒绝的错误信息。
- 确认协议匹配:确保使用了正确的协议(如
HTTP
和HTTPS
之间的匹配)。
(2)我的情况
我遇到的情况是服务未启动,重新启动该服务就好了。
四、适用范围
报错信息一般会提示你出错的代码行,你只要照着提示找到对应的代码语句进行检查就行,如:
cn.hutool.core.io.IORuntimeException: ConnectException: Connection refused: connect
at cn.hutool.http.HttpRequest.send(HttpRequest.java:1165)
at cn.hutool.http.HttpRequest.execute(HttpRequest.java:957)
at cn.hutool.http.HttpRequest.execute(HttpRequest.java:928)
at cn.hutool.http.HttpUtil.post(HttpUtil.java:192)
at cn.hutool.http.HttpUtil.post(HttpUtil.java:179)
at com.my.auth.AuthService.getUserById(AuthService.java:139)
上面的 com.my.auth.AuthService.getUserById
是我写的方法,第 139 行代码是使用 HttpUtil
连接另外的服务。
结合报错信息,就能发现是 post
的服务未启动。