網上能查的方法都用過了,比如
linux服務增加下面的內容
#vi /etc/sysctl.conf
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=1800
net.ipv4.tcp_max_syn_backlog=4096
錯誤如下:
2017-08-24 03:00:04.872 INFO 22781 --- [pool-7-thread-1] o.apache.http.impl.execchain.RetryExec : Retrying requs ->http://www.xx.cn:80
java.net.SocketException: Connection reset
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:118)
at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
at org.apache.http.impl.io.SessionOutputBufferImpl.streamWrite(SessionOutputBufferImpl.java:124)
at org.apache.http.impl.io.SessionOutputBufferImpl.flushBuffer(SessionOutputBufferImpl.java:136)
at org.apache.http.impl.io.SessionOutputBufferImpl.write(SessionOutputBufferImpl.java:167)
at org.apache.http.impl.io.ContentLengthOutputStream.write(ContentLengthOutputStream.java:113)
at org.apache.http.entity.mime.content.FileBody.writeTo(FileBody.java:121)
at org.apache.http.entity.mime.AbstractMultipartForm.doWriteTo(AbstractMultipartForm.java:134)
at org.apache.http.entity.mime.AbstractMultipartForm.writeTo(AbstractMultipartForm.java:157)
at org.apache.http.entity.mime.MultipartFormEntity.writeTo(MultipartFormEntity.java:113)
at org.apache.http.impl.DefaultBHttpClientConnection.sendRequestEntity(DefaultBHttpClientConnection.java:156)
at org.apache.http.impl.conn.CPoolProxy.sendRequestEntity(CPoolProxy.java:162)
at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:238)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:271)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
uj5u.com熱心網友回復:
兩個服務器通信上傳檔案 就報這個錯誤,換臺機器同樣代碼就沒問題。想不通了。uj5u.com熱心網友回復:
使用TCP短鏈接無效。//最后的解決方案是客戶端和服務器統一使用TCP短連接
httppost.setProtocolVersion(HttpVersion.HTTP_1_0);
httppost.addHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_CLOSE);
uj5u.com熱心網友回復:
你這檔案上傳走的是HTTP啊,最大的可能感覺是檔案太大導致http傳輸超時;你看看你的http呼叫里面timeout值是怎么設定的,這個值在http里面是傳輸時間不是連接超時設定,值改大點看看。uj5u.com熱心網友回復:
下面的方法無效瀏覽器發送請求到servlet,servlet處理時間太久,所以導致chrome瀏覽器出現ERR_CONNECTION_RESET錯誤
解決方案:
在相應servlet執行最后添加一句代碼:
Thread.currentThread().join();
表示必須在當前執行緒執行完之后才回傳頁面到瀏覽器。
uj5u.com熱心網友回復:
鏈接時間改再大也無效int timeout = 60;//這個要弄長點
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setSocketTimeout(timeout * 1000)
.setConnectTimeout(timeout * 1000)
.setConnectionRequestTimeout(timeout * 1000)
.build();
uj5u.com熱心網友回復:
CloseableHttpClient httpclient = HttpClientBuilder.create().setDefaultRequestConfig(defaultRequestConfig).build();HttpPost httppost = new HttpPost(transDto.getWebSiteUrl());
問題肯定出在這里,就是不知道是什么原因。
MultipartEntityBuilder build = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
for(int i = 0 ; i < fileList.size(); i++){
FileBody filebody = new FileBody(fileList.get(i), ContentType.create("multipart/form-data", "UTF-8"));
build.addPart("file"+i, filebody);
}
StringBody userId = new StringBody(URLEncoder.encode(JSON.toJSONString(transDto), "utf-8"), ContentType.create( "text/plain", Consts.UTF_8));
build.addPart("data", userId);
HttpEntity reqEntity = build.setCharset(CharsetUtils.get("UTF-8")).build();
httppost.setEntity(reqEntity);
Logger.getLogger(HttpUploadUtils.class.getName()).log(Level.INFO, "執行的請求:" + httppost.getRequestLine());
CloseableHttpResponse response = httpclient.execute(httppost);
uj5u.com熱心網友回復:
請問最后又結論嗎 我也遇到這個問題轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/69325.html
標籤:Java EE
