InetAddress.getHostAddress() 返回無符號十進制/十六進制字符串形式的 IP 地址,支援 IPv4 與 IPv6,且**不觸發 DNS 查詢**(緩存結果)。本文講解用法、IPv6 環境配置、本機多 IP 獲取及常見陷阱。
public String getHostAddress()
特點:純本地操作,無網路開銷;返回格式遵循 RFC 5952 (IPv6 簡寫規範)。
Java 需作業系統支援 IPv6 協議棧才能解析/使用 IPv6 地址。
netsh interface ipv6 installnetsh interface ipv6 add address "本地連接" aa:bb::cc (需重啟生效)netsh interface ipv6 uninstall (需重啟)public class HostAddressDemo {
public static void main(String[] args) throws Exception {
// IPv4
System.out.println("IPv4 示例:");
System.out.println("1.2.3.4 -> " + InetAddress.getByName("1.2.3.4").getHostAddress());
System.out.println("www.ibm.com -> " + InetAddress.getByName("www.ibm.com").getHostAddress());
System.out.println("myuniverse(本機) -> " + InetAddress.getByName("myuniverse").getHostAddress());
// IPv6
System.out.println("\nIPv6 示例:");
System.out.println("abcd:123::22ff -> " + InetAddress.getByName("abcd:123::22ff").getHostAddress());
System.out.println("www.neu6.edu.cn -> " + InetAddress.getByName("www.neu6.edu.cn").getHostAddress());
// 本機所有 IP (IPv4 + IPv6)
System.out.println("\n本機所有 IP:");
for (InetAddress addr : InetAddress.getAllByName("myuniverse")) {
System.out.println(" " + addr.getHostAddress());
}
}
}
IPv4 示例:
1.2.3.4 -> 1.2.3.4
www.ibm.com -> 129.42.60.212
myuniverse(本機) -> 192.168.18.10
IPv6 示例:
abcd:123::22ff -> abcd:123:0:0:0:0:0:22ff
www.neu6.edu.cn -> 2001:da8:9000:b255:200:e8ff:feb0:5c5e
本機所有 IP:
192.168.18.10 (物理網卡)
192.168.83.1 (VMware VMnet1)
192.168.189.1 (VMware VMnet8)
193.10.10.10 (其他虛擬/配置 IP)
0:0:0:0:0:0:0:1 (IPv6 回環 ::1)
www.neu6.edu.cn (東北大學)
www6.whu.edu.cn (武漢大學)
www.jlu6.edu.cn (吉林大學)
www6.usst.edu.cn (上海理工大學)
www.fudan6.edu.cn (復旦大學)
訪問前必須確保本機已安裝 IPv6 協議,否則拋 UnknownHostException。
| 方法 | 返回 | 觸發 DNS | 用途 |
|---|---|---|---|
getHostAddress() | IP 字符串 | 否 | 顯示/存儲/傳輸 IP |
getHostName() | 主機名/域名 | 視創建方式而定 | 顯示/日誌/SSL 驗證主機名 |
getHostAddress() 獲取 IP 字符串,避免手動拼接 byte[]。getAllByName() 返回 IPv4+IPv6 混合列表,業務邏輯需按類型分流 (instanceof Inet4Address/Inet6Address)。