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());
}
}