概述
UDP协议与TCP协议不同,UDP属于不可靠协议,UDP在使用Socket之前不需要进行连接(三次握手)。Java中通过DatagramPacket和DatagramSocket类来使用UDP Socket。
代码示例
客户端
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
/**
* @author sxt
* @date 2021-07-01
* @describe 模拟客户端
*/
public class UDPClient {
public static void main(String[] args) throws IOException {
InetAddress address = InetAddress.getByName("localhost"); // 服务器地址
int port = 8800; // 端口
while (true){
// 1、向服务器发送数据
Scanner scanner = new Scanner(System.in); // 等待键盘输入,回车结束
String send = scanner.nextLine();
byte[] data = send.getBytes(); // 字符串转byte数组
DatagramPacket packet = new DatagramPacket(data, data.length, address, port); // 创建数据包
DatagramSocket socket = new DatagramSocket(); // 创建DatagramSocket对象
socket.send(packet); // 发送数据报文
// 2、接收服务器端响应
byte[] data2 = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(data2, data2.length); // 创建接收数据包
socket.receive(packet2); // 等待接收服务器响应数据,阻塞
String reply = new String(data2, 0, packet2.getLength()); // 解析数据
System.out.println("我是客户端,服务器说:" + reply); // 打印
socket.close(); // 关闭资源
}
}
}
服务端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* @author sxt
* @date 2021-07-01
* @describe
*/
public class UDPServer {
public static void main(String[] args) throws IOException {
// 1、启动服务器,等待响应
DatagramSocket socket = new DatagramSocket(8800);
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length); // 创建接收数据包
System.out.println("****服务器端已经启动,等待客户端发送数据");
while (true){
socket.receive(packet); // 等待接收消息,接收到消息前会一直阻塞
String info = new String(data, 0, packet.getLength()); // 读取数据
System.out.println("我是服务器,客户端说:" + info);
// 2、向客户端响应数据
InetAddress address = packet.getAddress(); // 接收方的地址
int port = packet.getPort(); // 接收方的端口
String send = "ok"; // ack响应
byte[] data2 = send.getBytes();
DatagramPacket packet2 = new DatagramPacket(data2, data2.length,address,port); // 创建数据包
socket.send(packet2); // 发送响应消息
}
}
}
UDP和TCP区别
1.TCP是面向连接的协议,而UDP是无连接协议,即UDP在发送数据之前不需要建立连接。
2.可靠性和有序性
- TCP提供了交付保证(校验、重传控制、序号标识、滑动窗口协议和确认应答)。
- UDP不提供任何序列性保证和交付保证。
- TCP是全双工的可靠通信,UDP则是不可靠信道。
- UDP具有较好的实时性,工作效率要比tcp略高。
- TCP对系统资源要求较多,TCP也被认为是重量级协议,UDP协议则是一个轻量级的协议。