需要了解TCP协议的,可以看往期文章
https://blog.csdn.net/weixin_43860634/article/details/133274701
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适用场景:语音通话,网络会议,视频通话等领域,对数据部分丢失,要求不是严格