当前位置 : 主页 > 编程语言 > java >

Java中Connection timed out和Connection refused的区别讲解

来源:互联网 收集:自由互联 发布时间:2021-07-07
前言:这两个异常报出的时候,说明客户端没法正常连接到服务端,但是两者还是有区别的。 1:Connection timed out 在实际开发中经常会碰到 Connection timed out 的问题 java.net.ConnectException:

前言:这两个异常报出的时候,说明客户端没法正常连接到服务端,但是两者还是有区别的。

1:Connection timed out

在实际开发中经常会碰到Connection timed out的问题

java.net.ConnectException: Connection timed out (Connection timed out)
  at java.net.PlainSocketImpl.socketConnect(Native Method)
  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.SocksSocketImpl.connect(SocksSocketImpl.java:392)
  at java.net.Socket.connect(Socket.java:589)
  at java.net.Socket.connect(Socket.java:538)
  at java.net.Socket.<init>(Socket.java:434)
  at java.net.Socket.<init>(Socket.java:211)
  at ClientSocketTimeout.main(ClientSocketTimeout.java:8)

当得到 Connection timed out: connect 的时候表示TCP路由不正常,原因有很多,可能是服务器无法ping通,可能是服务器(防火墙等)丢弃了该请求报文包,也可能是服务器应答太慢,又或者存在间歇性的问题(这种情况很难从日志文件中排查问题)。

2:Connection refused

当得到Connection refused: connect 异常的时候表示从本地客户端到目标IP地址的路由是正常的,但是该目标端口没有进程在监听,然后服务端拒绝掉了连接。

一个成功的tcp链接将会看到Syn,Syn-Ack,Ack,这也就是我们预期的TCP三次握手。当使用tcpdump或wireshark抓包工具来探测发送过来的请求报文包时,Connection refused将会看到Syn,Rst。

Connection refused问题排查

1. 查看防火墙是否打开,如防火墙打开,端口是否开放

2. 查看服务端是否正常运行

3. 查看服务端监听的端口与客户端访问的端口是否一致

jps | grep [appname]

netstat -anp | grep [pid]

4. ping hostname, telnet hostname port

5. 检查客户端访问的hostname和port是否正确

6.  检测服务端监听端口是host是否使用了127.0.0.1/localhost

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对自由互联的支持。如果你想了解更多相关内容请查看下面相关链接

网友评论