java.net.SocketException:?Connection?reset異常的幾種原因分析和解決方法
導(dǎo)致此異常的原因,總結(jié)下來有三種情況:
一、服務(wù)器端偶爾出現(xiàn)了異常,導(dǎo)致連接關(guān)閉
解決方法: 采用出錯(cuò)重試機(jī)制
二、 服務(wù)器端和客戶端使用的連接方式不一致
解決方法: 服務(wù)器端和客戶端使用相同的連接方式,即同時(shí)使用長連接或短連接
三、如果是HTTPS,那么還存在TLS版本不一致
解決方法: 服務(wù)器端和客戶端使用相同的TLS版本,我遇到的就是這種情況。
附錄:JDK中對 HTTPS 版本的支持情況:
JDK 6
SSL v3
TLS v1(默認(rèn))
TLS v1.1(JDK6 update 111 及以上)
JDK 7
SSLv3
TLS v1(默認(rèn))
TLS v1.1
TLS v1.2
JDK 8
SSL v3
TLS v1
TLS v1.1
TLS v1.2(默認(rèn))
方法一:如果客戶端JDK是1.7,服務(wù)器端要求TLSv1.2,那么在啟動(dòng)參數(shù)加上-Dhttps.protocols=TLSv1.2即可。
方法二:代碼指定TLS版本 System.setProperty(“https.protocols”, “TLSv1.2”); (我是通過這種方式,加了一行代碼解決的)
方法三:可以用以下工具類方法解決:
public class HttpClientFactory {
private static CloseableHttpClient client;
public static HttpClient getHttpsClient() throws Exception {
if (client != null) {
return client;
}
SSLContext sslcontext = SSLContexts.custom().useSSL().build();
sslcontext.init(null, new X509TrustManager[]{new HttpsTrustManager()}, new SecureRandom());
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();
return client;
}
public static void releaseInstance() {
client = null;
}
}
public class HttpsTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException {
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException {
// TODO Auto-generated method stub
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
}
調(diào)用方式如下:
HttpClient httpClient = HttpClientFactory.getHttpsClient();
HttpPost request = new HttpPost(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();總結(jié)
到此這篇關(guān)于java.net.SocketException: Connection reset異常的幾種原因分析和解決方法的文章就介紹到這了,更多相關(guān)java.net.SocketException: Connection reset異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
聊聊Java 成員變量賦值和構(gòu)造方法誰先執(zhí)行的問題
這篇文章主要介紹了聊聊Java 成員變量賦值和構(gòu)造方法誰先執(zhí)行的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
java通過URLClassLoader類加載器加載外部jar代碼示例
ClassLoader翻譯過來就是類加載器,普通的java開發(fā)者其實(shí)用到的不多,但對于某些框架開發(fā)者來說卻非常常見,下面這篇文章主要給大家介紹了關(guān)于java通過URLClassLoader類加載器加載外部jar的相關(guān)資料,需要的朋友可以參考下2024-01-01
SpringBoot整合之SpringBoot整合MongoDB的詳細(xì)步驟
這篇文章主要介紹了SpringBoot整合之SpringBoot整合MongoDB的詳細(xì)步驟,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07
java的SimpleDateFormat線程不安全的幾種解決方案
但我們知道SimpleDateFormat是線程不安全的,處理時(shí)要特別小心,要加鎖或者不能定義為static,要在方法內(nèi)new出對象,再進(jìn)行格式化,本文就介紹了幾種方法,感興趣的可以了解一下2021-08-08
SpringBoot?Validation快速實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的示例代碼
在實(shí)際開發(fā)中,肯定會(huì)經(jīng)常遇到對參數(shù)字段進(jìn)行校驗(yàn)的場景,通常我們只能寫大量的if else來完成校驗(yàn)工作,而如果使用SpringBoot Validation則可以輕松的通過注解來完成,接下來小編給大家介紹下利用SpringBoot?Validation快速實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的示例代碼,需要的朋友參考下吧2022-06-06
Java生成Echarts表圖的2種實(shí)現(xiàn)方案
這篇文章主要給大家介紹了關(guān)于Java生成Echarts表圖的2種實(shí)現(xiàn)方案,ECharts是一款功能非常強(qiáng)大的JavaScript圖表庫,文中通過代碼實(shí)例介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09
Java項(xiàng)目中“zip END header not found“錯(cuò)誤的解決方案
在 Java 項(xiàng)目構(gòu)建或運(yùn)行過程中,開發(fā)者常會(huì)遇到 java.util.zip.ZipException: zip END header not found 錯(cuò)誤,這一異常通常與 JAR 文件損壞、下載不完整、編碼問題或 Maven 依賴管理配置不當(dāng)有關(guān),本文給大家介紹了Java項(xiàng)目中“zip END header not found“錯(cuò)誤的解決方案2025-06-06
springboot用controller跳轉(zhuǎn)html頁面的實(shí)現(xiàn)
這篇文章主要介紹了springboot用controller跳轉(zhuǎn)html頁面的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09

