首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java UDP 程式設計實戰:DatagramSocket 與 DatagramPacket 完整指南

     編輯:Java 程式設計入門

UDP 協定特性與適用場景

UDP(User Datagram Protocol)位於傳輸層,非連線導向、不保證送達、不分組重組、不排序。優勢在於低延遲、低資源消耗,適合音訊串流、視訊會議、即時通訊(如早期 ICQ/OICQ)等容忍少量封包遺失的場景。

核心類別詳解

InetAddress:IP 位址封裝

  • getLocalHost():本機位址
  • getByName(host):域名或 IP 解析
  • getAllByName(host):多重解析結果

DatagramSocket:收發端點

建構子用途
DatagramSocket()客戶端,系統自動分配暫時埠號
DatagramSocket(port)伺服端,固定監聽埠號
DatagramSocket(port, localAddr)多網卡主機,綁定特定介面

主要方法:receive(p)(阻塞等待)、send(p)、setSoTimeout(ms)、close()。注意捕獲 SocketException(埠號衝突)。

DatagramPacket:資料封包

封裝位元組陣列、目標位址/埠。建構子支援指定偏移量與長度。封包大小理論上限 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 應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved