我正在使用一个java.net.InetAddress.getLocalHost().getHostAddress()
用于获取本地 IP 地址的库。但是,这总是在我的计算机上返回一个 IPv6 地址(Gentoo Linux,JDK 1.6.0_37)。该地址进一步用于不支持 IPv6 地址并因此失败的上下文中。
有没有办法强制getHostAddress()
返回一个 IPv4 地址(例如通过参数给 JVM)?
您可以将其设置为在可用时使用 IPv4。当然,IPv6 地址比 IPv4 地址多很多,因此它当然不能保证总是获得 IPv4 地址。
java.net.preferIPv4Stack = true
要么设置:
System.setProperty("java.net.preferIPv4Stack" , "true");
或作为命令行参数:
-Djava.net.preferIPv4Stack=true
不过,首选 IPv4 地址通常是默认行为。
如果您需要确保永远不会获得 IPv6 地址,我认为您需要检查它java.net.InetAddress.getLocalHost().getHostAddress()
是否不返回 an Inet6Address
,并在它返回时处理它(我想是个例外)。
或者,当然,更好的方法:修复你的代码以支持 IPv6。