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地址对象,是网络通信的基础,在后面介绍中将大量使用该类