该方法可以得到远程主机的域名也可以得到本机名getHostName方法的定义如下
publicStringgetHostName()
下面是三种创建InetAddress对象的方式在这三种方式中getHostName返回的值是不同的
使用getLocalHost方法创建InetAddress对象
如果InetAddress对象是用getLocalHost方法创建的getHostName返回的是本机名如下面的代码所示
InetAddressaddress=InetAddressgetLocalHost();
Systemoutprintln(addressgetHostName());//输出本机名
使用域名创建InetAddress对象
用域名作为getByName和getAllByName方法的参数调用这两个方法后系统会自动记住这个域名当调用getHostName方法时就无需再访问DNS服务器而是直接将这个域名返回如下面的代码所示
InetAddressaddress=InetAddressgetByName();
Systemoutprintln(addressgetHostName());//无需访问DNS服务器直接返回域名
使用IP地址创建InetAddress对象
使用IP地址创建InetAddress对象时(getByNamegetAllByName和getByAddress方法都可以通过IP地址创建InetAddress对象)并不需要访问DNS服务器因此通过DNS服务器查找域名的工作就由getHostName方法来完成如果这个IP地址不存在或DNS服务器不允许进行IP地址和域名的映射getHostName方法就直接返回这个IP地址如下面的代码所示
InetAddressaddress=InetAddressgetByName();
Systemoutprintln(addressgetHostName());//需要访问DNS服务器才能得到域名
InetAddressaddress=InetAddressgetByName();//IP地址不存在
Systemoutprintln(addressgetHostName());//直接返回IP地址
从上面的三种情况可以看出只有通过使用IP地址创建的InetAddress对象调用getHostName方法时才访问DNS服务器在其他情况getHostName方法并不会访问DNS服务器而是直接将域名或本机名返回下面的代码演示了在不同情况下如何使用getHostName方法并计算了各种情况所需的毫秒数
package mynet;
import*;
publicclass DomainName
{
publicstaticvoidmain(String[]args)throwsException
{
longtime=;
//得到本机名
InetAddressaddress=InetAddressgetLocalHost();
Systemoutprintln(本机名+addressgetHostName());
//直接返回域名
InetAddressaddress=InetAddressgetByName();
time=SystemcurrentTimeMillis();
Systemoutprint(直接得到域名+addressgetHostName());
Systemoutprintln(所用时间
+StringvalueOf(SystemcurrentTimeMillis()time)+毫秒);
//通过DNS查找域名
InetAddressaddress=InetAddressgetByName();
Systemoutprintln(address:+address);//域名为空
time=SystemcurrentTimeMillis();
Systemoutprint(通过DNS查找域名+addressgetHostName());
Systemoutprintln(所用时间 +StringvalueOf(SystemcurrentTimeMillis()time)+毫秒);
Systemoutprintln(address:+address);//同时输出域名和IP地址
}
}
运行结果
本机名ComputerName
直接得到域名所用时间毫秒
address:/
通过DNS查找域名bigipo所用时间毫秒
address:bigipo/
从上面的运行结果可以看出第一个毫秒数是而第二个毫秒数是这说时使用域名创建的InetAddress对象在使用getHostName方法时并不访问DNS服务器而使用IP地址创建的InetAddress对象在使用getHostName方法时需要访问DNS服务器对于第三个毫秒数可能多次运行DomainName后会越来越小这是因为DNS服务器的缓存的缘故但一般这个数都会比大也许有很多人会问第二行和第四行得到的域名怎么不一样其实和bigipo都是oracle的域名我们也可以通过来访问oracle的官方网站至于这两个域名有什么区别将在下面的文章中讨论