java udp协议DatagramSocket类使用

 1 package com.temp;
 2 
 3 
 4 import org.junit.Test;
 5 
 6 import java.io.*;
 7 import java.net.DatagramPacket;
 8 import java.net.DatagramSocket;
 9 import java.net.InetSocketAddress;
10 
11 /**
12  * @author
13  * @date 2019/7/23
14  */
15 public class TestUdp {
16 
17     /**
18      * udp 发送数据:
19      * 1.建立连接DatagramSocket,占用端口建立连接
20      * 2.创建数据包DatagramPacket,指定数据包发向的端口,不会发生端口占用行为
21      * 3.发送行为
22      * 4.关闭连接
23      *
24      * @param
25      * @return
26      * @author
27      * @date 2019/7/23 10:51
28      */
29     @Test
30     public void udpSend() throws IOException {
31         DatagramSocket datagramSocket = new DatagramSocket(9999);
32         String msg = "msg msg66666666666666!";
33         DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(), msg.getBytes().length, new InetSocketAddress("localhost", 6666));
34         datagramSocket.send(datagramPacket);
35         datagramSocket.close();
36     }
37 
38     /**
39      * udp 接收数据:
40      * 1.建立连接DatagramSocket,占用端口建立连接。注意:该连接监听接收端口为发送一方的DatagramPacket的传输端口
41      * 2.创建数据包DatagramPacket;仅作为接收数据的存储,无需再监听端口
42      * 3.接收行为
43      *  3.1 进入循环后receive方法在没有收到发送数据时进行堵塞,收到则通过
44      *  3.2 接收的数据及接收数据的实际长度由获取到的实际数据包datagramPacket获取
45      * 4.关闭连接
46      *
47      * @param
48      * @return
49      * @author
50      * @date 2019/7/23 10:51
51      */
52     @Test
53     public void udpRecive() throws IOException {
54         DatagramSocket client = new DatagramSocket(6666);   //step 1
55         byte[] bytes = new byte[1024];
56         DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
57         int count = 0;
58         while (count < 3) {
59             System.out.println("into circle!");
60             client.receive(datagramPacket);  //step 3.1
61             System.out.println("passed receive!");
62             byte[] data = datagramPacket.getData();     //step 3.2
63             int length = datagramPacket.getLength();    //step 3.2
64 
65             System.out.println(count + "times received data:" + new String(data, 0, length));
66             count++;
67         }
68         System.out.println("接收次数用完,退出程序!");
69         client.close();
70     }
71 
72 }

流程总结:建立连接(对应释放连接动作),建立数据存储对象(包,缓冲区等),具体操作(关联连接与数据存储对象,再执行具体行为)

猜你喜欢

转载自www.cnblogs.com/swz1104919/p/11230784.html
今日推荐