概述
UDP(User Datagram Protocol)用户数据报协议
为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。
模型图片
使用方法
客户端
- 建立 DatagramSocket 连接
- 建立 DatagramPacket 数据包
- 发送数据包
- 关闭连接
服务端
- 设置端口
- 建立需要被接收数据包
- 接收数据包
- 关闭连接
常用api
优化
。。。
实例
客户端
/**
* @function UDP发送消息,无需接收
*/
public class UdpClientDemo01 {
public static void main(String[] args) throws Exception {
// 设置ip、端口
InetAddress ip = InetAddress.getByName("localhost");
int port = 9090;
// 发送的消息
String msg = "你好 钢镚核恒!";
// 建立socket连接
DatagramSocket datagramSocket = new DatagramSocket();
// 建立数据包
DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(), 0,msg.getBytes().length, ip,port);
// 发送数据包
datagramSocket.send(datagramPacket);
// 关闭连接
datagramSocket.close();
}
}
服务端
public class UdpServerDemo01 {
public static void main(String[] args) throws IOException {
// 设置端口
DatagramSocket datagramSocket = new DatagramSocket(9090);
// 建立缓冲区
byte[] buffer = new byte[1024];
// 建立需要被接收数据包
DatagramPacket datagramPacket = new DatagramPacket(buffer, 0, buffer.length);
// 接收数据包、阻塞
datagramSocket.receive(datagramPacket);
// 输出ip、消息
System.out.println(datagramPacket.getAddress().getHostAddress());
System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength()));
// 关闭连接
datagramSocket.close();
}
}
实现简单的聊天
客户端
/**
* 实现简单的聊天,一端发送,一端接收
*/
public class UdpClient {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(9090);
while (true){
//接收控制台数据
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
// 读取一行
String data = bufferedReader.readLine();
// 缓冲区
byte[] datas = data.getBytes();
// 建立数据包
DatagramPacket datagramPacket = new DatagramPacket(datas, 0,datas.length, new InetSocketAddress("localhost",9091));
datagramSocket.send(datagramPacket);
if(data.equals("bye")){
break;
}
}
datagramSocket.close();
}
}
服务端
public class UdpServer {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(9091);
while (true){
// 准备接收收据包
byte[] buffer = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(buffer, 0, buffer.length);
datagramSocket.receive(datagramPacket);
// 输出数据
byte[] data = datagramPacket.getData();
String receiveData = new String(data, 0, data.length);
System.out.println(receiveData);
if(receiveData.equals("bye")){
break;
}
}
datagramSocket.close();
}
}