1. java.net.InetAddress类的使用
1.1. 简介
IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础。InetAddress是Java对IP地址的封装,在java.net中有许多类都使用到了InetAddress,包括ServerSocket,Socket,DatagramSocket等等。
InetAddress的实例对象包含以数字形式保存的IP地址,同时还可能包含主机名(如果使用主机名来获取InetAddress的实例,或者使用数字来构造,并且启用了反向主机名解析的功能)。InetAddress类提供了将主机名解析为IP地址(或反之)的方法。
InetAddress对域名进行解析是使用本地机器配置或者网络命名服务(如域名系统(Domain Name System,DNS)和网络信息服务(Network Information Service,NIS))来实现。对于DNS来说,本地需要向DNS服务器发送查询的请求,然后服务器根据一系列的操作,返回对应的IP地址,为了提高效率,通常本地会缓存一些主机名与IP地址的映射,这样访问相同的地址,就不需要重复发送DNS请求了。在java.net.InetAddress类同样采用了这种策略。在默认情况下,会缓存一段有限时间的映射,对于主机名解析不成功的结果,会缓存非常短的时间(10秒)来提高性能。
InetAddress类中定义的主要方法,如下所示。
Ø boolean equals(Object obj):将此对象与指定对象比较。
Ø byte[] getAddress():返回此InetAddress对象的原始IP地址。
Ø static InetAddress[] getAllByName(String host):在给定主机名的情况下,根据系统上配置的名称,服务返回其IP地址所组成的数组。
Ø static InetAddress getByAddress(byte[] addr):在给定原始IP地址的情况下,返回InetAddress对象。
Ø static InetAddress getByAddress(String host, byte[] addr):根据提供的主机名和IP地址创建InetAddress。
Ø static InetAddress getByName(String host):在给定主机名的情况下确定主机的IP 地址。
Ø String getCanonicalHostName():获取此IP地址的完全限定域名。
Ø String getHostAddress():返回IP地址字符串(以文本表现形式)。
Ø String getHostName():获取此IP地址的主机名。
Ø static InetAddress getLocalHost():返回本地主机。
Ø int hashCode():返回此IP地址的哈希码。
Ø boolean isAnyLocalAddress():检查InetAddress是否是通配符地址的实用例行程序。
Ø boolean isLinkLocalAddress():检查InetAddress是否是链接本地地址的实用例行程序。
Ø boolean isLoopbackAddress():检查InetAddress是否是回送地址的实用例行程序。
Ø boolean isMCGlobal():检查多播地址是否具有全球范围的实用例行程序。
Ø boolean isMCLinkLocal():检查多播地址是否具有链接范围的实用例行程序。
Ø boolean isMCNodeLocal():检查多播地址是否具有节点范围的实用例行程序。
Ø boolean isMCOrgLocal():检查多播地址是否具有组织范围的实用例行程序。
Ø boolean isMCSiteLocal():检查多播地址是否具有站点范围的实用例行程序。
Ø boolean isMulticastAddress():检查InetAddress是否是IP多播地址的实用例行程序。
Ø boolean isReachable(int timeout):测试是否可以达到该地址。
Ø boolean isReachable(NetworkInterface netif, int ttl, int timeout):测试是否可以达到该 地址。
Ø boolean isSiteLocalAddress():检查InetAddress是否是站点本地地址的实用例行程序。
Ø String toString():将此IP地址转换为String。
1.2. InetAddress对象的获取
InetAddress的构造函数不是公开的(public),所以需要通过它提供的静态方法来获取,有以下的方法:
在这些静态方法中,最为常用的应该是getByName(String host)方法,只需要传入目标主机的名字,InetAddress会尝试做连接DNS服务器,并且获取IP地址的操作。代码片段如下,注意我们假设以下的代码,都是默认导入了java.net中的包,在程序的开头加上import java.net.*,否则需要指定类的全名java.net.InetAddress。
InetAddress address=InetAddress.getByName("www.baidu.com");
注意到这些方法可能会抛出的异常。如果安全管理器不允许访问DNS服务器或禁止网络连接,SecurityException会抛出,如果找不到对应主机的IP地址,或者发生其他网络I/O错误,这些方法会抛出UnknowHostException。所以需要写如下的代码:
try
{
InetAddress address=InetAddress.getByName("www.baidu.com");
System.out.println(address);
}
catch(UnknownHostException e)
{
e.printStackTrace();
}
下面是一则完整的例子:
package org.dakiler.javanet.chapter1;
import java.net.InetAddress;
/**
* this example is used to show how to get InetAddress instance
* @author Dakiler
*/
public class Example1
{
public static void main(String args[])throws Exception
{
InetAddress address=InetAddress.getByName("www.baidu.com");
System.out.println(address);
System.out.println("-----");
InetAddress[] addresses=InetAddress.getAllByName("www.baidu.com");
for(InetAddress addr:addresses)
{
System.out.println(addr);
}
}
}
运行结果如下:
www.baidu.com/119.75.213.61
-----
www.baidu.com/119.75.213.61
www.baidu.com/119.75.216.30
在这个例子中,我们使用到了getByName()以及getAllByName()两个方法,前者通过"www.baidu.com"来获取InetAddress的对象,并且输出到控制台。System.out.println(address); 默认调用了InetAddress.toString()方法,在结果中可以看到"www.baidu.com/119.75.213.61"的输出结果,其中119.75.213.61为百度网站的IP地址。
getAllByName()方法是根据主机名返回其可能的所有InetAddress对象,保存在一个数组中。在这个例子中,输出的结果中,www.baidu.com有两个ip地址分别为119.75.213.61以及119.75.216.30。
另外一个静态常用的静态方法是getLocalHost(),返回的是本地地址,如下例:
package org.dakiler.javanet.chapter1;
import java.net.InetAddress;
public class Example2
{
public static void main(String args[])throws Exception
{
InetAddress address=InetAddress.getLocalHost();
System.out.println(address);
}
}
这个例子首先是根据InetAddress.getLocalHost()方法获取本地IP地址,然后通过System.out.println()打印出来,结果如下:
dakiler/192.168.1.102
分享到:
相关推荐
InetAddress类中DNS解析后域名、IP清空 InetAddress类在进行域名解析后,会将域名和IP保存在私有成员变量map中,以便下次解析时可以快速返回结果。但是在某些场景下,这种机制会带来问题,例如在Android应用开发中...
### 知识点:网络编程中的InetAddress类使用方法 在网络编程中,`InetAddress` 类是Java标准库中用于处理互联网地址的核心类之一。它主要用于封装和操作IP地址,并提供了一系列方法来获取和处理IP地址相关的数据。...
在Java中,`InetAddress`和`Socket`是两个核心类,它们在处理网络连接和通信时起着至关重要的作用。这篇博客将深入探讨这两个类,并通过源码分析来加深理解。 `InetAddress`类代表了互联网上的一个IP地址,它可以是...
`InetAddress`是Java中的一个核心类,它在Android系统中同样适用,主要用于处理Internet上的主机名和它们对应的IP地址。这个类提供了将域名转换为IP地址,以及将IP地址转换为域名的功能。下面我们将深入探讨`...
### InetAddress和URL详解 #### 一、InetAddress概述 `InetAddress`类是Java网络编程中的基础类之一,主要用于描述网络上的指定主机信息。在Java的`java.net`包中,`InetAddress`用于处理IP地址相关的操作。由于`...
Java网络编程是开发分布式应用程序的关键部分,InetAddress和URL类在其中扮演了核心角色。这两个类都是Java.net包中的核心组件,它们提供了处理网络地址和定位网络资源的能力。 首先,让我们深入了解InetAddress类...
在Java编程语言中,`InetAddress`类是网络程序设计中的核心组件,它主要用于表示互联网协议(IP)地址。这个类及其相关方法提供了获取和解析主机名与IP地址的能力,无论是本地主机还是远程主机。在分布式系统中,`...
InetAddress类的代码,用来获取主机名和IP地址
1. `getByName(String s)`:此方法接受一个字符串参数,可以是域名或IP地址,然后返回一个InetAddress对象,其中包含了提供的字符串所代表的IP地址和域名信息。 2. `getHostName()`:返回InetAddress对象所包含的...
InetAddress域名解析
在Java编程语言中,`InetAddress`类是网络编程的核心组件之一,主要用于处理IP地址和主机名之间的转换。本示例3.1将深入探讨如何使用`InetAddress`类进行网络通信,包括获取本地主机信息、解析主机名到IP地址以及IP...
在Java编程中,`InetAddress`类是用来处理网络上的主机名和对应的IP地址的。当你通过`InetAddress`获取IP地址时,返回的结果通常是一个`InetAddress`对象,但如果你需要处理IP地址的原始字节表示,你可以调用`...
InetAddress的用法1 java视频 马克java社区 马克towin
InetAddress的用法2---马克-to-win Java视频 马克Java社区
在Android开发中,InetAddress是一个核心的类,用于处理IP地址和域名之间的转换。这个类在`java.net`包下,提供了多种方法来获取和操作网络上的主机信息。以下是关于InetAddress的一些关键知识点: 1. **获取IP地址...
clojure-inetaddress Clojure InetAddress。 java.net.InetAddress 类包装器。 用法 获取主机的 IP 地址,给定主机名: => (by-name "github.com") # 获取本地主机地址: => (localhost) # 检查地址地址是否可...
Java编程中的InetAddress类是进行网络编程的重要工具,主要用于封装IP地址和对应的域名信息。它提供了多种方法,帮助开发者处理和识别不同的IP地址类型。以下是对InetAddress类及其相关方法的详细说明: 1. **...
Java IP (InetAddress) Locator 是一个开源项目,主要用于通过IP地址获取对应的国家代码和语言信息。这个库在Java和ColdFusion环境中都能使用,极大地便利了开发者在处理网络数据时进行地理位置相关的分析和处理。其...
Java网络基本类 ---InetAddress类;import .*; public class IPAddressDemo { public static void main(String[] args) { try { InetAddress localAddr = InetAddress.getLocalHost();//获得本机InetAddress System....