java.io.IOException: Connection reset by peer

这个异常信息在服务器后端非常常见了,很多小伙伴一直寻找解决办法。

java.io.IOException: Connection reset by peer

如果客户端是浏览器,不是自己开发的应用,那么它,没有解决办法。

这个异常这意味着客户端正在重置HTTP连接,而不是关闭连接。 此消息还可能表示服务端没有读取完整的请求体(连接在读取完全之前被断开)。

通常情况下,这是正常的,无需担心,不需要处理,(这是传输层的问题,你的程序也没法处理)你可以尝试打开浏览器,按快捷键不停快速地刷新页面,就极有可能看到这个异常日志。

也有可能是传输的时候证书校验问题,需要用对SSLSocketFactory设置准确的Protocol,以OkHttpClient为例

TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
        TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
    throw new IllegalStateException("Unexpected default trust managers:"
            + Arrays.toString(trustManagers));
}
X509TrustManager trustManager = (X509TrustManager) trustManagers[0];

SSLSocketFactory socketFactory = SSLSocketFactoryBuilder.create()
        .setProtocol(SSLSocketFactoryBuilder.TLSv12)
        .setTrustManagers(trustManager)
        .build();

OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .sslSocketFactory(socketFactory, trustManager)
        .build();
2 Likes