17.2 Java的基本网络支持 17.2.1 使用InetAddress
17.2 Java的基本网络支持
Java为网络支持提供了java.net包,该包下的
URL和URLConnection等类提供了以编程方式访问Web服务的功能,- 而
URLDecoder和URLEncoder则提供了普通字符串和application/x-www-form-urlencoded MIME字符串相互转换的静态方法.
17.2.1 使用InetAddress
Java提供了InetAddress类来代表IP地址,InetAddress下还有两个子类:Inet4Address、Inet6Adress它们分别代表Internet Protocol version 4(IPv4)地址和Internet Protocol version 6(IP6)地址。
InetAddress类
获取InetAddress类对象
InetAddress类没有提供构造器,而是提供了如下两个静态方法来获取InetAddress实例
| 方法 | 描述 |
|---|---|
static InetAddress getByName(String host) |
根据主机获取对应的InetAddress对象 |
static InetAddress getByAddress(byte[] addr) |
根据原始IP地址来获取对应的InetAddress对象 |
除此之外,InetAddress类还提供了一个getLocalHost()方法来获取本机IP地址对应的InetAddress实例。
读取InetAddress对象的IP地址和主机名
InetAddress还提供了如下三个方法来获取InetAddress实例对应的IP地址和主机名。
| 方法 | 描述 |
|---|---|
String getCanonicalHostName() |
获取此IP地址的全限定域名。 |
String getHostAddress() |
返回该InetAddress实例对应的IP地址字符串(以字符串形式)。 |
String getHostName() |
获取此IP地址的主机名 |
判断IP地址是否可达
Inetaddress类还提供了一个isReachable()方法,用于测试是否可以到达该地址。该方法将尽最大努力试图到达主机,但防火墙和服务器配置可能阻塞请求,使得它在访问某些特定的端口时处于不可达状态。如果可以获得权限,典型的实现将使用ICMP ECHO REQUEST;否则它将试图在目标主机的端口7(Echo)上建立TCP连接。
程序示例
下面程序测试了InetAddress类的简单用法。
1 | import java.net.*; |
上面程序简单地示范了Inetaddress类的几个方法的用法,InetAddress类本身并没有提供太多功能,它代表一个IP地址对象,是网络通信的基础,在后面介绍中将大量使用该类