首页 > 代码库 > 基于 UDP 协议的网络编程

基于 UDP 协议的网络编程

  • DatagramSocket DatagramPacket 实现基于 UDP 协议网络程序

  • UDP 数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证 UDP 数据报一定能够安全送到目的地,也不能确定什么时候可以抵达

  • DatagramPacket 对象封装了 UDP 数据报(<64k),在数据报中包含了发送端的 IP 地址和端口号以及接收端的 IP 地址和端口号

  • UDP 协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接

举例:
  1. public class TestUDP {
  2. @Test
  3. public void send() {
  4. DatagramSocket ds = null;
  5. try {
  6. // 构造数据报套接字并将其绑定到本地主机上任何可用的端口
  7. ds = new DatagramSocket();
  8. byte[] b = "test message".getBytes();
  9. // 创建数据报包(把要发送的数据封装进去)
  10. DatagramPacket dp = new DatagramPacket(b, 0, b.length, InetAddress.getByName("127.0.0.1"), 6789);
  11. // 发送数据报包(须<64KB,不保证投递成功)
  12. ds.send(dp);
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. } finally {
  16. ds.close();
  17. }
  18. }
  19. @Test
  20. public void receive() {
  21. DatagramSocket ds = null;
  22. try {
  23. // 构造数据报套接字并将其绑定到本地主机上将要接收发送端数据的端口
  24. ds = new DatagramSocket(6789);
  25. byte[] b = new byte[1024];
  26. // 创建数据报包(指明 b 为接收对象)
  27. DatagramPacket dp = new DatagramPacket(b, 0, b.length);
  28. // 接收数据报包
  29. ds.receive(dp);
  30. // 打印接受到的数据到控制台
  31. String str = new String(dp.getData(), 0, dp.getLength());
  32. System.out.println(str);
  33. } catch (Exception e) {
  34. e.printStackTrace();
  35. } finally {
  36. ds.close();
  37. }
  38. }
  39. }

基于 UDP 协议的网络编程