java - 当 java.net.preferIPv4Stack=true 时,无法对 IPv6 使用 InetAddress.isReachable(timeout)

标签 java ipv6

在Linux中,我默认通过设置java.net.preferIPv4Stack=true来禁用IPv6支持,仅在应用程序中支持IPv4。

但是,我现在想使用 InetAddress.isReachable(timeout) 访问外部 IPv6 IP,但它完全失败,并且仅当我设置 java.net.preferIPv4Stack=false 时才有效。

是否有任何方法可以访问 IPv6 IP,但仍保持 java.net.preferIPv4Stack=true?

谢谢

最佳答案

不,这是不可能的,因为您设置的选项 explicitly disables communication with IPv6 only hosts:

java.net.preferIPv4Stack (default: false)

If IPv6 is available on the operating system the underlying native socket will be, by default, an IPv6 socket which lets applications connect to, and accept connections from, both IPv4 and IPv6 hosts. However, in the case an application would rather use IPv4 only sockets, then this property can be set to true. The implication is that it will not be possible for the application to communicate with IPv6 only hosts.

如果您想确保 IPv4 地址优先于 IPv6 地址,但仍然有 IPv6 可用,那么您很幸运 - 这是默认行为! (如果您出于任何原因想要将其更改为首选 IPv6 地址,可以设置 java.net.preferIPv6Addresses=true。)

关于java - 当 java.net.preferIPv4Stack=true 时,无法对 IPv6 使用 InetAddress.isReachable(timeout),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50188394/

相关文章:

java - 当我尝试在 Linux 上运行我的程序时抛出错误(在 Windows 上运行良好)

ios - 即使不支持 IPv6,如何在 Google Cloud 上运行 iOS 应用程序

docker - 如何在docker compose版本: >= 3?中启用IPv6

ios - 我的服务器是否支持 ipv6,以便在我使用 ipv6 互联网时能够获取数据

c++ - 使用C++对ipv6地址进行比较操作

java - 在没有解析器的情况下从网页中提取除标签之外的所有内容 - 使用扫描仪和正则表达式?

正确复数的 Java 国际化 (i18n)

java - 淡褐色 : Maps and Set

PHP $_SERVER ['REMOTE_ADDR' ] 显示 IPv6

java - 杰汤。按顺序打印所有文本节点