You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java抛出SocketException: Socket is not connected: connect异常求助

解决HttpsURLConnection Socket连接异常问题

你遇到的java.net.SocketException: Socket is not connected: connect异常,通常和网络连接、代理配置或者SSL设置有关,结合你已经尝试的代理配置,给你几个具体的排查和解决方向:

1. 修正代理配置的细节问题

  • 首先检查你设置的代理参数:proxy、port、user、password必须是真实有效的,注意你提供的代码里password后面有个多余的空格,这会直接导致代理认证失败!
  • 系统属性的设置必须在创建URL和HttpsURLConnection之前执行,否则配置不会生效,正确的顺序应该是:
    // 先设置代理属性
    System.setProperty("https.proxyHost", "your-proxy-host");
    System.setProperty("https.proxyPort", "your-proxy-port");
    System.setProperty("https.proxyUser", "your-proxy-user");
    System.setProperty("https.proxyPassword", "your-proxy-password");
    // 再创建连接
    URL urlSP = new URL("https://www.google.fr/");
    HttpsURLConnection connSP = (HttpsURLConnection) urlSP.openConnection();
    connSP.connect();
    

2. 手动为连接指定代理(替代系统属性)

有时候系统属性的代理配置可能因为环境问题不生效,你可以直接为当前连接设置代理对象,同时处理认证:

URL urlSP = new URL("https://www.google.fr/");
// 替换成真实的代理地址和端口
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy-host", 8080));
HttpsURLConnection connSP = (HttpsURLConnection) urlSP.openConnection(proxy);

// 如果代理需要用户名密码认证,设置认证器
Authenticator.setDefault(new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("proxy-user", "proxy-password".toCharArray());
    }
});

connSP.connect();

3. 排查网络与防火墙拦截

  • 先在浏览器中访问https://www.google.fr/,确认网络本身能正常访问目标地址
  • 检查本地防火墙、杀毒软件是否拦截了Java程序的网络请求
  • 使用ping或telnet测试代理服务器的连通性,比如telnet proxy-host 8080,确认代理端口是开放的

4. 排除SSL证书相关问题

虽然报错是Socket连接异常,但部分情况下SSL证书验证失败也会伪装成连接问题,测试环境下可以临时跳过证书验证(生产环境禁止使用):

// 初始化信任所有证书的SSL上下文
TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {
        public X509Certificate[] getAcceptedIssuers() { return null; }
        public void checkClientTrusted(X509Certificate[] certs, String authType) {}
        public void checkServerTrusted(X509Certificate[] certs, String authType) {}
    }
};
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

// 跳过主机名验证
HostnameVerifier allHostsValid = (hostname, session) -> true;
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);

// 之后再创建连接
URL urlSP = new URL("https://www.google.fr/");
HttpsURLConnection connSP = (HttpsURLConnection) urlSP.openConnection();
connSP.connect();

5. 开启调试日志定位问题

添加系统属性开启网络和SSL调试日志,能帮你看到连接过程的详细信息:

System.setProperty("javax.net.debug", "ssl,handshake,network");

运行代码后会输出大量日志,你可以从中找到连接失败的具体原因,比如代理认证失败、SSL握手失败等。

内容的提问来源于stack exchange,提问作者W.G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:16:30