Java网络编程从入门到精通(5):操纵InetAddress类的getHostNam[Java编程]
本文“Java网络编程从入门到精通(5):操纵InetAddress类的getHostNam[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
该办法可以得到远程主机的域名,也可以得到本机名.getHostName办法的定义以下:
public String getHostName()
下面是三种成立InetAddress对象的方法,在这三种方法中,getHostName返回的值是差别的.
1.利用getLocalHost办法成立InetAddress对象
假如InetAddress对象是用getLocalHost办法成立的,getHostName返回的是本机名.以下面的代码所示:
InetAddress address = InetAddress.getLocalHost();
System.out.println(address.getHostName()); // 输出本机名
2.利用域名成立InetAddress对象
用域名作为getByName和getAllByName办法的参数调用这两个办法后,系统会自动记着这个域名.当调用getHostName办法时,就无需再拜候DNS服务器,而是直接将这个域名返回.以下面的代码所示:
InetAddress address = InetAddress.getByName("www.oracle.com");
System.out.println(address.getHostName()); // 无需拜候DNS服务器,直接返回域名
3.利用IP地址成立InetAddress对象
利用IP地址成立InetAddress对象时(getByName、getAllByName和getByAddress办法都可以通过IP地址成立InetAddress对象),并不需求拜候DNS服务器.因此,通过DNS服务器查找域名的工作就由getHostName办法来完成.假如这个IP地址不存在或DNS服务器不答应举行IP地址和域名的映射,getHostName办法就直接返回这个IP地址.以下面的代码所示:
InetAddress address = InetAddress.getByName("141.146.8.66");
System.out.println(address.getHostName()); // 需求拜候DNS服务器才能得到域名
InetAddress address = InetAddress.getByName("1.2.3.4"); // IP地址不存在
System.out.println(address.getHostName()); // 直接返回IP地址
从上面的三种情形可以看出,只有通过利用IP地址成立的InetAddress对象调用getHostName办法时才拜候DNS服务器.在其他情形,getHostName办法并不会拜候DNS服务器,而是直接将域名或本机名返回.下面的代码演示了在差别情形下若何利用getHostName办法,并计算了各种情形所需的毫秒数.
package mynet;
import java.net.*;
public class DomainName
{
public static void main(String[] args) throws Exception
{
long time = 0;
// 得到本机名
InetAddress address1 = InetAddress.getLocalHost();
System.out.println("本机名: " + address1.getHostName());
// 直接返回域名
InetAddress address2 = InetAddress.getByName("www.oracle.com");
time = System.currentTimeMillis();
System.out.print("直接得到域名: " + address2.getHostName());
System.out.println(" 所用时间:"
+ String.valueOf(System.currentTimeMillis() - time) + " 毫秒");
// 通过DNS查找域名
InetAddress address3 = InetAddress.getByName("141.146.8.66");
System.out.println("address3: " + address3); // 域名为空
time = System.currentTimeMillis();
System.out.print("通过DNS查找域名: " + address3.getHostName());
System.out.println(" 所用时间:" + String.valueOf(System.currentTimeMillis() - time)+ " 毫秒");
System.out.println("address3: " + address3); // 同时输出域名和IP地址
}
}
运行后果:
本机名: ComputerName
直接得到域名: www.oracle.com 所用时间:0 毫秒
address3: /141.146.8.66
通过DNS查找域名: bigip-otn-portal.oracle.com 所用时间:92 毫秒
address3: bigip-otn-portal.oracle.com/141.146.8.66
从上面的运行后果可以看出,第一个毫秒数是0,而第二个毫秒数是92.这说时,利用域名成立的InetAddress对象在利用getHostName办法时并不拜候DNS服务器,而利用IP地址成立的InetAddress对象在利用getHostName办法时需求拜候DNS服务器.关于第三个毫秒数,大概多次运行DomainName后会越来越小,这是因为DNS服务器的缓存的来由.但普通这个数城市比0大.大概有很多人会问,第二行和第四行得到的域名怎么不一样,其实www.oracle.com和bigip-otn-portal.oracle.com都是oracle的域名,我们也可以通过http:// bigip-otn-portal.oracle.com来拜候oracle的官方网站.至于这两个域名有什么辨别,将在下面的文章中谈论.
以上是“Java网络编程从入门到精通(5):操纵InetAddress类的getHostNam[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |