Java網絡編程從入門到精通(5):使用InetAddress類的getHostName方法獲得域名

該方法可以得到遠程主機的域名,也可以得到本機名。getHostName方法的定義如下:
public?String?getHostName()
下面是三種創建InetAddress對象的方式,在這三種方式中,getHostName返回的值是不同的。
1使用getLocalHost方法創建InetAddress對象
如果InetAddress對象是用getLocalHost方法創建的,getHostName返回的是本機名。如下面的代碼所示:
InetAddress?address?=?InetAddress.getLocalHost();
System.out.println(address.getHostName());??
//?輸出本機名
2使用域名創建InetAddress對象
用域名作為getByNamegetAllByName方法的參數調用這兩個方法后,系統會自動記住這個域名。當調用getHostName方法時,就無需再訪問DNS服務器,而是直接將這個域名返回。如下面的代碼所示:
InetAddress?address?=?InetAddress.getByName("www.oracle.com");
System.out.println(address.getHostName());??
//?無需訪問DNS服務器,直接返回域名
3使用IP地址創建InetAddress對象
使用IP地址創建InetAddress對象時(getByNamegetAllByNamegetByAddress方法都可以通過IP地址創建InetAddress對象),并不需要訪問DNS服務器。因此,通過DNS服務器查找域名的工作就由getHostName方法來完成。如果這個IP地址不存在或DNS服務器不允許進行IP地址和域名的映射,getHostName方法就直接返回這個IP地址。如下面的代碼所示:
InetAddress?address?=?InetAddress.getByName("141.146.8.66");
System.out.println(address.getHostName());??
//?需要訪問DNS服務器才能得到域名
InetAddress?address?=?InetAddress.getByName("1.2.3.4");??//?IP地址不存在
System.out.println(address.getHostName());??//?直接返回IP地址
從上面的三種情況可以看出,只有通過使用IP地址創建的InetAddress對象調用getHostName方法時才訪問DNS服務器。在其他情況,getHostName方法并不會訪問DNS服務器,而是直接將域名或本機名返回。下面的代碼演示了在不同情況下如何使用getHostName方法,并計算了各種情況所需的毫秒數。
??package?mynet;
??
??
import?java.net.*;
??
??
public?class?DomainName
??{
??????
public?static?void?main(String[]?args)?throws?Exception
??????{
??????????
long?time?=?0;
??????????
//?得到本機名
??????????InetAddress?address1?=?InetAddress.getLocalHost();
??????????System.out.println(
"本機名:?"?+?address1.getHostName());
??????????
//?直接返回域名
??????????InetAddress?address2?=?InetAddress.getByName("www.oracle.com");
??????????time?
=?System.currentTimeMillis();
??????????System.out.print(
"直接得到域名:?"?+?address2.getHostName());
??????????System.out.println(
"??所用時間:"
??????????????????????????
+?String.valueOf(System.currentTimeMillis()?-?time)?+?"?毫秒");
??????????
//?通過DNS查找域名
??????????InetAddress?address3?=?InetAddress.getByName("141.146.8.66");
????????? System.out.println(
"address3:??"?+?address3);??//?域名為空
??????????time?=?System.currentTimeMillis();
??????????System.out.print(
"通過DNS查找域名:?"?+?address3.getHostName());
??????????System.out.println(
"??所用時間:"?+?String.valueOf(System.currentTimeMillis()?-?time)+?"?毫秒");
????????? System.out.println(
"address3:??"?+?address3);??//?同時輸出域名和IP地址
??????}
??}????
運行結果:
本機名:?ComputerName
直接得到域名:?www.oracle.com??所用時間:
0?毫秒
address3:??/
141.146.8.66
通過DNS查找域名:?bigip-otn-portal.oracle.com??所用時間:
92?毫秒
address3:??bigip-otn-portal.oracle.com/
141.146.8.66
從上面的運行結果可以看出,第一個毫秒數是0,而第二個毫秒數是92。這說時,使用域名創建的InetAddress對象在使用getHostName方法時并不訪問DNS服務器,而使用IP地址創建的InetAddress對象在使用getHostName方法時需要訪問DNS服務器。對于第三個毫秒數,可能多次運行DomainName后會越來越小,這是因為DNS服務器的緩存的緣故。但一般這個數都會比0大。也許有很多人會問,第二行和第四行得到的域名怎么不一樣,其實www.oracle.combigip-otn-portal.oracle.com都是oracle的域名,我們也可以通過http:// bigip-otn-portal.oracle.com來訪問oracle的官方網站。至于這兩個域名有什么區別,將在下面的文章中討論。



本文轉自 androidguy 51CTO博客,原文鏈接:http://blog.51cto.com/androidguy/214810,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454136.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454136.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454136.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

猿輔導python面試_猿輔導面試經歷—個人感受

今天參加了猿輔導的二面,無數槽點,不知道是不是很多公司都是這樣,但是我還是忍不住要逼逼叨。6月10號,我向猿輔導投了簡歷,想做招聘邀約專員這個崗位,然后hr加了我的微信,要了一份簡歷之后通知我…

對稱加密與非對稱加密

(一)對稱加密(Symmetric Cryptography) 對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的密鑰(secret key&#xff…

清華大學《操作系統》(十二):臨界區與鎖

多進程并發運行,導致多個進程間有資源共享,比如CPU、內存,因此存在不確定性和不可重現,可能導致多次運行結果不一致。因此操作系統需要利用同步機制在并發執行的同時,保證一些操作是原子操作。 互斥是指一個進程占用了…

gcc生成靜態庫和動態庫

gcc生成靜態庫和動態庫一、庫文件簡介簡單地說,庫(Library)就是一組已經寫好了的函數和變量、經過編譯代碼,是為了能夠提高開發效率和運行效率而設計的。庫分為靜態庫(Static Library)和共享庫(…

python 流式計算框架_流式計算的三種框架:Storm、Spark和Flink

我們知道,大數據的計算模式主要分為批量計算(batch computing)、流式計算(stream computing)、交互計算(interactive computing)、圖計算(graph computing)等。其中,流式計算和批量計算是兩種主要的大數據計算模式,分別適用于不同的大數據應用…

清華大學《操作系統》(十八):管程于信號量

信號量與管程也是進程間通信的方式。信號量是與鎖在同一層級實現的,是操作系統提供的一種協調共享資源訪問的方法。信號量由操作系統管理,操作系統作為管理者地位是高于進程的。 一、信號量 1、信號量(semaphore):是操…

Iptalbes自動封殺暴力破解(Qmail郵件系統)者的IP地址

今天發現Qmail郵件系統的maillog里面有大量的“user not found”信息,通過下面的日志不難發現,是來自同一IP的很多不同的用戶連接Qmail郵件系統認證失敗的信息。黑客試圖通過這種方式來破解Qmail郵件系統的用戶名和密碼,從而來發送大量的垃圾…

安裝Postman

在web和移動端開發時,常常會調用服務器端的restful接口進行數據請求,為了調試,一般會先用工具進行測試,通過測試后才開始在開發中使用。 這里介紹一下如何在chrome瀏覽器利用postman應用進行restful api接口請求測試。 因為&#…

python紅樓夢詞頻統計_用 Python 分析《紅樓夢》(2)-阿里云開發者社區

6 詞頻統計完成分詞以后,詞頻統計就非常簡單了。我們只需要根據分詞結果把片段切分開,去掉長度為一的片段(也就是單字),然后數一下每一種片段的個數就可以了。這是出現次數排名前 20 的單詞:(括號內為頻數)可以跟之前只統計出現次…

清華大學《操作系統》(二十):死鎖和進程通信

一、死鎖 死鎖:一組阻塞的進程(兩個或多個),持有一種資源,等待獲取另一個進程所占有的資源,而導致誰都無法執行。 可重復使用的資源: 在一個時間只能一個進程使用,且不能被刪除。…

python操作redis實例_Java,php,Python連接并操作redis實例

1、Java連接并操作redis在Eclipse里新建一個java project,導入jedis-*.jar包。示例代碼,其他對應的操作類型見:http://my.oschina.net/u/2391658/blog/705069import redis.clients.jedis.Jedis;//示例代碼public class RedisTest {public sta…

java: cannot execute binary file 如果遇到這個錯,一般是操作系統位數出問題了。

[roottestserver usr]# java/jdk1.6.0_12/bin/java-bash: java/jdk1.6.0_12/bin/java: cannot execute binary file后來檢驗,檢查了一段時間,沒有問題,最后有高人提示經驗證,是64位版本移到32位上。本文轉自 jxwpx 51CTO博客&…

div 自適應高度

自適應高度 ,設置最小高度;通常情況下,沒有設置高度,div默認自適應高度且無最低高度 1 div{ 2 _height:200px; /* css 注解: 僅IE6設別此屬性,假定最低高度是200px ,設置高度200px&#xff0c…

GCC使用詳情

1.前言 GCC編譯器的手冊(GCC MANUAL)的英文版已經非常全面,并且結構也非常完善了,只是一直都沒有中文的版本,我這次閱讀了GCC編譯器的主要內容,對手冊的內容進行了結構性的了解,認為有必要對這次閱讀的內容進行整理&am…

清華大學《操作系統》(二十二):文件系統

文件系統和文件: 文件系統是操作系統中管理持久性數據的子系統,提供數據存儲和訪問功能,組織、檢索、讀寫訪問數據。文件是具有符號名,由字節序列構成的數據項集合,是文件系統的基本數據單位,文件名是文件…

卡巴綠殺6 By Moshow魔手

卡巴綠殺6 By Moshow魔手 Kaspersky Anti-Virus Move-edition 6 (-_-b汗Move Edition...)【這是卡巴斯基綠色移動版本推薦用于u盤】By Moshow魔手 [url]Http://Hi.baidu.com/MoshowGame[/url]祝o(∩_∩)o...天下無毒)擁有全球最全的病毒庫)擁有最快的全球剿毒反應速度) 基于穩定…

python將字符串寫入csv_用Python將字符串值寫入CSV文件

我有一個很大的數據集,在第二列有句子和他們的情緒狀態。我開發了代碼來將它們讀作numpy數組。我需要的是,如果一個句子的情感是中性的,那么返回為真,否則返回假。if-else條件返回的每個結果都應寫入CSV文件。但是這里它只在CSV文…

加載靜態文件,父模板的繼承和擴展

用url_for加載靜態文件<script src"{{ url_for(static,filenamejs/login.js) }}"></script>flask 從static文件夾開始尋找可用于加載css, js, image文件繼承和擴展把一些公共的代碼放在父模板中&#xff0c;避免每個模板寫同樣的內容。base.html子模板繼…

清華大學《操作系統》(二十三):I/O子系統

常見設備接口類型&#xff1a; 1、字符設備&#xff1a;鍵盤鼠標、串口 a.以字節為單位順序訪問 b.I/O命令通常使用文件訪問接口和語義 2、塊設備&#xff1a;磁盤、磁帶、光驅 a.均勻的數據塊訪問 b.I/O命令通常使用文件系統接口&#xff0c;也可以使用內存映射訪問 3、網絡…

百度地圖 Android SDK - 個性化地圖

什么是百度個性化地圖Android SDK&#xff1f; 百度個性化地圖Android SDK是一套基于Android 2.2及以上版本號設備的應用程序接口&#xff0c;您能夠通過該套接口實現主要的地圖功能&#xff0c;而且能夠定制地圖樣式&#xff0c;實現個性化地圖。 該接口提供下面功能&#xff…