為了分辨來自他處的機器、確保連線的是目標機器,必須有機制唯一識別網路內每台機器。早期網路只解決區域網路機器命名,但 Java 面向整個網際網路,需識別全球機器。採用 IP(網際網路位址) 概念。
Opus.bruceeckel.com。寄送電子郵件、WWW 位址常用此格式202.98.32.111,四組數字以點分隔內部均表現為 32 位元二進位數字,故每組數字不超過 255。透過 java.net.InetAddress.getByName() 讓 Java 物件表達任一形式,回傳 InetAddress 物件,可構成 Socket。
註: 32 位元約 40 億組合,全球即將用盡。新 IP 編址方案採 128 位元,或許數百年不會用完。
撥號連接 ISP 時,每次獲得臨時 IP 位址。連線期間該 IP 與網際網路上其他 IP 同等有效。若有人按你的 IP 連線,可使用你機器上的 Web/FTP 服務(前提是對方知曉你目前 IP)。但每次撥號 IP 隨機不同,如何準確掌握?
//: WhoAmI.java
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
輸出類似(每次 IP 不同):
Colossus/202.98.41.151
將此位址告訴朋友,他可立即登入你的個人 Web 伺服器:https://202.98.41.151(前提是你不斷線)。這是傳送資訊或正式上線前測試的方便手段。