类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序。
UDP数据报通过数据报套接字 DatagramSocket 发送和接收, 系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。
DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接。 如同发快递包裹一样。
UDP网络通信流程:
- DatagramSocket与DatagramPacket
- 建立发送端,接收端
- 建立数据包
- 调用Socket的发送、 接收方法
- 关闭Socket
发送端与接收端是两个独立的运行程序
package com.senior.internetsocket;
import org.junit.Test;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* @author eden
* @Description
* @create projectTest-com.senior.internetsocket:2021-05-14-13:15
* @since
*/
public class UDPTest {
@Test
public void sender() throws IOException {
//创建一个socket
DatagramSocket datagramSocket = new DatagramSocket();
//封装一个数据报在packet中
String s = new String("hello,baidu.com");
DatagramPacket packet = new DatagramPacket(s.getBytes(),0,s.length(),
InetAddress.getLocalHost(),9999);
//发送数据报
datagramSocket.send(packet);
datagramSocket.close();
}
@Test
public void receiver() throws IOException {
//创建一个socket
DatagramSocket socket = new DatagramSocket(9999);
byte[] buffer = new byte[100];
DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
socket.receive(packet);
//输出到控制台显示
System.out.println(new String(packet.getData(), 0, packet.getLength()));
socket.close();
}
}
该博客图片来源于尚硅谷宋老师教学课件