将SO_TIMEOUT设置为无穷大后,httpclient会抛出readtimeout异常

时间:2014-12-04 06:27:53

标签: java apache-commons-httpclient

我正在使用httpclient for Client Side来连接Server。我没有设置任何超时(readtimeout - SO_TIMEOUT)。从文档中我发现如果未指定超时,则将其解释为无穷大(0)。

但httpclient在客户端连接到服务器后的20到30秒内抛出“java.net.SocketTimeoutException:Read timed out”异常。另请注意:我没有始终如一地面对这个问题。

如何解决此问题?帮助我。

堆栈追踪:

java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(Unknown Source)
at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
at java.io.BufferedOutputStream.write(Unknown Source)
at java.io.FilterOutputStream.write(Unknown Source)
at org.apache.commons.httpclient.methods.multipart.Part.sendDispositionHeader(Part.java:220)
at org.apache.commons.httpclient.methods.multipart.Part.send(Part.java:308)
at org.apache.commons.httpclient.methods.multipart.Part.sendParts(Part.java:385)
at org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity.writeRequest(MultipartRequestEntity.java:164)
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)

代码:

HttpClient client = new HttpClient();
HttpConnectionManager conn = new SimpleHttpConnectionManager(true);
conn.getParams().setConnectionTimeout(25000);
client.setHttpConnectionManager(conn);

PostMethod meth = new PostMethod(url);//url is server url
meth.getParams().setCookiePolicy(CookiePolicy.IGNORE_COOKIES);
Part p[] = new Part[parts.size()];//parts is an arraylist variable for server process params
p = (Part[])parts.toArray(p);
((PostMethod)meth).setRequestEntity(new MultipartRequestEntity(p,meth.getParams()));
meth.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
HttpMethod method = (HttpMethod)meth;
int status =  client.executeMethod(method);

客户端executeMethod

上抛出异常

谢谢, 甘尼申

0 个答案:

没有答案