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

java.net.SocketException: Connection reset

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

java.net.SocketException: Connection reset

出现错误的现象:

刚搭建好的服务调用另一台服务的接口时:报错java.net.SocketException: Connection reset,如图

对应的源代码如下,是很正常的调用另一个服务请求

            // 创建连接
            URL url = new URL("https://baidu.org.cn"+CREATE_API);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setUseCaches(false);
            connection.setInstanceFollowRedirects(true);
            connection.setRequestMethod("POST"); // 设置请求方式
            connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式
            connection.setRequestProperty("Token", TOKEN); // 设置发送数据的格式");

            // 发起请求
            connection.connect();
            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); // utf-8编码
            out.append(params);
            out.flush();
            out.close();

 因为前8行报错,让我怀疑和https有关系

 

所以查看了另一台服务的nginx配置,发现协议只填了TLSv1.2和TLSv1.1

 但是JDK1.7默认使用TLSv1.0(我当前用的1.7),1.8默认使用TLSv1.2,但其实1.7是支持TLS1.2的,只不过没有默认启用

所以增加上TLSv1协议,重新加载配置文件后,报错问题解决,

 

如果不想在nginx上增加TLSv1协议,也可以在客户端java启动参数加上-Dhttps.protocols=TLSv1.2即可。或者使用代码System.setProperty("https.protocols", "TLSv1.2");

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(默认)

 

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

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

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