栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

java中异常+连接重置

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java中异常+连接重置

Connection reset : 一般是客户端正在从服务器读数据时或者向服务器写数据时,服务器连接关闭,通过tcpdump抓包可以看到,返回了一个RST复位标志,导致连接重置。

导致此异常的原因,总结下来有三种情况:

1.服务器端偶尔出现了异常,导致连接关闭

解决方法: 采用出错重试机制

2.服务器端和客户端使用的连接方式不一致

解决方法:服务器端和客户端使用相同的连接方式,即同时使用长连接或短连接

3.如果是HTTPS,那么还存在TLS版本不一致

解决方法:服务器端和客户端使用相同的TLS版本

附录:JDK中对 HTTPS 版本的支持情况:

JDK 6

SSL v3

TLS v1(默认)

TLS v1.1(JDK6 update 111 及以上)

JDK 7

SSLv3

TLS v1(默认)

TLS v1.1

TLS v1.2

JDK 8

SSL v3

TLS v1

TLS v1.1

TLS v1.2(默认)

方法一:如果客户端JDK是1.7,服务器端要求TLSv1.2,那么在启动参数加上-Dhttps.protocols=TLSv1.2即可。

方法二:代码指定TLS版本 System.setProperty("https.protocols", "TLSv1.2");

方法三:可以用以下工具类方法解决:

public classHttpClientFactory {private staticCloseableHttpClient client;public static HttpClient getHttpsClient() throwsException {if (client != null) {returnclient;

}

SSLContext sslcontext=SSLContexts.custom().useSSL().build();

sslcontext.init(null, new X509TrustManager[]{new HttpsTrustManager()}, newSecureRandom());

SSLConnectionSocketFactory factory= new SSLConnectionSocketFactory(sslcontext,new String[] { "SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2" }, null,

SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

client=HttpClients.custom().setSSLSocketFactory(factory).build();returnclient;

}public static voidreleaseInstance() {

client= null;

}

}

public class HttpsTrustManager implementsX509TrustManager {

@Overridepublic voidcheckClientTrusted(X509Certificate[] arg0, String arg1)throwsCertificateException {//TODO Auto-generated method stub

}

@Overridepublic voidcheckServerTrusted(X509Certificate[] arg0, String arg1)throwsCertificateException {//TODO Auto-generated method stub

}

@OverridepublicX509Certificate[] getAcceptedIssuers() {return newX509Certificate[]{};

}

}

调用方式如下:

HttpClient httpClient =HttpClientFactory.getHttpsClient();

HttpPost request= newHttpPost(requestUrl);

request.setEntity(new StringEntity(gson.toJson(requestMap), "application/json", "UTF-8"));

HttpResponse httpResponse=httpClient.execute(request);

resultStr= EntityUtils.toString(httpResponse.getEntity(), "UTF-8");

System.out.println(resultStr);

httpResponse.getEntity().getContent().close();

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906201.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号