UDP(User Datagram Protocol)位於傳輸層,非連線導向、不保證送達、不分組重組、不排序。優勢在於低延遲、低資源消耗,適合音訊串流、視訊會議、即時通訊(如早期 ICQ/OICQ)等容忍少量封包遺失的場景。
getLocalHost():本機位址getByName(host):域名或 IP 解析getAllByName(host):多重解析結果| 建構子 | 用途 |
|---|---|
DatagramSocket() | 客戶端,系統自動分配暫時埠號 |
DatagramSocket(port) | 伺服端,固定監聽埠號 |
DatagramSocket(port, localAddr) | 多網卡主機,綁定特定介面 |
主要方法:receive(p)(阻塞等待)、send(p)、setSoTimeout(ms)、close()。注意捕獲 SocketException(埠號衝突)。
封裝位元組陣列、目標位址/埠。建構子支援指定偏移量與長度。封包大小理論上限 65,507 位元組,實務建議 ≤ 8,192 位元組。核心方法 getData() 取得原始位元組。
byte[] buf = new byte[1000];
DatagramSocket ds = new DatagramSocket(12345);
DatagramPacket dp = new DatagramPacket(buf, buf.length);
while (true) {
ds.receive(dp); // 阻塞直到收到封包
System.out.println(new String(dp.getData(), 0, dp.getLength()));
}
InetAddress target = InetAddress.getByName("www.example.com");
DatagramSocket ds = new DatagramSocket(9999);
String msg = "Hello, I am coming!";
byte[] buf = msg.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length, target, 12345);
ds.send(dp);
ds.close();
掌握此模型即可構建高效輕量的 UDP 應用。