UDP是一个传输协议:
    特点:传输的效率高,但是不稳定,存在丢包的情况
    通常用于不是非常要求专业的传输,比如:微信语音和视频,网络游戏

    Java中提供好了这个内容:
    发送和接收的数据都使用Socket类:套接字
    DatagramSocket
    数据打包相关的类:
    DatagramPacket

    使用UDP的步骤:

    1. 建立连接:DatagramSocket(int port):指定端口号,方便发送端寻找
    2. 建立数据包,用于接收数据:DatagramSocket(byte[ ] buf,int langth)
    3. 调用socket的方法
    4. 解析数据
    5. 关闭socket

    发送端和接收端都是相对的程序

    发送端:

    1. package Test23_Demo.Demo02;/*
    2. @create 2020--12--16--11:21
    3. */
    4. import java.io.IOException;
    5. import java.net.*;
    6. /**
    7. * 发送端
    8. */
    9. public class UDPSend {
    10. public static void main(String[] args) {
    11. //建立连接
    12. try {
    13. DatagramSocket ds = new DatagramSocket();
    14. //创建数据
    15. String s = "I Love Java";
    16. //打包
    17. byte[] data = s.getBytes();//将字符串转为字节数组
    18. int length = data.length;
    19. InetAddress address = InetAddress.getByName("localhost");
    20. int port = 1235;//必须与接收端的一致
    21. DatagramPacket dp = new DatagramPacket(data, length, address , port);
    22. //调用方法进行发送
    23. ds.send(dp);
    24. //关闭连接
    25. ds.close();
    26. } catch (SocketException | UnknownHostException ignored) {
    27. } catch (IOException e) {
    28. e.printStackTrace();
    29. }
    30. }
    31. }

    接收端:

    1. package Test23_Demo.Demo02;/*
    2. @create 2020--12--16--10:55
    3. */
    4. import java.io.IOException;
    5. import java.net.DatagramPacket;
    6. import java.net.DatagramSocket;
    7. import java.net.InetAddress;
    8. import java.net.SocketException;
    9. /**
    10. * 当前的服务器用于接收数据
    11. */
    12. public class UDPService {
    13. public static void main(String[] args) {
    14. //建立连接 - java.net.DatagramSocket;
    15. try {
    16. DatagramSocket ds = new DatagramSocket(1235);
    17. //建立数据包,用于接收数据
    18. byte[] buf = new byte[1024];
    19. DatagramPacket dp = new DatagramPacket(buf, buf.length);
    20. //调用socket方法接收数据
    21. ds.receive(dp);
    22. //解析数据 - 针对的是数据包进行解析 - dp
    23. InetAddress sendAddress = dp.getAddress();
    24. String sendIP = sendAddress.getHostAddress();
    25. int sendPort = dp.getPort();//端口号
    26. //获取数据包中的数据
    27. byte[] data = dp.getData();
    28. int length = dp.getLength();
    29. //将字节数组转换成字符串 - String的构造函数
    30. String string = new String(data, 0, length);
    31. //输出
    32. System.out.println("接收到" + sendIP + "的,端口号为" + sendPort + "的数据" + string);
    33. ds.close();
    34. } catch (IOException ignored) {
    35. }
    36. }
    37. }