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