【发布时间】:2013-11-13 07:49:02
【问题描述】:
我正在尝试从 java 客户端调用我的远程 tomcat 服务器,但我间歇性地收到 SocketTimeoutException:连接超时。 (http://docs.oracle.com/javase/7/docs/api/java/net/SocketTimeoutException.html)
这是堆栈跟踪
Caused by: java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:382)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:241)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:228)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:365)
at java.net.Socket.connect(Socket.java:527)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:570)
at org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory.createSocket(EasySSLProtocolSocketFactory.java:189)
at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:706)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:386)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
不一致,我的代码多次尝试连接后就消失了。
我明白 socketTimeout 是什么意思,我没有读取超时但连接超时,这意味着客户端无法与服务器建立 tcp 连接。意味着服务器只是忽略客户端尝试连接它,因为它不可用或太忙在那个端口上做其他事情了。我知道我的服务器可以访问并且正在运行。
显然我连接到服务器的尝试被拒绝了,我想知道为什么?我该如何开始?我应该寻找什么?我的服务器在运行在 EC2 实例上的 redhat linux 机器上运行,有没有办法可以查看我的连接被拒绝的原因?
【问题讨论】:
-
什么是exact异常?你给出了两个版本。我会期望 ConnectException: 'connect timeout', 当尝试连接时,或 SocketTimeoutException: 'connection timed out', 当做 I/O 时。
-
您应该添加更多详细信息,您已经检查过哪些“服务器”、框架、语言、用途、日志?同一个网络?偏僻的? vpn?正在使用的协议?现在你只是说“我的程序坏了”
-
更新了描述,让我知道现在是否更有意义,或者您需要任何其他具体细节。谢谢。
-
请确保您已发布准确异常和错误消息。我以前问过你。我还是不相信你已经做到了。还请包括堆栈跟踪。
-
添加了异常和堆栈跟踪。
标签: java sockets tcp network-programming socket-timeout-exception