import org.junit.Test;import java.io.*;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetSocketAddress;/** * @author * @date 2019/7/23 */public class TestUdp { /** * udp 发送数据: * 1.建立DatagramSocket通信,占用端口建立通信 * 2.创建数据包DatagramPacket,指定数据包发向的端口,不会发生端口占用行为 * 3.发送行为 * 4.关闭通信 * * @param * @return * @author * @date 2019/7/23 10:51 */ @Test public void udpSend) throws IOException { DatagramSocket datagramSocket = new DatagramSocket9999); String msg = “msg msg66666666666666!”; DatagramPacket datagramPacket = new DatagramPacketmsg.getBytes), msg.getBytes).length, new InetSocketAddress”localhost”, 6666)); datagramSocket.senddatagramPacket); datagramSocket.close); } /** * udp 接收数据: * 1.建立通信DatagramSocket,占用端口建立通信。注意:该连接监听接收端口为发送一方的DatagramPacket的传输端口 * 2.创建数据包DatagramPacket;仅作为接收数据的存储,无需再监听端口 * 3.接收行为 * 3.1 进入循环后receive方法在没有收到发送数据时进行堵塞,收到则通过 * 3.2 接收的数据及接收数据的实际长度由获取到的实际数据包datagramPacket获取 * 4.关闭通信 * * @param * @return * @author * @date 2019/7/23 10:51 */ @Test public void udpRecive) throws IOException { DatagramSocket client = new DatagramSocket6666); //step 1 byte[] bytes = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacketbytes, bytes.length); int count = 0; while count < 3) { System.out.println”into circle!”); client.receivedatagramPacket); //step 3.1 System.out.println”passed receive!”); byte[] data = datagramPacket.getData); //step 3.2 int length = datagramPacket.getLength); //step 3.2 System.out.printlncount + “times received data:” + new Stringdata, 0, length)); count++; } System.out.println”接收次数用完,退出程序!”); client.close); }}
流程总结:建立通信(对应释放通信动作),建立数据存储对象(包,缓冲区等),具体操作(关联通信与数据存储对象,再执行具体行为)