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

Java 網路程式設計:UDP 協議完整教學(二)API 與實作

     編輯:Java 相關知識

核心類別

DatagramSocket

發送/接收資料報的端點。

建構子用途
DatagramSocket()隨機本機埠,適合客戶端
DatagramSocket(int port)指定本機埠,適合伺服端監聽
DatagramSocket(int port, InetAddress addr)多網卡環境指定綁定 IP

常用方法:send(p)、receive(p)、setSoTimeout(ms)、close()。

DatagramPacket

資料報封裝:位元組陣列、目標位址/埠、長度/偏移。

建構子用途
DatagramPacket(buf, len, addr, port)發送封包
DatagramPacket(buf, offset, len, addr, port)發送封包(指定偏移)
DatagramPacket(buf, len)接收緩衝區
DatagramPacket(buf, offset, len)接收緩衝區(指定偏移)

常用方法:getData()、getLength()、getAddress()、getPort()。

UDP 通訊流程

發送端

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() 會阻塞執行緒,直到收到封包或逾時。
  • UDP 無連線、不保證送達、不保證順序、最大封包 64KB(含標頭)。

完整範例輸出

UDP 通訊執行結果

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