[首选IPv6地址时使用SocketException

问题描述 投票:0回答:1

因此,我有一个需要访问URL的地方,如果需要的话,我更喜欢使用IPV6

这是我的一段代码。

private HttpURLConnection getConnection(URL url) throws IOException {
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setDoOutput(true);
    conn.setConnectTimeout(15 * 1000);
    conn.setRequestMethod("GET");
    conn.setRequestProperty("User-Agent", "Mozilla/4.76");
    conn.setUseCaches(false);
    return conn;
}

并且我正在通过Buffered Reader读取连接输出。

HttpURLConnection conn = getConnection(new URL(API + urlParameters));
return new BufferedReader(new InputStreamReader(conn.getInputStream())).readLine();

问题发生在BufferedReader上,引发错误

net.SocketException: Network is unreachable: connect

但是当我从应用程序中删除此代码块时,该程序将按预期工作。System.setProperty("java.net.preferIPv6Addresses", "true");

但是,即使用户可以使用IPv4,它也会发送IPv6 IP地址。如果用户无法使用IPv6,它将如何发送IPv6 IP。它将使用IPv4,我我正在使用cloudflare记录IP,默认情况下cloudflare需要浏览器中的IPv6

java http httpurlconnection ipv6
1个回答
0
投票

问题很明显。即使您设置了ipv6,您的ISP(Internet服务提供商)也不支持preferIPv6Addresses。当您设置preferIPv6Addresses时,您尝试从ipv4迁移到ipv6。尽管ISP需要支持ivp6并且目标URL必须具有ipv6地址,但这还不够。是的,您可以使用ipv6,但没有任何ISP支持就不能使用它。

© www.soinside.com 2019 - 2024. All rights reserved.