InetAddress的一些应用
InetAddress是java_socket编程一个必不可少的类,此类表示互联网协议 (IP) 地址。
主机名解析
主机名到 IP 地址的 解析 通过使用本地机器配置信息和网络命名服务(如域名系统(Domain Name System,DNS)和网络信息服务(Network Information Service,NIS))来实现。要使用的特定命名服务默认情况下是本地机器配置的那个。对于任何主机名称,都返回其相应的 IP 地址。
反向名称解析 意味着对于任何 IP 地址,都返回与 IP 地址关联的主机。
InetAddress 类提供将主机名解析为其 IP 地址(或反之)的方法。
InetAddress 缓存
InetAddress 类具有一个缓存,用于存储成功及不成功的主机名解析。
默认情况下,当为了防止 DNS 哄骗攻击安装了安全管理器时,正主机名解析的结果会永远缓存。当未安装安全管理器时,默认行为将缓存一段有限(与实现相关)时间的条目。不成功主机名解析的结果缓存非常短的时间(10 秒)以提高性能。
如果不需要默认行为,则可以将 Java 安全属性设置为另外的 Time-to-live (TTL) 值来进行正缓存。类似地,系统管理员在需要时可以配置另外的负缓存 TTL 值。
两个 Java 安全属性控制着用于正负主机名解析缓存的 TTL 值:
networkaddress.cache.ttl
指示从名称服务进行成功名称查找的缓存策略。该值被指定为整数,指示缓存成功查找的秒数。默认设置将在某个特定于实现的时间内缓存。
值 -1 指示“永远缓存”。
networkaddress.cache.negative.ttl(默认值:10)
指示从名称服务进行不成功名称查找的缓存策略。该值被指定为整数,指示缓存不成功查找故障的秒数。
值 0 指示“永远不缓存”。值 -1 指示“永远缓存”。
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。 |
一些简单方法的使用
**获取主机名和ip地址
public class UseInetAddress {
public static void main(String[] args) throws UnknownHostException {
InetAddress inetAddress=InetAddress.getLocalHost();
System.out.println(inetAddress.getHostName());//获取主机名
System.out.println(" "+inetAddress.getHostAddress());//获取ip地址
}
}
输出
DESKTOP-S8QKVUA
192.168.0.187
**直接输出inetaddress
public class UseInetAddress {
public static void main(String[] args) throws UnknownHostException {
InetAddress inetAddress=InetAddress.getLocalHost();
System.out.println(inetAddress);
}
}
输出
DESKTOP-S8QKVUA/192.168.0.187
根据ip地址和主机名也能获取对象
public class UseInetAddress {
public static void main(String[] args) throws UnknownHostException {
InetAddress inetAddress2=InetAddress.getByName("192.168.0.187");
System.out.println(inetAddress2.getHostName());
}
}
输出
DESKTOP-S8QKVUA