TCP/IP参考模型
通过此图,可以了解UDP所在哪一层级中
代码案例
package com.hidata.devops.paas.udp; import java.io.IOException; import java.net.*; /** * @Description : UDP通信程序(发送数据) * @Date: 2023-09-25 14:34 */ public class SendMessageDemo { public static void main(String[] args) throws IOException { //发送数据 //1、创建DatagramSocket对象(快递公司) DatagramSocket datagramSocket = new DatagramSocket(); //2、打包数据 String str = "你好"; byte[] bytes = str.getBytes(); InetAddress address = InetAddress.getByName("127.0.0.1"); int port = 5000; DatagramPacket p = new DatagramPacket(bytes,bytes.length,address,port); //3、发送数据 datagramSocket.send(p); //4、释放资源 datagramSocket.close(); } }
接收数据
package com.hidata.devops.paas.udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * @Description : UDP通信程序(接收数据) * @Date: 2023-09-25 14:34 */ public class ReceiveMessageDemo { public static void main(String[] args) throws IOException { //接收数据 //1、创建DatagramSocket对象(快递公司) DatagramSocket datagramSocket = new DatagramSocket(5000); //2、接收数据包 byte[] bytes = new byte[1024]; DatagramPacket p = new DatagramPacket(bytes,bytes.length); System.out.println("111"); datagramSocket.receive(p); System.out.println("222"); //3、解析数据包 byte[] data = p.getData(); int len = p.getLength(); InetAddress address = p.getAddress(); int port = p.getPort(); System.out.println("接收到的数据:" + new String(data,0,len)); System.out.println("该数据是从" + address + "这台电脑中的 " + port + "这个端口发出的"); //4、释放资源 datagramSocket.close(); } }
运行效果
111 222 接收到的数据:你好 该数据是从/127.0.0.1这台电脑中的 57057这个端口发出的 Process finished with exit code 0
额外补充
- 1、UDP是面向无连接通信协议(通俗一点讲,就是不管是否已连接成功,直接发送数据),该特性正好与TCP协议相反,TCP协议是面向连接的通信协议,要先确保连接成功,才会发数据
- 2、UDP协议传输的 速度快,有大小限制一次最多发送64k,数据不安全,易丢失
- 3、UDP适用场景:语音通话,网络会议,视频通话等领域,对数据部分丢失,要求不是严格