在Linux中,我通过默认设置java.net.preferIPv4Stack = true来禁用IPv6支持,仅在应用程序中支持IPv4。
但是,我现在想要使用InetAddress.isReachable(timeout)来访问外部IPv6 IP,但它完全失败并且仅在我设置java.net.preferIPv4Stack = false时才有效。
有没有办法达到IPv6 IP,但仍然保持java.net.preferIPv4Stack = true?
谢谢
答案 0 :(得分:2)
不,这是不可能的,因为您设置的选项explicitly disables communication with IPv6 only hosts:
java.net.preferIPv4Stack(默认值:false)
如果操作系统上有IPv6,则默认情况下,底层本机套接字将是一个IPv6套接字,允许应用程序连接到IPv4和IPv6主机,并接受来自IPv4和IPv6主机的连接。但是,如果应用程序宁愿仅使用IPv4套接字,则可以将此属性设置为true。 这意味着应用程序无法仅与IPv6通信。
如果你想确保IPv4地址优先于IPv6地址,但仍然有IPv6可用,那么你很幸运 - 这是默认行为! (如果您因任何原因想要将其更改为首选IPv6地址,可以设置java.net.preferIPv6Addresses=true
。)