Java Apache httpclient在5到6小时后给出连接超时
我正在使用httpclient 4.1.2。如果我连接到特定主机XYZ并保持 运行超过5到6小时的客户端程序连接到同一主机XYZ,开始提供:Java Apache httpclient在5到6小时后给出连接超时,java,rest,httpclient,connection-timeout,Java,Rest,Httpclient,Connection Timeout,我正在使用httpclient 4.1.2。如果我连接到特定主机XYZ并保持 运行超过5到6小时的客户端程序连接到同一主机XYZ,开始提供: org.apache.http.conn.ConnectTimeoutException: Connect to XYZ timed out at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:377) at org
org.apache.http.conn.ConnectTimeoutException: Connect to XYZ timed out
at
org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:377)
at
org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at
org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at
org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at
org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
at
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
如果我连接到其他主机,它将成功。问题一次就解决了
我重新启动我的客户端程序。通过浏览器连接到同一主机将成功
服务器是Tomcat6。客户端和服务器都在JRE 5上运行。我已将连接超时设置为20000,套接字超时设置为60000。我正在将DefaultHttpClient与SingleClientConnManager一起使用。在这些情况下,我看到过类似的连接问题:
在调试此类问题时,可以使用。谢谢roraol。这很有帮助。我将尝试这些方法并发回结果。如果我启用线级调试日志记录,则不会发生此问题。所以根本原因应该是第一个提到的原因。对吗?因此,我尝试了以下操作:请参见下一条注释:
int statusCode=res.getStatusLine().getStatusCode();字符串reasonPhrase=res.getStatusLine().getReasonPhrase();Header[]headers=res.getAllHeaders();HashMap headerMap=新HashMap();if(headers!=null){for(Header-Header:headers){if(Header!=null){headerMap.put(Header.getName(),Header.getValue();}}}}}}}HttpEntity-resEntity=res.getEntity();如果(resEntity!=null&&resEntity.getContentLength()>0){ByteArrayOutputStream os=new ByteArrayOutputStream();resEntity.writeTo(os);resStr=os.toString();}
但它仍然给了我同样的问题。那么,您能建议我如何完全清空响应吗?要清空响应,请确保您阅读了实体内容中的所有内容。为此,从resEntity.getContent()创建一个读卡器,并从循环中的读卡器中读取。然后关闭阅读器。