InetAddress
Java socket应用—通信
** InetAddress**
1、InetAddress 类用于标示网络上的硬件资源,标示互联网协议(IP)地址。
IP 地址是 IP 使用的 32 位或 128 位无符号数字,它是一种低级协议,UDP 和 TCP协议都是在它的基础上构建的。
2、InetAddress 类的几个常用方法:
- getHostName
public String getHostName()
获取此 IP 地址的主机名。如果此 InetAddress 是用主机名创建的,则记忆并返回主机名;否则,将执行反向名称查找并基于系统配置的名称查找服务返回结果。
返回:
此 IP 地址的主机名;如果安全检查不允许操作,则返回 IP 地址的文本表示形式。
- getAddress
public byte[] getAddress()
返回此 InetAddress 对象的原始 IP 地址。结果按网络字节顺序:地址的高位字节位于 getAddress()[0] 中。返回:此对象的原始 IP 地址。getHostAddresspublic String getHostAddress()
返回 IP 地址字符串(以文本表现形式)。
返回:
字符串格式的原始 IP 地址。
- getByAddresspublic
static InetAddress getByAddress(String host, byte[] addr)throws UnknownHostException
根据提供的主机名和 IP 地址创建 InetAddress。不检查名称服务的地址有效性。主机名可以是机器名(如 "java.sun.com"),也可以是其 IP 地址的文本表示形式。
也不在主机名上执行有效性检查。
如果 addr 指定 IPv4 地址,则返回 Inet4Address 的实例;否则将返回 Inet6Address 的实例。
IPv4 地址 byte 数组的长度必须为 4 个字节,IPv6 byte 数组的长度必须为 16 个字节
参数:
host - 指定主机
addr - 网络字节顺序的原始 IP 地址
返回:
根据原始 IP 地址创建的 InetAddress 对象。
- getByName
public static InetAddress getByName(String host) throws UnknownHostException
在给定主机名的情况下确定主机的 IP 地址。主机名可以是机器名(如 "java.sun.com"),也可以是其 IP 地址的文本表示形式。如果提供字面值 IP 地址,则仅检查地址格式的有效性。
如果主机为 null,则返回表示回送接口地址的 InetAddress。
参数:
host - 指定的主机,或 null。
返回:
给定主机名的 IP 地址。
- getByAddress
public static InetAddress getByAddress(byte[] addr) throws UnknownHostException
在给定原始 IP 地址的情况下,返回 InetAddress 对象。参数按网络字节顺序:地址的高位字节位于 getAddress()[0] 中。此方法不会阻塞,即不执行任何反向名称服务查找操作。
IPv4 地址 byte 数组的长度必须为 4 个字节,IPv6 byte 数组的长度必须为 16 个字节
参数:
addr - 网络字节顺序的原始 IP 地址
返回:
根据原始 IP 地址创建的 InetAddress 对象。
- getLocalHost
public static InetAddress getLocalHost() throws UnknownHostException
返回本地主机。如果有安全管理器,则使用本地主机名和 -1 作为参数来调用其 checkConnect 方法,以查看是否允许该操作。如果不允许该操作,则返回表示回送地址的 InetAddress。
返回:
本地主机的 IP 地址。
3. 示例代码:
public class Test {
public static void main(String[] args) throws UnknownHostException {
//获取本机的InetAddress实例
InetAddress address=InetAddress.getLocalHost();
//获取计算机名
System.out.println("计算机名:"+address.getHostName());
//获取IP地址
System.out.println("IP地址:"+address.getHostAddress());
//获取字节数组形式的IP地址
byte[] bytes=address.getAddress();
System.out.println("字节数组形式的IP:"+Arrays.toString(bytes));
//直接输出InetAddress对象
System.out.println(address);
InetAddress address2=InetAddress .getByName("PC201607091933");
System.out.println("获取计算机名:"+address2.getHostName());
System.out.println("获取IP地址:"+address2.getHostAddress());
}
}