首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實現域名與 IP 地址互轉:InetAddress 完整指南

     編輯:Java 相關知識

Java java.net.InetAddress 提供域名解析與本機地址獲取功能,本文涵蓋 DNS 基礎、IP 分類、核心 API、完整程式碼範例與網路可達性檢測。

一、DNS 與 IP 基礎

  • 域名:易記符號名 (如 www.example.com),層級結構。
  • IP 地址:32 位標識符 (IPv4),網絡號 + 主機號,唯一定位主機。
  • DNS:分佈式資料庫,將域名解析為 IP。
  • 路由:跨網絡通信需同時使用網絡號與主機號,由路由器轉發。

二、IP 分類 (IPv4)

類別網絡號範圍適用規模
A 類1~127大型網絡 (>65536 主機)
B 類128~191中型網絡 (256~65536 主機)
C 類192~223小型網絡 (<256 主機)
多播224~239組播通信

特殊值:0 表未知網絡/主機;255 表廣播。

三、核心 API

四、程式碼範例

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,部分防火牆封鎖,結果僅供參考。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方法說明
InetAddress.getLocalHost()獲取本機 InetAddress (含主機名 + IP)
getHostName()返回主機名
getAddress()返回 4 位元組陣列 (原始 IP)
InetAddress.getByName(host)根據域名/IP 字串解析
InetAddress.getAllByName(host)返回所有解析結果 (負載均衡場景)