Java網絡編程之InetAddress淺析
一、InetAddress綜述
IP地址是IP使用的32位(IPv4)或者128位(IPv6)位無符號數字,它是傳輸層協議TCP,UDP的基礎。InetAddress是Java對IP地址的封裝,幾乎所有的Java網絡相關的類都和它有關系,例如:serversocket,socket,URL,DataGramSocket,DataGRamPacket等。
InetAddress的實例對象包含以數字形式保存的IP地址,同時還可能包含主機名(如果使用主機名來獲取InetAddress的實例,或者使用數字來構造,並且啟用了反向主機名解析的功能)。InetAddress類提供了將主機名解析為IP地址(或反之)的方法。
InetAddress對域名進行解析是使用本地機器配置或者網絡命名服務(如域名系統(Domain Name System,DNS)和網絡信息服務(Network Information Service,NIS))來實現。對於DNS來說,本地需要向DNS服務器發送查詢的請求,然后服務器根據一系列的操作,返回對應的IP地址,為了提高效率,通常本地會緩存一些主機名與IP地址的映射,這樣訪問相同的地址,就不需要重復發送DNS請求了。在java.net.InetAddress類同樣采用了這種策略。在默認情況下,會緩存一段有限時間的映射,對於主機名解析不成功的結果,會緩存非常短的時間(10秒)來提高性能。
Java提供了InetAddress類來代表IP地址,InetAddress下還有2個子類:Inet4Address、Inet6Address,它們分別代表Internet Protocol version 4(IPv4)地址和Internet Protocol version 6(IPv6)地址,不過這兩個子類不常用,這里也不在贅述。
此外,InetAddress類沒有提供構造器,而是提供了如下兩個靜態方法來獲取InetAddress實例:
getByName(String host):根據主機獲取對應的InetAddress對象。
getByAddress(byte[] addr):根據原始IP地址來獲取對應的InetAddress對象。
二、InetAddress數據結構
可見,InetAddress實現了Serializable接口,其對象可序列化
三、InetAddress方法摘要
方法摘要 | |
---|---|
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 。 |
四、代碼示例
1 package me.net.ip; 2
3 import java.net.InetAddress; 4 import java.net.UnknownHostException; 5
6 /**
7 * InetAddress用來代表IP地址 一個InetAddress對象代表一個IP地址 8 * 9 * @author Administrator 10 * 11 */
12 public class TestInetAddress { 13
14 public static void main(String[] args) throws UnknownHostException { 15 //如何創建一個InetAddress對象
16 InetAddress inet = InetAddress.getByName("www.baidu.com"); 17 System.out.println(inet); 18 System.out.println(inet.getHostName()); 19 System.out.println(inet.getHostAddress()); 20 //獲取本機信息
21 inet = InetAddress.getLocalHost(); 22 System.out.println(inet); 23 System.out.println(inet.getHostName()); 24 System.out.println(inet.getHostAddress()); 25 } 26
27 }
如果,您對我的這篇博文有什么疑問,歡迎評論區留言,大家互相討論學習。
如果,您認為閱讀這篇博客讓您有些收獲,不妨點擊一下右下角的【推薦】。
如果,您希望更容易地發現我的新博客,不妨點擊一下左下角的【關注我】。
如果,您對我的博文感興趣,可以關注我的后續博客,我是【AlbertRui】。轉載請注明出處和鏈接地址,歡迎轉載,謝謝!