數據報(Datagram)是網絡層獨立傳輸單元,包含地址信息,無需建立連接,不可靠(不保證到達、順序、內容完整)。適用於對質量要求不高、追求低延遲的場景。Java java.net包提供DatagramSocket和DatagramPacket兩大核心類支持。
// 綁定任意可用端口
DatagramSocket socket = new DatagramSocket();
// 或指定本地端口
DatagramSocket socket = new DatagramSocket(int port);
若端口被佔用或無法打開拋出SocketException。
// 參數:數據緩衝區、長度、目標IP、目標端口
DatagramPacket packet = new DatagramPacket(
byte[] buffer, int length, InetAddress address, int port
);
常用獲取信息方法:
getData():返回數據字節數組getLength():返回數據長度getAddress():返回目標/發送方IPgetPort():返回目標/發送方端口socket.send(packet); // 將封裝數據發出
// 僅指定緩衝區與長度,不指定目標地址
DatagramPacket receivePacket = new DatagramPacket(buffer, length);
socket.receive(receivePacket); // 阻塞直到收到數據
// 接收後,receivePacket包含發送方IP、端口及數據
解析緩衝區數據獲取服務結果。通訊結束調用socket.close()釋放資源(良好習慣,雖JVM會自動回收)。
import java.applet.*;
import java.net.*;
import java.io.*;
public class DatagramClient extends Applet {
// 初始化UI、Socket、發送/接收邏輯...
// 因篇幅限制此處省略完整代碼,核心流程如上所述
}
該示例以Applet形式演示客戶端與服務器簡單交互,直觀展示數據報通訊全過程。