JavaTM 2 Platform
Standard Ed. 6

java.net
類別 InetAddress

java.lang.Object
  繼承者 java.net.InetAddress
所有已實作的介面:
Serializable
直接已知子類別:
Inet4Address, Inet6Address

public class InetAddress
extends Object
implements Serializable

此類別表示網際網路協議 (IP) 位址。

IP 位址是 IP 使用的 32 位或 128 位無符號數字,它是一種低層級協議,UDP 和 TCP 協議都是在它的基礎上建構的。IP 位址的體系結構是由 RFC 790:Assigned Numbers RFC 1918:Address Allocation for Private InternetsRFC 2365:Administratively Scoped IP MulticastRFC 2373:IP Version 6 Addressing Architecture 定義的。InetAddress 的實例包含 IP 位址,還可能包含相應的主機名(取決於它是否用主機名建構或者是否已執行反向主機名解析)。

位址型別

單播 單個介面的標識符。發送到單播位址的資料封包被交付給由該位址標識的介面。

多點傳送位址:也稱為 anylocal 位址或通配符位址。一定不能將其分派給任何節點。它指示缺少位址。它的一個使用範例是可以作為綁定的目標,這允許伺服器在伺服器主機有多個介面的情況下接收任何介面上的客戶端連接。

未指定 位址一定不能用作 IP 資料封包的目標位址。

回送 位址:它是分派給回送介面的位址。發送到此 IP 位址的任何內容都將返回並作為本地主機上的 IP 輸入。此位址常常在測試客戶機時使用。

多點傳送 一組介面(通常屬於不同的節點)的標識符。發送到多點傳送位址的資料封包被交付給由該位址標識的所有介面。

IP 位址範圍

連接本地 位址設計用於在單個連接上尋址以解決諸如自動位址配置、鄰居發現 (neighbor discovery) 或沒有路由器時的問題。

站點本地 位址設計用於在不需要全體前綴時站點內部尋址。

全體 位址在 Internet 中是唯一的。

IP 位址的文本表示形式

IP 位址的文本表示形式是特定於位址系列的。

有關 IPv4 位址格式,請參閱 Inet4Address#format,有關 IPv6 位址格式,請參閱 Inet6Address#format

主機名解析

主機名到 IP 位址的解析 通過使用本地機器配置資訊和網路命名服務(如域名系統(Domain Name System,DNS)和網路資訊服務(Network Information Service,NIS))來實作。要使用的特定命名服務預設情況下是本地機器配置的那個。對於任何主機名稱,都返回其相應的 IP 位址。

反向名稱解析 意味著對於任何 IP 位址,都返回與 IP 位址關聯的主機。

InetAddress 類別提供將主機名解析為其 IP 位址(或反之)的方法。

InetAddress 快取記憶體

InetAddress 類別具有一個快取記憶體,用於存儲成功及不成功的主機名解析。

預設情況下,當為了防止 DNS 哄騙攻擊安裝了安全管理器時,正主機名解析的結果會永遠快取記憶體。當未安裝安全管理器時,預設行為將快取記憶體一段有限(與實作相關)時間的條目。不成功主機名解析的結果快取記憶體非常短的時間(10 秒)以提高性能。

如果不需要預設行為,則可以將 Java 安全屬性設置為另外的 Time-to-live (TTL) 值來進行正快取記憶體。類似地,系統管理員在需要時可以配置另外的負快取記憶體 TTL 值。

兩個 Java 安全屬性控制著用於正負主機名解析快取記憶體的 TTL 值:

networkaddress.cache.ttl
指示從名稱服務進行成功名稱尋找的快取記憶體策略。該值被指定為整數,指示快取記憶體成功尋找的秒數。預設設置將在某個特定於實作的時間內快取記憶體。

值 -1 指示“永遠快取記憶體”。

networkaddress.cache.negative.ttl(預設值:10)
指示從名稱服務進行不成功名稱尋找的快取記憶體策略。該值被指定為整數,指示快取記憶體不成功尋找故障的秒數。

值 0 指示“永遠不快取記憶體”。值 -1 指示“永遠快取記憶體”。

從以下版本開始:
JDK1.0
另請參見:
getByAddress(byte[]), getByAddress(java.lang.String, byte[]), getAllByName(java.lang.String), getByName(java.lang.String), getLocalHost(), 序列化表格

方法摘要
 boolean equals(Object obj)
          將此物件與指定物件比較。
 byte[] getAddress()
          返回此 InetAddress 物件的原始 IP 位址。
static InetAddress[] getAllByName(String host)
          在給定主機名的情況下,根據系統上配置的名稱服務返回其 IP 位址所組成的陣列。
static InetAddress getByAddress(byte[] addr)
          在給定原始 IP 位址的情況下,返回 InetAddress 物件。
static InetAddress getByAddress(String host, byte[] addr)
          根據提供的主機名和 IP 位址創建 InetAddress。
static InetAddress getByName(String host)
          在給定主機名的情況下確定主機的 IP 位址。
 String getCanonicalHostName()
          獲取此 IP 位址的完全限定域名。
 String getHostAddress()
          返回 IP 位址字元串(以文本表現形式)。
 String getHostName()
          獲取此 IP 位址的主機名。
static InetAddress getLocalHost()
          返回本地主機。
 int hashCode()
          返回此 IP 位址的雜湊碼。
 boolean isAnyLocalAddress()
          檢查 InetAddress 是否是通配符位址的實用例行程序。
 boolean isLinkLocalAddress()
          檢查 InetAddress 是否是連接本地位址的實用例行程序。
 boolean isLoopbackAddress()
          檢查 InetAddress 是否是回送位址的實用例行程序。
 boolean isMCGlobal()
          檢查多點傳送位址是否具有全體域的實用例行程序。
 boolean isMCLinkLocal()
          檢查多點傳送位址是否具有連接範圍的實用例行程序。
 boolean isMCNodeLocal()
          檢查多點傳送位址是否具有節點範圍的實用例行程序。
 boolean isMCOrgLocal()
          檢查多點傳送位址是否具有組織範圍的實用例行程序。
 boolean isMCSiteLocal()
          檢查多點傳送位址是否具有站點範圍的實用例行程序。
 boolean isMulticastAddress()
          檢查 InetAddress 是否是 IP 多點傳送位址的實用例行程序。
 boolean isReachable(int timeout)
          測試是否可以達到該位址。
 boolean isReachable(NetworkInterface netif, int ttl, int timeout)
          測試是否可以達到該位址。
 boolean isSiteLocalAddress()
          檢查 InetAddress 是否是站點本地位址的實用例行程序。
 String toString()
          將此 IP 位址轉換為 String
 
從類別 java.lang.Object 繼承的方法
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

方法詳細資訊

isMulticastAddress

public boolean isMulticastAddress()
檢查 InetAddress 是否是 IP 多點傳送位址的實用例行程序。

返回:
指示 InetAddress 是否是 IP 多點傳送位址的 boolean
從以下版本開始:
JDK1.1

isAnyLocalAddress

public boolean isAnyLocalAddress()
檢查 InetAddress 是否是通配符位址的實用例行程序。

返回:
指示 Inetaddress 是否是通配符位址的 boolean
從以下版本開始:
1.4

isLoopbackAddress

public boolean isLoopbackAddress()
檢查 InetAddress 是否是回送位址的實用例行程序。

返回:
指示 InetAddress 是否是回送位址的 boolean 值;否則返回 false。
從以下版本開始:
1.4

isLinkLocalAddress

public boolean isLinkLocalAddress()
檢查 InetAddress 是否是連接本地位址的實用例行程序。

返回:
指示 InetAddress 是否是本地連接位址的 boolean 值;如果位址不是連接本地單播位址,則返回 false。
從以下版本開始:
1.4

isSiteLocalAddress

public boolean isSiteLocalAddress()
檢查 InetAddress 是否是站點本地位址的實用例行程序。

返回:
指示 InetAddress 是否是站點本地位址的 boolean 值;如果位址不是站點本地單播位址,則返回 false。
從以下版本開始:
1.4

isMCGlobal

public boolean isMCGlobal()
檢查多點傳送位址是否具有全體域的實用例行程序。

返回:
指示位址是否是全體域多點傳送位址的 boolean 值;如果它不是全體域或多點傳送位址,則返回 false
從以下版本開始:
1.4

isMCNodeLocal

public boolean isMCNodeLocal()
檢查多點傳送位址是否具有節點範圍的實用例行程序。

返回:
指示位址是否是節點本地範圍多點傳送位址的 boolean 值;如果它不是節點本地範圍或多點傳送位址,則返回 false
從以下版本開始:
1.4

isMCLinkLocal

public boolean isMCLinkLocal()
檢查多點傳送位址是否具有連接範圍的實用例行程序。

返回:
指示位址是否是連接本地範圍多點傳送位址的 boolean 值;如果它不是連接本地範圍或多點傳送位址,則返回 false
從以下版本開始:
1.4

isMCSiteLocal

public boolean isMCSiteLocal()
檢查多點傳送位址是否具有站點範圍的實用例行程序。

返回:
指示位址是否是站點本地範圍多點傳送位址的 boolean;如果它不是站點本地範圍或多點傳送位址,則返回 false
從以下版本開始:
1.4

isMCOrgLocal

public boolean isMCOrgLocal()
檢查多點傳送位址是否具有組織範圍的實用例行程序。

返回:
指示位址是否是組織本地範圍多點傳送位址的 boolean 值;如果它不是組織本地範圍或多點傳送位址,則返回 false
從以下版本開始:
1.4

isReachable

public boolean isReachable(int timeout)
                    throws IOException
測試是否可以達到該位址。實作盡最大努力試圖到達主機,但防火牆和伺服器配置可能阻塞請求,使其在某些特定的埠號可以存取時處於不可到達狀態。如果可以獲得權限,則典型實作將使用 ICMP ECHO REQUEST;否則它將試圖在目標主機的埠號 7 (Echo) 上建立 TCP 連接。

逾時值(以毫秒為單位)指示嘗試應該使用的最大時間量。如果在獲取應答前操作逾時了,則視為主機不可到達。負值將導致拋出 IllegalArgumentException。

參數:
timeout - 調用中止前的時間(以毫秒為單位)
返回:
指示位址是否可到達的 boolean 值。
拋出:
IOException - 如果發生網路錯誤
IllegalArgumentException - 如果 timeout 為負。
從以下版本開始:
1.5

isReachable

public boolean isReachable(NetworkInterface netif,
                           int ttl,
                           int timeout)
                    throws IOException
測試是否可以達到該位址。實作盡最大努力試圖到達主機,但防火牆和伺服器配置可能阻塞請求,使其在某些特定的埠號可以存取時處於不可到達狀態。如果可以獲得權限,則典型實作將使用 ICMP ECHO REQUEST;否則它將試圖在目標主機的埠號 7 (Echo) 上建立 TCP 連接。

network interfacettl 參數允許調用方指定測試將遍歷的網路介面和資料封包將遍歷的最大跳數。ttl 為負值將導致拋出 IllegalArgumentException。

逾時值(以毫秒為單位)指示嘗試應該使用的最大時間量。如果在獲取應答前操作逾時了,則視為主機不可到達。負值將導致拋出 IllegalArgumentException。

參數:
netif - 將用於完成測試的 NetworkInterface;或者用於任何介面的 null
ttl - 要嘗試的最大跳數或預設值 0
timeout - 調用中止前的時間(以毫秒為單位)
返回:
指示位址是否可到達的 boolean 值。
拋出:
IllegalArgumentException - 如果 timeoutttl 為負。
IOException - 如果發生網路錯誤
從以下版本開始:
1.5

getHostName

public String getHostName()
獲取此 IP 位址的主機名。

如果此 InetAddress 是用主機名創建的,則記憶並返回主機名;否則,將執行反向名稱尋找並基於系統配置的名稱尋找服務返回結果。如果需要尋找名稱服務,則調用 getCanonicalHostName

如果有安全管理器,則首先使用主機名和 -1 作為參數來調用其 checkConnect 方法,以查看是否允許該操作。如果不允許該操作,則其返回 IP 位址的文本表示形式。

返回:
此 IP 位址的主機名;如果安全檢查不允許操作,則返回 IP 位址的文本表示形式。
另請參見:
getCanonicalHostName(), SecurityManager.checkConnect(java.lang.String, int)

getCanonicalHostName

public String getCanonicalHostName()
獲取此 IP 位址的完全限定域名。最大努力方法,意味著根據底層系統配置可能不能返回 FQDN。

如果有安全管理器,則此方法首先使用主機名和 -1 作為參數調用其 checkConnect 方法,來查看是否允許調用程式碼知道此 IP 位址的主機名(即是否允許連接到該主機)。如果不允許該操作,則其返回 IP 位址的文本表示形式。

返回:
此 IP 位址的安全限定域名;如果安全檢查不允許操作,則返回 IP 位址的文本表示形式。
從以下版本開始:
1.4
另請參見:
SecurityManager.checkConnect(java.lang.String, int)

getAddress

public byte[] getAddress()
返回此 InetAddress 物件的原始 IP 位址。結果按網路位元組順序:位址的高位位元組位於 getAddress()[0] 中。

返回:
此物件的原始 IP 位址。

getHostAddress

public String getHostAddress()
返回 IP 位址字元串(以文本表現形式)。

返回:
字元串格式的原始 IP 位址。
從以下版本開始:
JDK1.0.2

hashCode

public int hashCode()
返回此 IP 位址的雜湊碼。

覆寫:
類別 Object 中的 hashCode
返回:
此 IP 位址的雜湊碼值。
另請參見:
Object.equals(java.lang.Object), Hashtable

equals

public boolean equals(Object obj)
將此物件與指定物件比較。當且僅當參數不為 null,並且它表示與此物件相同的 IP 位址時,結果才為 true

如果 getAddress 對兩個 InetAddress 返回的 byte 陣列長度相同並且 byte 陣列的每個陣列元素也都相同,則這兩個 InetAddress 的實例表示相同的 IP 位址。

覆寫:
類別 Object 中的 equals
參數:
obj - 要與之比較的物件。
返回:
如果物件相同,則返回 true;否則,返回 false
另請參見:
getAddress()

toString

public String toString()
將此 IP 位址轉換為 String。返回的字元串具有以下形式:主機名/文字值 IP 位址。 如果主機名是未解析的,則不執行反向名稱服務尋找。主機名部分將由一個空字元串表示。

覆寫:
類別 Object 中的 toString
返回:
此 IP 位址的字元串表示形式。

getByAddress

public 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 物件。
拋出:
UnknownHostException - 如果 IP 位址的長度非法
從以下版本開始:
1.4

getByName

public static InetAddress getByName(String host)
                             throws UnknownHostException
在給定主機名的情況下確定主機的 IP 位址。

主機名可以是機器名(如 "java.sun.com"),也可以是其 IP 位址的文本表示形式。如果提供文字值 IP 位址,則僅檢查位址格式的有效性。

對於以文字值 IPv6 位址指定的 host,在 RFC 2732 中定義的形式或在 RFC 2373 中定義的文字值 IPv6 位址格式都可以接受。IPv6 範圍位址也受支持。有關 IPv6 範圍位址的描述,請參見這裡

如果主機為 null,則返回表示回送介面位址的 InetAddress。請參閱 RFC 3330 的第 2 節和 RFC 2373 的第 2.5.3 節。

參數:
host - 指定的主機,或 null
返回:
給定主機名的 IP 位址。
拋出:
UnknownHostException - 如果找不到 host 的 IP 位址,或者 scope_id 是為全體 IPv6 位址指定的。
SecurityException - 如果安全管理器存在並且其 checkConnect 方法不允許進行該操作

getAllByName

public static InetAddress[] getAllByName(String host)
                                  throws UnknownHostException
在給定主機名的情況下,根據系統上配置的名稱服務返回其 IP 位址所組成的陣列。

主機名可以是機器名(如 "java.sun.com"),也可以是其 IP 位址的文本表示形式。如果提供文字值 IP 位址,則僅檢查位址格式的有效性。

對於以文字值 IPv6 位址 指定的 host,在 RFC 2732 中定義的形式或在 RFC 2373 中定義的文字值 IPv6 位址格式都可以接受。文字值 IPv6 位址還可以通過追加範圍時區標識符或 scope_id 來限定。scope_id 的語法和用法在這裡描述。

如果主機為 null,則返回表示回送介面位址的 InetAddress。請參閱 RFC 3330 的第 2 節和 RFC 2373 的第 2.5.3 節。

如果有安全管理器,並且 host 非 null,host.length() 不等於零,則使用主機名和 -1 作為參數調用安全管理器的 checkConnect 方法,來查看是否允許該操作。

參數:
host - 主機名,或 null
返回:
給定主機名的所有 IP 位址所組成的陣列。
拋出:
UnknownHostException - 如果找不到 host 的 IP 位址,或者 scope_id 是為全體 IPv6 位址指定的。
SecurityException - 如果安全管理器存在並且其 checkConnect 方法不允許進行該操作。
另請參見:
SecurityManager.checkConnect(java.lang.String, int)

getByAddress

public static InetAddress getByAddress(byte[] addr)
                                throws UnknownHostException
在給定原始 IP 位址的情況下,返回 InetAddress 物件。參數按網路位元組順序:位址的高位位元組位於 getAddress()[0] 中。

此方法不會阻塞,即不執行任何反向名稱服務尋找操作。

IPv4 位址 byte 陣列的長度必須為 4 個位元組,IPv6 byte 陣列的長度必須為 16 個位元組

參數:
addr - 網路位元組順序的原始 IP 位址
返回:
根據原始 IP 位址創建的 InetAddress 物件。
拋出:
UnknownHostException - 如果 IP 位址的長度非法
從以下版本開始:
1.4

getLocalHost

public static InetAddress getLocalHost()
                                throws UnknownHostException
返回本地主機。

如果有安全管理器,則使用本地主機名和 -1 作為參數來調用其 checkConnect 方法,以查看是否允許該操作。如果不允許該操作,則返回表示回送位址的 InetAddress。

返回:
本地主機的 IP 位址。
拋出:
UnknownHostException - 如果找不到 host 的任何 IP 位址。
另請參見:
SecurityManager.checkConnect(java.lang.String, int)

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only