`

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类与URL类

    下面是一些InetAddress类的关键方法: 1. `getLocalHost()`: 返回本地主机的InetAddress对象。 2. `getByName(String host)`: 根据主机名返回对应的InetAddress对象。 3. `getHostAddress()`: 获取此InetAddress的IP...

    InetAddress 类中dns解析后域名、ip清空

    解决这个问题的方法是,使用反射技术来清空InetAddress类中的私有成员变量map。在Android系统中,InetAddress类的私有成员变量map的存储位置在不同版本中有所不同。在Android 4.0以下的版本中,域名和IP键值对存放在...

    Java中的IP地址和InetAddress类使用详解

    在Java编程中,了解和使用IP地址以及InetAddress类是非常基础且重要的。IP地址是互联网上每台设备的唯一标识,它由32位二进制数字组成,通常以四段十进制的形式表示。在实际使用中,我们更习惯于使用域名,如...

    网络编程 InetAddress 的使用

    ### 知识点:网络编程中的InetAddress类使用方法 在网络编程中,`InetAddress` 类是Java标准库中用于处理互联网地址的核心类之一。它主要用于封装和操作IP地址,并提供了一系列方法来获取和处理IP地址相关的数据。...

    InetAddress源码

    `InetAddress`类提供了多种静态方法,如`getLocalHost()`,用于获取本地主机的IP地址。这个方法会返回一个`InetAddress`对象,代表运行该Java程序的机器的网络接口。如果主机有多个网络接口或IP地址,`getLocalHost...

    InetAddress和URL

    由于`InetAddress`类没有提供公共的构造方法,因此无法直接创建它的实例。用户需要通过类提供的静态方法来获取`InetAddress`对象。 #### 二、InetAddress的主要功能与使用 ##### 1. 获取`InetAddress`实例 - **...

    域名转IP(InetAddress)

    以下是一些基本的`InetAddress`使用方法: 1. **获取IP地址**: 使用`InetAddress.getByName(String host)`方法,传入一个域名或IP地址字符串,返回对应的`InetAddress`对象。例如: ```java String domain = ...

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

    以下是对InetAddress类及其相关方法的详细说明: 1. **InetAddress类的用途**: InetAddress类在Java中扮演着核心角色,它使得开发者可以通过主机名或IP地址获取网络节点的信息。它隐藏了IP地址的数字形式,使得...

    java 网络协议(一)InetAddress和Socket(含源码)

    在Java中,`InetAddress`和`Socket`是两个核心类,它们在处理网络连接和通信时起着至关重要的作用。这篇博客将深入探讨这两个类,并通过源码分析来加深理解。 `InetAddress`类代表了互联网上的一个IP地址,它可以是...

    示例3.1 使用InetAddress

    此外,`InetAddress`还提供了一些其他有用的方法,如判断IP地址是否为回环地址(localhost)的`isLoopbackAddress()`,检查是否为链接本地或广播地址的`isLinkLocalAddress()`和`isMulticastAddress()`,以及获取IP...

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

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

    java实验7 网络编程

    InetAddress类提供了多种方法来获取主机的IP地址和主机名称,例如: * InetAddress.getByName(String host):获取指定主机的InetAddress对象。 * InetAddress.getLocalHost():获取本地机的InetAddress对象。 * ...

    java获取内网的所有IP地址.doc

    该方法使用了 Java 的 InetAddress 类和线程机制来实现对局域网的 IP 地址的遍历和 Ping 操作。 知识点: 1. InetAddress 类:Java 中的 InetAddress 类用于表示 IP 地址。可以使用 InetAddress.getLocalHost() ...

    Java软件开发实战 Java基础与案例开发详解 19-3 lnetAddress类 共6页.pdf

    - **19.3 InetAddress类**:这部分着重讲解了`InetAddress`类的功能及使用方法,它是Java中用于处理IP地址的一个重要类。 ### 3. InetAddress类详解 - **InetAddress类简介**:`InetAddress`类用于封装IP地址,使...

    java期末考试试题及答案-彩色版.pdf

    * InetAddress类:InetAddress类的使用、InetAddress类的方法和属性 * URL和URLConnection类:URL和URLConnection类的使用、URL和URLConnection类的方法和属性 这些知识点涵盖了Java编程语言的基础知识、对象...

    《CP程序设计基础》PPT课件.ppt

    《CP程序设计基础》PPT课件中主要介绍了TCP程序设计基础的相关知识,包括InetAddress类、ServerSocket类和TCP网络程序设计。 一、InetAddress类 InetAddress类是java.net包中的一员,主要用于处理与IP地址相关的...

    工具类-获取访问ip地址工具类,自用留存

    1. **InetAddress类**:Java的`java.net.InetAddress`类是处理IP地址的核心类,它提供了获取主机名、IP地址以及相关操作的方法。例如,`getLocalHost()`可以获取本地主机的InetAddress对象,而`getHostAddress()`则...

    Java网络编程基础.doc

    理解并熟练运用InetAddress类及其相关方法是进行Java网络编程的基础,它使得开发者能够轻松地处理网络通信中的IP地址和主机名转换问题。在更复杂的网络应用中,还可以结合Socket类和ServerSocket类来实现客户端-...

    Java输出通过InetAddress获得的IP地址数组详细解析

    在Java编程中,`InetAddress`类是用来处理网络上的主机名和对应的IP地址的。当你通过`InetAddress`获取IP地址时,返回的结果通常是一个`InetAddress`对象,但如果你需要处理IP地址的原始字节表示,你可以调用`...

Global site tag (gtag.js) - Google Analytics