java.net.SocketException: Connection reset异常的几种原因分析和解决方法

 更新时间:2025年09月11日 09:07:45   作者:初夏0811  
这篇文章主要介绍了java.net.SocketException: Connection reset异常的几种原因分析和解决方法,这个错误通常是由于连接被远程主机关闭导致的,文中通过代码介绍的非常详细,需要的朋友可以参考下

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

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

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

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

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

三、如果是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 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[]{};
    }

}

调用方式如下:

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

总结 

到此这篇关于java.net.SocketException: Connection reset异常的几种原因分析和解决方法的文章就介绍到这了,更多相关java.net.SocketException: Connection reset异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot整合Zuul全过程

    SpringBoot整合Zuul全过程

    Zuul网关是微服务架构中的重要组件,具备统一入口、鉴权校验、动态路由等功能,它通过配置文件进行灵活的路由和过滤器设置,支持Hystrix进行容错处理,还提供了限流保护和性能调优
    2025-12-12
  • Java异常处理机制throws举例详解

    Java异常处理机制throws举例详解

    这篇文章主要介绍了Java中异常处理机制,包括finally的使用、异步处理的方式(throws)、以及手动抛出异常,finally用于确保资源释放,throws用于声明方法可能抛出的异常,由调用者处理,手动抛出异常则是在特定条件下主动抛出异常对象,需要的朋友可以参考下
    2024-11-11
  • springKafka生产者、消费者,数据发送/接收方式

    springKafka生产者、消费者,数据发送/接收方式

    这篇文章主要介绍了springKafka生产者、消费者,数据发送/接收方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-09-09
  • Java中LambdaQueryWrapper的常用方法详解

    Java中LambdaQueryWrapper的常用方法详解

    这篇文章主要给大家介绍了关于Java中LambdaQueryWrapper常用方法的相关资料,lambdaquerywrapper是一个Java库,用于构建类型安全的Lambda表达式查询,需要的朋友可以参考下
    2023-11-11
  • SpringBoot详细列举常用注解的说明

    SpringBoot详细列举常用注解的说明

    在开发SpringBoot程序的过程中,有可能与其他业务系统进行对接开发,获取封装公共的API接口等等,下面这篇文章主要给大家介绍了关于SpringBoot常见的注解的相关资料,需要的朋友可以参考下
    2022-06-06
  • Spring超出最大会话数(Max sessions limit reached: 10000)

    Spring超出最大会话数(Max sessions limit reached: 10000)

    在Spring系统中遇到的Maxsessionslimitreached:10000错误,该错误由于会话数超过默认限制10000而触发,下面就来介绍一下解决方法,感兴趣的可以了解一下
    2024-12-12
  • SpringBoot从yml配置文件中读常用参数值实例方法

    SpringBoot从yml配置文件中读常用参数值实例方法

    在本篇文章里小编给大家整理了关于SpringBoot从yml配置文件中读常用参数值实例方法,有需要的朋友们学习下。
    2019-12-12
  • SpringBoot中使用多线程的方法示例

    SpringBoot中使用多线程的方法示例

    这篇文章主要介绍了SpringBoot中使用多线程的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Springboot+aop实现配置多数据源的示例代码

    Springboot+aop实现配置多数据源的示例代码

    本文介绍了如何使用SpringAOP和注解实现动态数据源切换,通过自定义注解和ThreadLocal存储数据上下文信息,重写AbstractRoutingDataSource类并使用自定义切面来实现动态数据源的切换,感兴趣的可以了解一下
    2024-11-11
  • K8S(Docker)如何优雅的关闭SpringBoot微服务

    K8S(Docker)如何优雅的关闭SpringBoot微服务

    这篇文章主要介绍了K8S(Docker)如何优雅的关闭SpringBoot微服务问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-01-01

最新评论