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

Java UDP 通信實戰:DatagramSocket 與 DatagramPacket 完整收發示例

     編輯:Java 綜合教學

UDP 核心特點

  • 無連接、不可靠、無序、速度快
  • 單個數據報 ≤ 64KB
  • 適用場景:視頻流、即時通訊、廣播、允許丟包的高吞吐場景

核心類

  • DatagramSocket:發送/接收端點
  • DatagramPacket:數據報封裝(數據、長度、目標 IP/端口、源 IP/端口)
  • InetAddress:IP 地址封裝

完整代碼實現

package com.UDP.java;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import org.junit.Test;

public class TestUDP {

    // 發送端
    @Test
    public void send() {
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket(); // 隨機本地端口
            byte[] data = "我是發送端".getBytes();
            DatagramPacket packet = new DatagramPacket(
                data, 0, data.length,
                InetAddress.getByName("192.168.1.101"), 9090
            );
            ds.send(packet);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ds != null) ds.close();
        }
    }

    // 接收端
    @Test
    public void receive() {
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket(9090); // 綁定固定端口
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
            ds.receive(packet); // 阻塞等待
            String msg = new String(packet.getData(), 0, packet.getLength());
            System.out.println("收到: " + msg);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ds != null) ds.close();
        }
    }
}

運行步驟

  1. 先運行 receive() 監聽 9090 端口
  2. 再運行 send() 發送數據
  3. 接收端控制台輸出:收到: 我是發送端

關鍵點總結

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
要點說明
發送端 Socket無需綁定端口,系統自動分配
接收端 Socket必須綁定固定端口(9090)
DatagramPacket 構造發送需指定目標 IP/端口;接收只需緩衝區
數據邊界UDP 保留消息邊界,一次發送對應一次接收
編碼一致性發送 getBytes()、接收 new String(bytes, 0, len) 需統一字符集