程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 機器的標識

機器的標識

編輯:關於JAVA

當然,為了分辨來自別處的一台機器,以及為了保證自己連接的是希望的那台機器,必須有一種機制能獨一無二地標識出網絡內的每台機器。早期網絡只解決了如何在本地網絡環境中為機器提供唯一的名字。但Java面向的是整個因特網,這要求用一種機制對來自世界各地的機器進行標識。為達到這個目的,我們采用了IP(互聯網地址)的概念。IP以兩種形式存在著:
(1) 大家最熟悉的DNS(域名服務)形式。我自己的域名是bruceeckel.com。所以假定我在自己的域內有一台名為Opus的計算機,它的域名就可以是Opus.bruceeckel.com。這正是大家向其他人發送電子函件時采用的名字,而且通常集成到一個萬維網(WWW)地址裡。
(2) 此外,亦可采用“四點”格式,亦即由點號(.)分隔的四組數字,比如202.98.32.111。
不管哪種情況,IP地址在內部都表達成一個由32個二進制位(bit)構成的數字(注釋①),所以IP地址的每一組數字都不能超過255。利用由java.net提供的static InetAddress.getByName(),我們可以讓一個特定的Java對象表達上述任何一種形式的數字。結果是類型為InetAddress的一個對象,可用它構成一個“套接字”(Socket),大家在後面會見到這一點。

①:這意味著最多只能得到40億左右的數字組合,全世界的人很快就會把它用光。但根據目前正在研究的新IP編址方案,它將采用128 bit的數字,這樣得到的唯一性IP地址也許在幾百年的時間裡都不會用完。

作為運用InetAddress.getByName()一個簡單的例子,請考慮假設自己有一家撥號連接因特網服務提供者(ISP),那麼會發生什麼情況。每次撥號連接的時候,都會分配得到一個臨時IP地址。但在連接期間,那個IP地址擁有與因特網上其他IP地址一樣的有效性。如果有人按照你的IP地址連接你的機器,他們就有可能使用在你機器上運行的Web或者FTP服務器程序。當然這有個前提,對方必須准確地知道你目前分配到的IP。由於每次撥號連接獲得的IP都是隨機的,怎樣才能准確地掌握你的IP呢?
下面這個程序利用InetAddress.getByName()來產生你的IP地址。為了讓它運行起來,事先必須知道計算機的名字。該程序只在Windows 95中進行了測試,但大家可以依次進入自己的“開始”、“設置”、“控制面板”、“網絡”,然後進入“標識”卡片。其中,“計算機名稱”就是應在命令行輸入的內容。

 

//: WhoAmI.java
// Finds out your network address when you're 
// connected to the Internet.
package c15;
import java.net.*;

public class WhoAmI {
  public static void main(String[] args) 
      throws Exception {
    if(args.length != 1) {
      System.err.println(
        "Usage: WhoAmI MachineName");
      System.exit(1);
    }
    InetAddress a = 
      InetAddress.getByName(args[0]);
    System.out.println(a);
  }
} ///:~

就我自己的情況來說,機器的名字叫作“Colossus”(來自同名電影,“巨人”的意思。我在這台機器上有一個很大的硬盤)。所以一旦連通我的ISP,就象下面這樣執行程序:
java whoAmI Colossus
得到的結果象下面這個樣子(當然,這個地址可能每次都是不同的):
Colossus/202.98.41.151
假如我把這個地址告訴一位朋友,他就可以立即登錄到我的個人Web服務器,只需指定目標地址http://202.98.41.151即可(當然,我此時不能斷線)。有些時候,這是向其他人發送信息或者在自己的Web站點正式出台以前進行測試的一種方便手段。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved