| 類別 | 網路程式 | 網頁程式 |
|---|---|---|
| 基礎 | 不需 HTML 頁面 | 基於 HTML 頁面 |
| 範例 | 飛信、QQ、微信 | 珍愛網、OA、高考報名系統 |
getLocalHost():取得本機 IP 物件getByName("IP或主機名"):取得指定主機 IP 物件getHostAddress() / getHostName():取得 IP 字串 / 主機名DatagramSocket:UDP 通訊端點DatagramPacket:資料封包 (buf, length, address, port)DatagramSocketDatagramPacket (含目標 IP、Port)socket.send(packet)socket.close())DatagramSocket(port) 監聽埠DatagramPacket 接收緩衝區socket.receive(packet) (阻塞等待)packet.getData() 取資料,packet.getLength() 取實際長度
public class SafeReceive {
public static void main(String[] args) throws IOException, InterruptedException {
DatagramSocket socket = new DatagramSocket(9090);
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
while (true) {
socket.receive(packet);
System.out.println(new String(buf, 0, packet.getLength()));
Thread.sleep(10);
}
}
}
Socket (客戶端)ServerSocket (伺服端)new Socket(InetAddress, port) 連線伺服端OutputStream 寫出 / InputStream 讀取
Socket socket = new Socket(InetAddress.getLocalHost(), 9090);
OutputStream out = socket.getOutputStream();
out.write("伺服端你好".getBytes());
InputStream in = socket.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println("收到:" + new String(buf, 0, len));
socket.close();
new ServerSocket(port) 監聽accept() 阻塞等待客戶端連線,回傳 Socket
ServerSocket server = new ServerSocket(9090);
Socket socket = server.accept(); // 阻塞等待
InputStream in = socket.getInputStream();
// 讀取客戶端資料...
OutputStream out = socket.getOutputStream();
out.write("客戶端你好啊!".getBytes());
server.close();
理解兩者在 Socket API、資料流模型、可靠性機制上的本質差異,是構建高效網路應用的關鍵。