| 方法 | 說明 |
InetAddress.getLocalHost() | 獲取本機 InetAddress (含主機名 + IP) |
getHostName() | 返回主機名 |
getAddress() | 返回 4 位元組陣列 (原始 IP) |
InetAddress.getByName(host) | 根據域名/IP 字串解析 |
InetAddress.getAllByName(host) | 返回所有解析結果 (負載均衡場景) |
四、程式碼範例
1. 獲取本機名與 IP
InetAddress host = InetAddress.getLocalHost();
System.out.println("Host: " + host.getHostName());
byte[] ip = host.getAddress();
for (int i = 0; i < ip.length; i++) {
if (i > 0) System.out.print(".");
System.out.print(ip[i] & 0xFF); // 無符號轉換
}
System.out.println();
2. 域名解析為 IP (nslookup 效果)
public static void main(String[] args) throws UnknownHostException {
String host = args[0];
InetAddress addr = InetAddress.getByName(host);
byte[] ip = addr.getAddress();
for (int i = 0; i < ip.length; i++) {
if (i > 0) System.out.print(".");
System.out.print(ip[i] & 0xFF);
}
System.out.println();
}
3. 檢測遠程主機可達性
InetAddress addr = InetAddress.getByName("www.google.com");
boolean reachable = addr.isReachable(3000); // 3 秒超時
System.out.println("Reachable: " + reachable);
五、JDK 版本注意
JDK 1.0.2 getHostName() 有 Bug,1.1 beta 修復。現代 JDK (8/11/17+) 穩定可靠,支援 IPv6 (Inet6Address)。
六、實務建議
- 生產環境解析失敗需捕獲
UnknownHostException,提供降級策略 (如備用 IP)。
- 大量解析建議使用非阻塞 DNS 庫 (如 Netty
DnsNameResolver) 或本地快取。
isReachable() 依賴 ICMP,部分防火牆封鎖,結果僅供參考。
- 上一篇文章: JSF 技術詳解:元件化、可視化、MVC 的 Java Web 新標準
- 下一篇文章: Java RMI 通訊資料壓縮:自訂 Socket Factory 實現透明 Zip 傳輸
Copyright ©
程式碼之家 All Rights Reserved