网上能查的方法都用过了,比如
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)

解决方案 »

  1.   

    使用TCP短链接无效。
     //最后的解决方案是客户端和服务器统一使用TCP短连接
     httppost.setProtocolVersion(HttpVersion.HTTP_1_0);
     httppost.addHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_CLOSE);
      

  2.   

    你这文件上传走的是HTTP啊,最大的可能感觉是文件太大导致http传输超时;你看看你的http调用里面timeout值是怎么设置的,这个值在http里面是传输时间不是连接超时设置,值改大点看看。
      

  3.   

    下面的方法无效
    浏览器发送请求到servlet,servlet处理时间太久,所以导致chrome浏览器出现ERR_CONNECTION_RESET错误
    解决方案: 
    在相应servlet执行最后添加一句代码:
    Thread.currentThread().join();
    表示必须在当前线程执行完之后才返回页面到浏览器。
      

  4.   

    链接时间改再大也无效
            int timeout = 60;//这个要弄长点
            RequestConfig defaultRequestConfig = RequestConfig.custom()
                    .setSocketTimeout(timeout * 1000)
                    .setConnectTimeout(timeout * 1000)
                    .setConnectionRequestTimeout(timeout * 1000)
                    .build();
      

  5.   

     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);