最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開發(fā)之InetAddress基礎(chǔ)入門簡介與源碼實例

 更新時間:2020年03月19日 16:07:51   作者:姚鏡堂  
這篇文章主要介紹了Android開發(fā)之InetAddress基礎(chǔ)入門簡介,需要的朋友可以參考下

最近在學(xué)習(xí)soket編程中,看到有需要獲取到IP地址之類的需求,所以就去看了下如何獲取到主機名的IP地址。

其實就是需要用到一個類InetAddress。他是在java.net包下面。

InetAddress類的對象用于IP地址和域名,該類提供以下方法:

getByName(String s):獲得一個InetAddress 類的對象,該對象中含有主機的IP地址和域名,該對象用如下格式表示它包含的信息:www.sina.com.cn/202.108.37.40;

String getHostName():獲取InetAddress對象的域名;

String getHostAddress():獲取InetAddress對象的IP地址;

getLocalHost():獲得一個InetAddress對象,該對象含有本地機的域名和IP地址。

private void test() {
    try {
      InetAddress locAdd = InetAddress.getLocalHost(); //得到本地InetAddress對象
      /* get www.baidu.com's ip */
      InetAddress remAdd = InetAddress.getByName("www.baidu.com"); //取得遠程InetAddress對象
      System.out.println("本機IP地址:" + locAdd.getHostAddress()); //得到本地IP地址
      System.out.println("百度IP地址:" + remAdd.getHostAddress()); //得到百度IP地址
      System.out.println("本機是否可達:" + locAdd.isReachable(10000)); //10000是超時時間,10s
      /*
        打印:
        本機IP地址:192.168.1.109
        百度IP地址:115.239.210.26
        本機是否可達:true
      */
    } catch (UnknownHostException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

很多情況是,某一域名對應(yīng)的主機IP是可能有多個的,我們也可以一一的取回來。如下:

private void test2() {
    try {
      /* 百度可能有多個IP地址,解析回來,所以我們可以用一個數(shù)組裝起來 */
      InetAddress[] addrs = InetAddress.getAllByName("www.baidu.com");
      if (addrs != null && addrs.length > 0) {
        for (InetAddress addr : addrs) {
          System.out.println("--->" + addr.getHostAddress());
        }
      }
    } catch (UnknownHostException e) {
      e.printStackTrace();
    }
  }

IP地址是IP使用的32位(IPv4)或者128位(IPv6)位無符號數(shù)字,它是傳輸層協(xié)議TCP,UDP的基礎(chǔ)。InetAddress是Java對IP地址的封裝,在java.net中有許多類都使用到了InetAddress,包括ServerSocket,Socket,DatagramSocket等等。

InetAddress的實例對象包含以數(shù)字形式保存的IP地址,同時還可能包含主機名(如果使用主機名來獲取InetAddress的實例,或者使用數(shù)字來構(gòu)造,并且啟用了反向主機名解析的功能)。InetAddress類提供了將主機名解析為IP地址(或反之)的方法。

InetAddress對域名進行解析是使用本地機器配置或者網(wǎng)絡(luò)命名服務(wù)(如域名系統(tǒng)(Domain Name System,DNS)和網(wǎng)絡(luò)信息服務(wù)(Network Information Service,NIS))來實現(xiàn)。

對于DNS來說,本地需要向DNS服務(wù)器發(fā)送查詢的請求,然后服務(wù)器根據(jù)一系列的操作,返回對應(yīng)的IP地址,為了提高效率,通常本地會緩存一些主機名與IP地址的映射,這樣訪問相同的地址,就不需要重復(fù)發(fā)送DNS請求了。

在java.net.InetAddress類同樣采用了這種策略。在默認情況下,會緩存一段有限時間的映射,對于主機名解析不成功的結(jié)果,會緩存非常短的時間(10秒)來提高性能。

InetAddress類

該類代表ip地址,下面還有兩個子類,分別是Inet4Address和Inet6Address他們分別代表IPV4地址和IPV6地址

該類沒有構(gòu)造器,可以通過它的兩個靜態(tài)方法來獲取InetAddress的實例

>getByName(String host) 根據(jù)主機名獲取對應(yīng)的InetAddress對象

使用IP地址創(chuàng)建InetAddress對象(getByName,getAllByName,getByAddress方法都可以通過IP地址創(chuàng)建InetAddress對象)時,并不需要訪問DNS服務(wù)器。因此,通過DNS服務(wù)器查找域名的工作就由getHostName方法來完成。

如果IP地址不存在或DNS服務(wù)器不允許進行IP地址和域名映射,就返回這個IP地址。

InetAddress address=InetAddress.getByName("141.146.8.66");

System.out.println(address.getHostName());//需要訪問DNS服務(wù)器才能得到域名

InetAddress address=InetAddress.getByName("1.2.3.4");//IP地址不存在

System.out.println(address.getHostName());//直接返回IP地址

用域名作為getByName和getAllByName方法的參數(shù)得到的InetAddress對象,該對象會得到這個域名,當(dāng)調(diào)用 getHostName時,就無需再訪問DNS服務(wù)器,而是直接將這個域名返回。

InetAddress address=InetAddress.getByName("m.fzitv.net");

System.out.println(address.getHostName());//不需要訪問DNS服務(wù)器就能得到域名

try {
	InetAddress address = InetAddress.getByName("m.fzitv.net");
	System.out.println(address);//m.fzitv.net/119.75.218.70
} catch (UnknownHostException e) {
	e.printStackTrace();
}

>getByAddress(byte[] addr)根據(jù)源ip地址來獲取InetAddress對象

InetAddress address;
try {
	address= InetAddress.getByAddress(new byte[]{119,75,218,70});
	System.out.println(address);//輸出結(jié)果為:/119.75.218.70和字符串str相一致
	address = InetAddress.getByAddress("m.fzitv.net", ipBuf);
	System.out.println(address);//輸出結(jié)果為m.fzitv.net/119.75.218.70
} catch (UnknownHostException e) {
	e.printStackTrace();
}

>InetAddress.getLocalHost()獲取本機的ip地址的主機名

try {
	InetAddress a = InetAddress.getLocalHost();
	System.out.println(a);//本機用戶名-PC/本機Ip
} catch (UnknownHostException e) {
	e.printStackTrace();
}

該類常用的其他幾個方法:

try {
	InetAddress address=InetAddress.getLocalHost();
	System.out.println(address.getHostAddress());//輸出ip字符串
	System.out.println(address.getHostName());//輸出用戶名
	System.out.println(address.getCanonicalHostName());//輸出本機的主機名.權(quán)限定域名(lan)
} catch (UnknownHostException e) {			
	e.printStackTrace();		
}

getCanonicalHostName()方法

定義:public String getCanonicalHostName()

該方法和getHostName方法一樣,也是得到遠程主機的域名。區(qū)別是,該方法得到的是主機名,getHostName得到的是主機別名。

1. 使用 getLocalHost() 創(chuàng)建InetAddress對象

此時getCanonicalHostName方法和getHostName方法得到的都是本機名

2. 使用域名 創(chuàng)建InetAddress對象

使用域名創(chuàng)建InetAddress對象后,getHostName方法不會訪問DNS服務(wù)器

但getCanonicalHostName方法就不一定了,這取決于DNS服務(wù)器如何解釋主機名和主機別名

3. 使用IP地址 創(chuàng)建InetAddress對象

此時getCanonicalHostName方法和getHostName方法完全相同,返回的都是主機名,而不是主機別名。

之所以要使用主機別名,是因為有時主機名可能比較復(fù)雜,如Oracle官方網(wǎng)站的主機名bigip-otn-portal.oracle.com,因此,為了使用戶訪問網(wǎng)站更方便,就增加了更簡單的主機別名,如 www.oracle.com

本文主要介紹了Android InetAddress基礎(chǔ)入門簡介與源碼實例,更多關(guān)于Android開發(fā)技巧請查看下面的相關(guān)鏈接

相關(guān)文章

  • Android6.0 屏幕固定功能詳解

    Android6.0 屏幕固定功能詳解

    android6.0在設(shè)置->安全->屏幕固定開啟后,然后再長按home鍵出現(xiàn)最近的幾個Activity可以選擇一個圖釘按鈕就開啟了屏幕固定功能。這篇文章主要介紹了Android6.0 屏幕固定功能的相關(guān)資料,感興趣的朋友一起看看吧
    2016-09-09
  • Android權(quán)限機制帶來的一些安全問題介紹

    Android權(quán)限機制帶來的一些安全問題介紹

    這篇文章主要介紹了Android權(quán)限機制帶來的一些安全問題介紹,本文講解了權(quán)限機制的缺陷和不足、樹立權(quán)限意識、越過權(quán)限機制等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Android RecycleView實現(xiàn)Item拖拽效果

    Android RecycleView實現(xiàn)Item拖拽效果

    RecyclerView是Android一個更強大的控件,其不僅可以實現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。本文將介紹通過RecyclerView實現(xiàn)Item拖拽效果以及拖拽位置保存,感興趣的可以參考一下
    2022-01-01
  • Android使用 Spinner控件實現(xiàn)下拉框功能

    Android使用 Spinner控件實現(xiàn)下拉框功能

    Spinner是android的一種控件,用它我們可以實現(xiàn)下拉框。下面通過實例代碼給大家介紹Android使用 Spinner控件實現(xiàn)下拉框功能,感興趣的朋友一起看看吧
    2018-08-08
  • android自定義環(huán)形對比圖效果

    android自定義環(huán)形對比圖效果

    這篇文章主要為大家詳細介紹了android自定義環(huán)形對比圖,外環(huán)有類似進度條的旋轉(zhuǎn)動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • python gstreamer實現(xiàn)視頻快進/快退/循環(huán)播放功能

    python gstreamer實現(xiàn)視頻快進/快退/循環(huán)播放功能

    這篇文章主要介紹了python gstreamer 實現(xiàn)視頻快進/快退/循環(huán)播放功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • 基于Android實現(xiàn)轉(zhuǎn)盤按鈕代碼

    基于Android實現(xiàn)轉(zhuǎn)盤按鈕代碼

    這篇文章主要介紹了基于Android實現(xiàn)轉(zhuǎn)盤按鈕代碼的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • Android中捕獲TTextView文本中的鏈接點擊事件方法

    Android中捕獲TTextView文本中的鏈接點擊事件方法

    這篇文章主要介紹了Android中捕獲TTextView文本中的鏈接點擊事件方法,本文給出了實現(xiàn)代碼和使用方法以及實現(xiàn)自己控制的方法,需要的朋友可以參考下
    2015-01-01
  • 如何在Android App中接入微信支付

    如何在Android App中接入微信支付

    這篇文章主要介紹了如何在Android App中接入微信支付,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下
    2021-03-03
  • Android ListView與RecycleView的對比使用解析

    Android ListView與RecycleView的對比使用解析

    這篇文章主要介紹了Android ListView與RecycleView的對比使用解析,需要的朋友可以參考下
    2017-12-12

最新評論

页游| 崇左市| 和田市| 右玉县| 库尔勒市| 福建省| 博野县| 温州市| 华阴市| 宁蒗| 丹棱县| 九寨沟县| 邻水| 都兰县| 乌审旗| 成安县| 大港区| 唐山市| 苗栗市| 芒康县| 平凉市| 吴堡县| 武安市| 蓬安县| 辽中县| 台中县| 拉萨市| 长武县| 清水河县| 资源县| 贵州省| 任丘市| 盐源县| 扎鲁特旗| 宜昌市| 宜春市| 蒙自县| 莱阳市| 顺平县| 凉城县| 凌海市|