Java網絡編程之InetAddress淺析


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】。

轉載請注明出處和鏈接地址,歡迎轉載,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM