首先,我们先来看问题
import java.net.*;
public class person {
public static void main(String args[]) {
try{ InetAddress address_1=InetAddress.getByName("www.baidu.com");
System.out.println(address_1);
InetAddress address_2=InetAddress.getByName("14.215.177.39");
System.out.println(address_2.getHostName());
}
catch(UnknownHostException e) {
System.out.println("无法找到 www.sina.com.cn");
}
}
}
我们的想法都是应该输出:
www.baidu.com/14.215.177.39
www.baidu.com/14.215.177.39
但实际情况却是:
www.baidu.com/14.215.177.39
14.215.177.39
这里主要有2种情况会导致无法正确输出结果
一: 超时, 如果程序不可以立即获取主机名,会继续尝试一段时间,若干时间后,标志为失败,然后就返回IP地址的文本表示形式。
二:此 IP 地址的主机名;如果安全检查不允许操作,则返回 IP 地址的文本表示形式。现在大部分都不允许通过IP地址返回获得主机域名
还有getHostName()函数也是这样,本应该获取对象所含的域名,但由于上述原因,往往返回的却是IP地址的文本表示形式了。