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

Java 網路程式設計精通指南(7):getHostAddress() — 獲取字符串形式 IP 地址 (IPv4/IPv6 雙棧)

     編輯:Java 相關知識

InetAddress.getHostAddress() 返回無符號十進制/十六進制字符串形式的 IP 地址,支援 IPv4 與 IPv6,且**不觸發 DNS 查詢**(緩存結果)。本文講解用法、IPv6 環境配置、本機多 IP 獲取及常見陷阱。

方法簽名

public String getHostAddress()

特點:純本地操作,無網路開銷;返回格式遵循 RFC 5952 (IPv6 簡寫規範)。

IPv6 運行環境準備 (Windows)

Java 需作業系統支援 IPv6 協議棧才能解析/使用 IPv6 地址。

  1. 圖形界面:控制面板 → 網路連接 → 本地連接屬性 → 安裝 → 協議 → 添加 → "Microsoft TCP/IP 版本 6"
  2. 命令行 (管理員):netsh interface ipv6 install
  3. 添加 IPv6 地址:netsh interface ipv6 add address "本地連接" aa:bb::cc (需重啟生效)
  4. 移除 IPv6:netsh interface ipv6 uninstall (需重啟)

代碼示例:解析並輸出 IPv4/IPv6/本機所有 IP

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)

常用 IPv6 測試域名 (教育網/骨幹網)

www.neu6.edu.cn   (東北大學)
www6.whu.edu.cn   (武漢大學)
www.jlu6.edu.cn   (吉林大學)
www6.usst.edu.cn  (上海理工大學)
www.fudan6.edu.cn (復旦大學)
訪問前必須確保本機已安裝 IPv6 協議,否則拋 UnknownHostException。

關鍵區別:getHostAddress() vs getHostName()

方法返回觸發 DNS用途
getHostAddress()IP 字符串否顯示/存儲/傳輸 IP
getHostName()主機名/域名視創建方式而定顯示/日誌/SSL 驗證主機名

實務建議

  • 優先使用 getHostAddress() 獲取 IP 字符串,避免手動拼接 byte[]。
  • 雙棧環境下,getAllByName() 返回 IPv4+IPv6 混合列表,業務邏輯需按類型分流 (instanceof Inet4Address/Inet6Address)。
  • IPv6 字符串已按規範簡寫 (壓縮 0 段、小寫十六進制),可直接用於配置、日誌、URL。
  • 若需標準化展示 (如固定長度、大寫),請自行格式化而非依賴此方法輸出。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved