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

Java UDP 通信:DatagramSocket 與 DatagramPacket 完整示例

     編輯:關於C++

核心類

  • DatagramSocket:UDP 套接字,綁定端口收發數據報。
  • DatagramPacket:數據報封裝,含數據緩衝區、長度、目標/源地址端口。
  • InetAddress:IP 地址封裝。

服務端(發送方)

package test;
import java.io.IOException;
import java.net.*;

public class Server {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket(3000);  // 綁定本地端口 3000
        String str = "Hello";
        byte[] buf = str.getBytes();
        InetAddress ia = InetAddress.getByName("localhost");
        DatagramPacket dp = new DatagramPacket(buf, buf.length, ia, 9000); // 目標 9000
        ds.send(dp);
        ds.close();
    }
}

客戶端(接收方)

package test;
import java.io.IOException;
import java.net.*;

public class Client {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket(9000);  // 綁定本地端口 9000
        byte[] buf = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buf, buf.length);
        ds.receive(dp);  // 阻塞等待
        String received = new String(dp.getData(), 0, dp.getLength());
        String info = received + " from " + dp.getAddress().getHostAddress() + ":" + dp.getPort();
        System.out.println(info);
        ds.close();
    }
}

關鍵點總結

常見坑

  1. 防火牆攔截 UDP 端口,需放行。
  2. 接收緩衝區太小導致數據截斷。
  3. 廣播/組播需設置 setBroadcast(true) / joinGroup()。
  4. 高併發下建議用 NIO DatagramChannel 替代阻塞 API。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
項目說明
無連接UDP 不建立連接,每個包獨立寻址
不可靠可能丟包、重複、亂序,應用層需自行處理
發送端口new DatagramSocket(localPort) 綁定發送端口
接收緩衝需預分配 byte[],長度 ≥ 最大預期包
獲取發送者dp.getAddress(), dp.getPort()
數據長度dp.getLength() 為實際收到字節數