TiG*_*iGz 11 java network-programming inet
下面是一些代码,用于确定应该在多宿主框上工作的本地主机名:
/**
* Work out the first local host name by iterating the network interfaces
*
* @return
* @throws SocketException
*/
private String findFirstLocalHostName() throws SocketException {
Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces();
while (ifaces.hasMoreElements()) {
NetworkInterface iface = ifaces.nextElement();
Enumeration<InetAddress> addresses = iface.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress add = addresses.nextElement();
if (!add.isLoopbackAddress() && add.isSiteLocalAddress()) {
return add.getHostName();
}
}
}
throw new RuntimeException("Failed to determine local hostname");
}
Run Code Online (Sandbox Code Playgroud)
对isSiteLocalAddress的调用是否会引入错误?我找不到有关此方法的任何有用信息,但我感觉它只与IP v 6有关并且已被弃用.
Joa*_*uer 15
该方法绝对不会被弃用,它绝对不仅仅用于IPv6.
在IPv4中,有3个网络地址范围是为站点本地地址定义的:10/8,172.16/12和192.168/16.
阅读Inet4Address.isSiteLocalAddress()表明,正是这3个网络的地址将返回true这些方法.
实际上,这会告诉您,您拥有的地址绝对不是公共地址(请注意,即使此方法返回false,地址仍可能不公开).