發送/接收資料報的端點。
| 建構子 | 用途 |
|---|---|
DatagramSocket() | 隨機本機埠,適合客戶端 |
DatagramSocket(int port) | 指定本機埠,適合伺服端監聽 |
DatagramSocket(int port, InetAddress addr) | 多網卡環境指定綁定 IP |
常用方法:send(p)、receive(p)、setSoTimeout(ms)、close()。
資料報封裝:位元組陣列、目標位址/埠、長度/偏移。
| 建構子 | 用途 |
|---|---|
DatagramPacket(buf, len, addr, port) | 發送封包 |
DatagramPacket(buf, offset, len, addr, port) | 發送封包(指定偏移) |
DatagramPacket(buf, len) | 接收緩衝區 |
DatagramPacket(buf, offset, len) | 接收緩衝區(指定偏移) |
常用方法:getData()、getLength()、getAddress()、getPort()。
DatagramSocket ds = new DatagramSocket(); // 隨機埠
byte[] data = "Hello Server".getBytes();
DatagramPacket dp = new DatagramPacket(data, data.length,
InetAddress.getByName("192.168.1.100"), 9999);
ds.send(dp);
ds.close();
DatagramSocket ds = new DatagramSocket(9999); // 固定埠監聽
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp); // 阻塞等待
String msg = new String(dp.getData(), 0, dp.getLength());
System.out.println("收到:" + msg + " 來自 " + dp.getAddress() + ":" + dp.getPort());
ds.close();
SocketException,需捕捉處理。receive() 會阻塞執行緒,直到收到封包或逾時。