国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

利用Java完成域名和IP地址的轉換

2019-11-18 14:59:24
字體:
來源:轉載
供稿:網友

  作者:阿佛


--------------------------------------------------------------------------------


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

在Internet上,符號名(symbolic Name)用來命名主機和網絡,例如www.oscar.com。這些符號名的“學名”叫做“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?

Multicast
191~233 0~255 0~255 0~254
數字0和255另有非凡的含意。數字0是為那些地址不明的主機保留的。某些情況下,如錯誤的系統配置,主機標識或網絡標識不明的情況也會發生。例如,某個主機的C類地址為0.0.0.42,則說明其主機標識為42,而它所處網絡的網絡標識則是“未知數”0。?
數字255則用于廣播發送方式,即一臺主機發出的信息會傳送到網絡中所有的主機上。?

獲得IP地址

為了獲得所在網絡的IP地址,或者網絡中其他主機的IP地址,我們可以用java.net軟件包中的java.net.InetAddress類加以實現。例如,假如我們希望得到所在網絡的IP地址,我們可以調用InetAddress類中的getLocalHost()和getAddress()方法。getLocalHost()返回一個InetAddress對象;而getAddress()則返回一個長度為4的字節數組(IP地址為4個字節)。?
假如要編制一個基于網絡的應用程序,我們也許需要知道預備運行這個程序的主機的域名或IP地址。假如這個程序只在我們自己的主機上運行,而且我們也知道主機的域名或IP地址,則我們就可以這樣進
行:定義一個字符串常量即可,如:string localHost=“my-machine-name”。但大多情況下,我們編制

/*?
* Program:sample1.java?
*/??
import java.net.*/;??
public class GetName {?
public static void main (String argv〔〕) throws Exception {?
InetAddress host=null;?
host=InetAddress.getLocalHost();?
System.out.println(host.getHostName());?
}?}


的程序將在不同的主機上運行,這樣才有實用價值。那么,象上面那樣,定義一個localHost常量的方法就不太好用了。我們希望應用程序能夠自動檢測得到當前主機的域名。下面的程序說明了如何完成這一工作。?

InetAddress是java.net軟件開發包中的一個“現成”的類。在上面的代碼中,我們可以說,其中的變量host就是一個InetAddress;InetAddress.getLocalHost()返回一個InetAddress。例如,某個主機域名為“sample”,其IP地址為“128.118.2.10”,那么,InetAddress.getLocalHost()調用返回后,變量host的值就成了“sample/128.118.2.10”。假如只對其中的主機域名感愛好,則可以調用getHostname()。?
簡單地說,IP地址是4個數字。為了得到數字形式的IP地址,我們可以將上面程序稍作改動。?
/*?
* Program:sample2.java?
*/??
import java.net.*;??
public class GetAddress {?
public static void main (String argv〔〕) throws Exception {?
InetAddress host=null;?
host=InetAddress.getLocalHost();?
byte ip〔〕=host.getAddress();?
for (int i=0;i<ip.length;i++) {?
if (i>0 System.out.print(".");?
System.out.print(ip〔i〕& 0xff);?
}?
System.out.println();?
}?}
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地址。
/*?
* Program:nslookup.java?
*/??
import java.net.*/;??
public class nslookup {?
//Usage:java nslookup hostname?
public static void main (String argv〔〕) throws Exception {?
String host=argv〔0〕;?
InetAddress address=null;?
try {?
address=InetAddress.getByName(host);?
} catch(UnknownHostException e) {?
System.out.println("Unknown host");?
System.exit(0);?
}?
byte〔〕 ip〔〕=address.getAddress();?
for (int i=0;i<ip.length;i++) {?
if (i>0 System.out.print(".");?
System.out.print(ip〔i〕& Oxff);?
}?
System.out.println();?
}?}
在JDK 1.0.2(Java Develop Kit-Java開發工具包中,編制一個程序,將主機名轉換為IP地址并不太輕易。這是由于InetAddress類中getHostName方法中有一個bug。這個bug在JDK 1.1 beta版中得以修正,所以下列代碼在JDK 1.1中應該可以運行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保定市| 盘锦市| 新乐市| 长沙市| 鹿邑县| 安庆市| 成安县| 铜梁县| 巴林左旗| 阿勒泰市| 南安市| 江津市| 驻马店市| 开远市| 吕梁市| 科技| 甘谷县| 措勤县| 正阳县| 陈巴尔虎旗| 宁远县| 金塔县| 乌兰察布市| 高陵县| 泊头市| 彭山县| 山东| 泗阳县| 平阳县| 尚义县| 台南市| 固安县| 墨竹工卡县| 镇坪县| 美姑县| 肃宁县| 凤城市| 延津县| 易门县| 宁陕县| 湟源县|