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

Java UDP 資料報程式設計:ChatterServer/Client 範例與 Dgram 工具類

     編輯:Java 相關知識

UDP vs TCP:速度與可靠性的取捨

TCP 保證可靠、有序、無重複傳輸,開銷大。UDP 不保證送達、不保證順序,但速度極快,適合語音、遊戲、報時等容忍少量遺失的場景。Java 提供 DatagramSocket(收發端點)與 DatagramPacket(資料封包)對應 UDP。

DatagramPacket 兩種建構子

  • 接收用:new DatagramPacket(buf, buf.length) — 僅提供緩衝區,位址/埠號由 receive() 填入。
  • 發送用:new DatagramPacket(buf, length, InetAddress, port) — 指定目的地。

同一 DatagramSocket 可同時收發。緩衝區大小受限於 64KB 以下,實務常用較小封包。

Dgram 工具類:String 與 DatagramPacket 雙向轉換

public class Dgram {
    public static DatagramPacket toDatagram(String s, InetAddress dest, int port) {
        byte[] buf = new byte[s.length() + 1]; // +1 防截斷
        s.getBytes(0, s.length(), buf, 0); // Java 1.0 相容寫法
        return new DatagramPacket(buf, buf.length, dest, port);
    }
    public static String toString(DatagramPacket p) {
        return new String(p.getData(), 0, p.getLength()); // Java 1.1 建構子
    }
}

註解掉的 Java 1.1 getBytes() 會截斷字串,故沿用 1.0 寫法。

ChatterServer:回聲伺服器

  • 建立 DatagramSocket(INPORT=1711),無限迴圈 receive(dp)。
  • 轉字串、附加發送者位址/埠號列印、組裝回應字串。
  • 用 Dgram.toDatagram() 建立回應封包,dp.getAddress()/getPort() 直接回覆原發送者。

ChatterClient:多執行緒壓力測試

每個 Client 執行緒:自動指派本地埠號、固定目標位址/埠號、發送含執行緒編號與序號的訊息、receive() 阻塞等待回應、驗證回應內容正確性。多執行緒同時運行可驗證伺服器正確分派回應給對應客戶端。

UDP 傳檔策略提示

將檔案分割為多個編號封包,接收端重組;標頭封包宣告總數與關鍵資訊;遺失封包以資料報請求重傳。利用 UDP 高速特性實現高效傳輸。

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