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

Java 網路程式設計實戰:UDP 與 TCP 完整比較與代碼實戰

     編輯:Java 程式設計入門

網路程式設計核心差異

類別網路程式網頁程式
基礎不需 HTML 頁面基於 HTML 頁面
範例飛信、QQ、微信珍愛網、OA、高考報名系統

網路通訊三要素

  1. IP:32 位元二進位,習慣用點分十進制 (如 192.168.10.1)。分類:A 類 (政府)、B 類 (學校/銀行)、C 類 (私人)。
  2. Port (連接埠):0~65535。0~1023 系統保留,1024~65535 開發者可用。
  3. Protocol (協定):Java 中稱 Socket 通訊,不同協定對應不同 Socket。

InetAddress:IP 位址操作

  • getLocalHost():取得本機 IP 物件
  • getByName("IP或主機名"):取得指定主機 IP 物件
  • getHostAddress() / getHostName():取得 IP 字串 / 主機名

UDP 協定 (User Datagram Protocol)

特點

  • 無連線、資料封包傳輸、每封包 ≤ 64KB
  • 不可靠 (可能丟包、亂序)、速度快
  • 不分客戶端/伺服端,只有發送端/接收端
  • 適用:即時通訊、遊戲、廣播

核心類別

  • DatagramSocket:UDP 通訊端點
  • DatagramPacket:資料封包 (buf, length, address, port)

發送端步驟

  1. 建立 DatagramSocket
  2. 準備資料封裝進 DatagramPacket (含目標 IP、Port)
  3. socket.send(packet)
  4. 關閉資源 (socket.close())

接收端步驟

  1. 建立 DatagramSocket(port) 監聽埠
  2. 準備空 DatagramPacket 接收緩衝區
  3. socket.receive(packet) (阻塞等待)
  4. 從 packet.getData() 取資料,packet.getLength() 取實際長度
  5. 關閉資源

代碼範例:安全接收端 (持續監聽)


public class SafeReceive {
    public static void main(String[] args) throws IOException, InterruptedException {
        DatagramSocket socket = new DatagramSocket(9090);
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        while (true) {
            socket.receive(packet);
            System.out.println(new String(buf, 0, packet.getLength()));
            Thread.sleep(10);
        }
    }
}

TCP 協定 (Transmission Control Protocol)

特點

  • 面向連線、基於 IO 流、無資料大小限制
  • 三次握手保證可靠性、有序、無重複
  • 速度較慢、嚴格區分客戶端/伺服端
  • 適用:檔案傳輸、郵件、Web 瀏覽

核心類別

  • Socket (客戶端)
  • ServerSocket (伺服端)

TCP 客戶端步驟

  1. new Socket(InetAddress, port) 連線伺服端
  2. 取得 OutputStream 寫出 / InputStream 讀取
  3. 關閉資源

代碼範例:TCP 客戶端


Socket socket = new Socket(InetAddress.getLocalHost(), 9090);
OutputStream out = socket.getOutputStream();
out.write("伺服端你好".getBytes());
InputStream in = socket.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println("收到:" + new String(buf, 0, len));
socket.close();

TCP 伺服端步驟

  1. new ServerSocket(port) 監聽
  2. accept() 阻塞等待客戶端連線,回傳 Socket
  3. 取得流物件收發資料
  4. 關閉資源

代碼範例:TCP 伺服端


ServerSocket server = new ServerSocket(9090);
Socket socket = server.accept(); // 阻塞等待
InputStream in = socket.getInputStream();
// 讀取客戶端資料...
OutputStream out = socket.getOutputStream();
out.write("客戶端你好啊!".getBytes());
server.close();

總結:如何選擇?

  • 追求速度、容忍丟包、廣播/即時互動 → UDP
  • 要求可靠、有序、完整傳輸 (檔案、郵件、登入) → TCP

理解兩者在 Socket API、資料流模型、可靠性機制上的本質差異,是構建高效網路應用的關鍵。

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