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

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

转载于:https://my.oschina.net/wangwang110/blog/3041641

你可能感兴趣的:(java.net.SocketException: Connection reset 异常原因分析和解决方法)