如何使用Ja來實現域名和IP地址的轉換?

2016年01月06日

資料分類:域名小知识  發布者:admin  總點擊:1659  網友貢獻指數:10

何使用Ja來實現域名和IP地址的轉換?

  對我們普通用戶而言,形象化的符號要比一捆枯燥的數字編碼要好記得多。比如,我們會很容易地記住字符串“www.10.org.cn”,卻很難記住206.17.191.12。本文簡要地介紹了Internet命名規則和地址的劃分約定,然后介紹了如何利用Ja語言完成符號名(上面的字符串)和IP地址(上面的數字串)之間的轉換工作,并給出一個實例,檢查可訪問的遠程主機。

  Internet命名規則和地址劃分約定

  在Internet上,符號名(symbolic Name)用來命名主機和網絡,例如www.10.org.cn。這些符號名的“學名”叫做“Domain Name”,即域名。雖然域名對我們來說方便得多,但在它們用作通信標識之前,必須轉換為IP地址(Internet Protocol Address)。IP地址是一個32位的標識符,包括一個網絡標識和主機標識,以便唯一地標識主機和網絡。域名轉換為IP地址的工作是由專門的系統完成,這就是域名系統(Domain Name System??DNS)。

  同一網絡或不同網絡主機之間進行數據的發送/接收時,IP地址就開始起作用了。如果是同一網絡中主機之間的數據傳遞,則僅利用IP地址中的主機標識,來確定網絡中主機的所在。另一方面,如果是不同網絡中主機之間的通信,則要同時利用主機標識和網絡標識來確定相應的主機。定位網絡和主機,再進行數據傳送的過程稱為路由(routing)。網絡中的路由器(router)包含一個IP層(IP Layer),它負責執行路由算法,將數據包發送到目的地。在Internet上,將數據庫發送到目的地是IP層份內之事。

  IP地址是Internet注冊部門??Network Information Center(網絡信息中心??NIC)分配給不同的組織,各組織再下放給多個部門。IP地址要占用4個字節。

  經過路由的數據包,也有可能會在傳送的過程中丟失。于是,人們就利用底層傳輸協議,來進行數據傳送正確與否的判斷。例如,TCP用于檢查錯誤或數據丟失,并在出錯時,再次發送相應的數據庫,直至對方主機正確接收為止。

  目前,共計有3類(或3個級別)的IP地址:A類、B類和C類。另外,還有一類IP地址叫作“Multicast”,在某些Internet主機上使用。這些不同類別的IP地址滿足了不同組織的需要。例如,A類地址主要用于主機數目超過65536的大型網絡系統;B類地址則用于中型網絡系統,其主機數大于255,卻小于65536;C類地址則用于那些主機數量小于256的小型網絡。

  不同類別地址的十進制表示如下,其中的十進制數代表允許的地址范圍:

  A類

  網絡ID 主機ID

  1~127 0~255 0~255 0~255

  B類

  網絡ID 主機ID

  128~191 0~255 0~255 0~255

  C類

  網絡ID 主機ID

  191~233 0~255 0~255 0~254

  Multicast

  191~233 0~255 0~255 0~254

  數字0和255另有特殊的含意。數字0是為那些地址不明的主機保留的。某些情況下,如錯誤的系統配置,主機標識或網絡標識不明的情況也會發生。例如,某個主機的C類地址為0.0.0.42,則說明其主機標識為42,而它所處網絡的網絡標識則是“未知數”0。?

  數字255則用于廣播發送方式,即一臺主機發出的信息會傳送到網絡中所有的主機上。

  獲得IP地址

  為了獲得所在網絡的IP地址,或者網絡中其他主機的IP地址,我們可以用ja.net軟件包中的ja.net.InetAddress類加以實現。例如,如果我們希望得到所在網絡的IP地址,我們可以調用InetAddress類中的getLocalHost()和getAddress()方法。getLocalHost()返回一個InetAddress對象;而getAddress()則返回一個長度為4的字節數組(IP地址為4個字節)。?

  如果要編制一個基于網絡的應用程序,我們也許需要知道準備運行這個程序的主機的域名或IP地址。如果這個程序只在我們自己的主機上運行,而且我們也知道主機的域名或IP地址,則我們就可以這樣進行:定義一個字符串常量即可,如:string localHost=“my-machine-name”。但大多情況下,我們編制的程序將在不同的主機上運行,這樣才有實用價值。那么,象上面那樣,定義一個localHost常量的方法就不太好用了。我們希望應用程序能夠自動檢測得到當前主機的域名。下面的程序說明了如何完成這一工作。

  InetAddress是ja.net軟件開發包中的一個“現成”的類。在上面的代碼中,我們可以說,其中的變量host就是一個InetAddress;InetAddress.getLocalHost()返回一個InetAddress。例如,某個主機域名為“sample”,其IP地址為“128.118.2.10”,那么,InetAddress.getLocalHost()調用返回后,變量host的值就成了“sample/128.118.2.10”。如果只對其中的主機域名感興趣,則可以調用getHostname()。

  簡單地說,IP地址是4個數字。為了得到數字形式的IP地址,我們可以將上面程序稍作改動。

  getAddress()返回一個長度為4的字節數組。例如,如果IP地址為“128.118.2.10”,則上面程序中的變量ip的最后內容為:

  ip〔0〕=128ip〔1〕=118ip〔2〕=2ip〔3〕=10

  Internet上的所有計算機都擁有一個唯一的IP地址和主機名。既然如此,我們要這些地址有什么用呢?這些地址可以幫助我們定位Internet上的固定資源,也可以使路由工作順利地進行。

  熟知UNIX的人都知道,UNIX系統中有一個復雜的DNS客戶程序??nslookup工具。利用nslookup,我們可以根據已知的IP地址,找到相應的主機名;也可以根據主機名,找到相應的IP地址。它可算是一個非常有用的工具。下面的示例程序則可以讓我們找到Internet上所有可以訪問主機的IP地址。

  在JDK 1.0.2(Ja Develop Kit-Ja開發工具包中,編制一個程序,將主機名轉換為IP地址并不太容易。這是由于InetAddress類中getHostName方法中有一個bug。這個bug在JDK 1.1 beta版中得以修正,所以下列代碼在JDK 1.1中應該可以運行。


World xml . c om

小紙條: 感謝您閱讀《如何使用Java来实现域名和IP地址的转换?》;Worldxml.COM誌願者全年365天為您分享實用有趣的域名知識;如需轉載本文,請註明出處:http://cht.worldxml.com/domain/o94537/; 歡迎您再次訪問本站,有您的支持,我們將會做得更好!
本文標簽:IP地址 
收藏到:IE收藏夾  
踩0
頂0
(提示:頂到域名世界首頁,分享給更多網友)   上壹篇 下壹篇

留言評論

2017-12-15

歡迎您就本域名知識點留言評論!

您的姓名: * 可選項,留空即為匿名發表
評論內容:
剩余字數:  * 按 Ctrl + Enter 直接發送.
            »»點此進入協作更新此資料

域名世界提醒您:評論只需提交壹次,請耐心等候,審核後方可顯示.

閱讀全文 | 評論(0)