JAVA中InetAddress的一些应用

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的方法

类型方法
booleanequals(Object obj) 将此对象与指定对象比较。
byte[]getAddress() 返回此 InetAddress 对象的原始 IP 地址。
static InetAddress[]getAllByName(String host) 在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
static InetAddressgetByAddress(byte[] addr) 在给定原始 IP 地址的情况下,返回 InetAddress 对象。
static InetAddressgetByAddress(String host, byte[] addr) 根据提供的主机名和 IP 地址创建 InetAddress。
static InetAddressgetByName(String host) 在给定主机名的情况下确定主机的 IP 地址。
StringgetCanonicalHostName() 获取此 IP 地址的完全限定域名。
StringgetHostAddress() 返回 IP 地址字符串(以文本表现形式)。
StringgetHostName() 获取此 IP 地址的主机名。
staticInetAddress getLocalHost() 返回本地主机。
inthashCode() 返回此 IP 地址的哈希码。
booleanisAnyLocalAddress() 检查 InetAddress 是否是通配符地址的实用例行程序。
booleanisLinkLocalAddress() 检查 InetAddress 是否是链接本地地址的实用例行程序。
booleanisLoopbackAddress() 检查 InetAddress 是否是回送地址的实用例行程序。
booleanisMCGlobal() 检查多播地址是否具有全局域的实用例行程序。
booleanisMCLinkLocal() 检查多播地址是否具有链接范围的实用例行程序。
booleanisMCNodeLocal() 检查多播地址是否具有节点范围的实用例行程序。
booleanisMCOrgLocal() 检查多播地址是否具有组织范围的实用例行程序。
booleanisMCSiteLocal() 检查多播地址是否具有站点范围的实用例行程序。
booleanisMulticastAddress() 检查 InetAddress 是否是 IP 多播地址的实用例行程序。
booleanisReachable(int timeout) 测试是否可以达到该地址。
booleanisReachable(NetworkInterface netif, int ttl, int timeout) 测试是否可以达到该地址。
booleanisSiteLocalAddress() 检查 InetAddress 是否是站点本地地址的实用例行程序。
StringtoString() 将此 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值