`

InetAddress类的一些方法

阅读更多

一、getHostName() 方法

    定义:public String getHostName()

    根据创建InetAddress对象的不同方式,getHostName的返回值是不同的。

 

    1. 用 getLocalHost() 方法创建的InetAddress的对象

 

        此时getHostName返回的是本机名

        InetAddress address=InetAddress.getLocalHost();

        System.out.println(address.getHostName());//返回本机名

 

    2. 用域名创建 InetAddress对象

 

        用域名作为getByName和getAllByName方法的参数得到的InetAddress对象,该对象会得到这个域名,当调用

        getHostName时,就无需再访问DNS服务器,而是直接将这个域名返回

InetAddress address=InetAddress.getByName("ZZQ");
System.out.println(address.getHostName());//不必再访问DNS服务器,直接返回域名

  

  3. 用IP地址 创建InetAddress对象

 

        使用IP地址创建InetAddress对象(getByName,getAllByName,getByAddress方法都可以通过IP地址创建InetAddress对象)时,并不需要访问DNS服务器。因此,通过DNS服务器查找域名的工作就由getHostName方法来完成。

        如果IP地址不存在或DNS服务器不允许进行IP地址和域名映射,就返回这个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地址

二、getCanonicalHostName()方法

    定义:public String getCanonicalHostName()

    该方法和getHostName方法一样,也是得到远程主机的域名。区别是,该方法得到的是主机名,getHostName得到的是主机别名。

    1. 使用 getLocalHost() 创建InetAddress对象

 

        此时getCanonicalHostName方法和getHostName方法得到的都是本机名

    2. 使用域名 创建InetAddress对象

 

        使用域名创建InetAddress对象后,getHostName方法不会访问DNS服务器

        但getCanonicalHostName方法就不一定了,这取决于DNS服务器如何解释主机名和主机别名

 

    3. 使用IP地址 创建InetAddress对象

 

        此时getCanonicalHostName方法和getHostName方法完全相同,返回的都是主机名,而不是主机别名。

 

        之所以要使用主机别名,是因为有时主机名可能比较复杂,如Oracle官方网站的主机名bigip-otn-

        portal.oracle.com,因此,为了使用户访问网站更方便,就增加了更简单的主机别名,如 www.oracle.com

三、getHostAddress()方法

    定义:public String getHostAddress()

    该方法用来得到主机的IP地址,这个IP地址可以是IPv4也可以是IPv6的

    无论InetAddress对象是用哪种方式创建,getHostAddress方法都不会访问DNS服务器。

public static void getHostAddressTest() throws UnknownHostException {
		// 输出IPv4地址
		InetAddress ipv4Address1 = InetAddress.getByName("1.2.3.4");
		System.out.println("ipv4Address1:" + ipv4Address1.getHostAddress());
		//ipv4Address1:1.2.3.4
		InetAddress ipv4Address2 = InetAddress.getByName("www.ibm.com");
		System.out.println("ipv4Address2:" + ipv4Address2.getHostAddress());
		//ipv4Address2:129.42.60.216
		InetAddress ipv4Address3 = InetAddress.getByName("ZZQ");
		System.out.println("ipv4Address3:" + ipv4Address3.getHostAddress());
		//ipv4Address3:192.168.1.105
		// 输出IPv6地址
		InetAddress ipv6Address1 = InetAddress.getByName("abcd:123::22ff");
		System.out.println("ipv6Address1:" + ipv6Address1.getHostAddress());
		//ipv6Address1:abcd:123:0:0:0:0:0:22ff
		InetAddress ipv6Address2 = InetAddress.getByName("www.neu6.edu.cn");
		System.out.println("ipv6Address2:" + ipv6Address2.getHostAddress());
		//ipv6Address2:2001:da8:9000:b255:210:5cff:fef5:ac49
		// 输出本机全部的IP地址
		InetAddress Addresses[] = InetAddress.getAllByName("ZZQ");
		for (InetAddress address : Addresses)
			System.out.println("本机地址:" + address.getHostAddress());
		//本机地址:192.168.1.105
		//本机地址:0.1.0.4
		//本机地址:0:0:0:0:0:0:0:1
	}

四、getAddress()方法

    定义:public byte[] getAddress()

    该方法和getHostAddress方法唯一区别是,getHostAddress返回字符形式的IP地址,getAddress返回byte数组形式的IP地址。

public static void getAddressTest() throws UnknownHostException {
		InetAddress address = InetAddress.getByName("www.csdn.net");
		byte ip[] = address.getAddress();
		for (byte ipSegment : ip)
			System.out.print(ipSegment + ".");
		System.out.println("");
		//-53.81.21.61
		/* 
		 * byte数组是有符号的。在Java中byte类型的取值范围是-128~127.
		 * 如果返回的IP地址的某个字节是大于127的整数,在byte数组中就是负数。
		 * 由于Java中没有无符号byte类型,因此,要想显示正常的IP地址,必须使用int或long类型。
		 */
		for (byte ipSegment : ip) {
			int newIPSegment = (ipSegment < 0) ? 256 + ipSegment : ipSegment;
			System.out.print(newIPSegment + ".");
		}
		//203.81.21.61
	}

  

   

分享到:
评论

相关推荐

    Java编程中利用InetAddress类确定特殊IP地址的方法

    主要介绍了Java编程中利用InetAddress类确定特殊IP地址的方法,InetAddress类是Java网络编程中一个相当实用的类,需要的朋友可以参考下

    Android开发之InetAddress基础入门简介与源码实例

    InetAddress类的对象用于IP地址和域名,该类提供以下方法: getByName(String s):获得一个InetAddress 类的对象,该对象中含有主机的IP地址和域名,该对象用如下格式表示它包含的信息:...

    JAVA网络编程

    Java网络编程基础 InetAddress类的使用.doc Java网络编程基础 ServerSocket类使用.doc 《JAVA编程规范》.doc Java基础 三步学会Java Socket编程(一) .doc Java基础 三步学会Java Socket编程(二) .doc Java基础 三步...

    java试卷及答案

    7 java图形类中不但提供了一些绘图方法 还可以装载 jpeg 和 gif 两种格式的图形文件 在APPLET程序中显示一图片文件需用到 getImage 和 drawImage 方法 8 java中 例外可以分为三大类: Error Exception ...

    java实验7 网络编程

    使用InetAddress类的方法获取www.nwsuaf.edu.cn的主机的IP地址;获取本地机的名称和IP地址。程序运行结果如图所示

    Express UDP 是基于 XDP Socket 实现的 UDP 通信软件库.rar

    1. 网络编程要素: 如何定位到网络上的一台或多台主机 IP地址和端口号 ...没有构造函数,只能通过静态方法返回对象 直接查看java文档,获取本机地址/域名地址等, 得到的返回值为一个对象,获取他们的信息

    java-socket

    一、几个重要的API: 1、InetAddress类 描述:该类在套接字编程中份演着目的地角色,通常作为参数传递给流套接字类和数据报套接字的构造方法或其它方法。

    Java网络编程(第三版)中文版.part11.rar

    InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 URL和URI 192 URL类 192 URLEncoder和URLDecoder类 216 URI类 222 代理 230 通过GET方法与服务器端...

    Java网络编程(第三版)高清中文版.part01.rar

    InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 URL和URI 192 URL类 192 URLEncoder和URLDecoder类 216 URI类 222 代理 230 通过GET方法与服务器端...

    Java网络编程(第三版)中文版.part06.rar

    InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 URL和URI 192 URL类 192 URLEncoder和URLDecoder类 216 URI类 222 代理 230 通过GET方法与服务器端...

    Java网络编程(第三版)中文版.part07.rar

    InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 URL和URI 192 URL类 192 URLEncoder和URLDecoder类 216 URI类 222 代理 230 通过GET方法与服务器端...

    Java网络编程(第三版)中文版.part09.rar

    InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 URL和URI 192 URL类 192 URLEncoder和URLDecoder类 216 URI类 222 代理 230 通过GET方法与服务器端...

    Java网络编程(第三版)中文版.part01.rar

    InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 URL和URI 192 URL类 192 URLEncoder和URLDecoder类 216 URI类 222 代理 230 通过GET方法与服务器端...

    Java网络编程(第三版)中文版.part03.rar

    InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 URL和URI 192 URL类 192 URLEncoder和URLDecoder类 216 URI类 222 代理 230 通过GET方法与服务器端...

    Java网络编程(第三版)中文版.part02.rar

    InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 URL和URI 192 URL类 192 URLEncoder和URLDecoder类 216 URI类 222 代理 230 通过GET方法与服务器端...

    Java网络编程(第三版)中文版.part04.rar

    InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 URL和URI 192 URL类 192 URLEncoder和URLDecoder类 216 URI类 222 代理 230 通过GET方法与服务器端...

    Java网络编程(第三版)中文版.part10.rar

    InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 URL和URI 192 URL类 192 URLEncoder和URLDecoder类 216 URI类 222 代理 230 通过GET方法与服务器端...

    Java网络编程(第三版)中文版.part13.rar

    InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 URL和URI 192 URL类 192 URLEncoder和URLDecoder类 216 URI类 222 代理 230 通过GET方法与服务器端...

    Java网络编程(第三版)中文版.part05.rar

    InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 URL和URI 192 URL类 192 URLEncoder和URLDecoder类 216 URI类 222 代理 230 通过GET方法与服务器端...

    Java网络编程(第三版)中文版.part12.rar

    InetAddress类 161 Inet4Address和Inet6Address 177 NetworkInterface类 178 一些有用的程序 181 第七章 URL和URI 192 URL类 192 URLEncoder和URLDecoder类 216 URI类 222 代理 230 通过GET方法与服务器端...

Global site tag (gtag.js) - Google Analytics