zl程序教程

您现在的位置是:首页 >  其它

当前栏目

DatagramSocket类简单使用

使用 简单 DatagramSocket
2023-06-13 09:12:06 时间

大家好,又见面了,我是你们的朋友全栈君。

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 DatagramSocket(9999);
        String msg = "msg msg66666666666666!";
        DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(), msg.getBytes().length, new InetSocketAddress("localhost", 6666));
        datagramSocket.send(datagramPacket);
        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 DatagramSocket(6666);   //step 1
        byte[] bytes = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
        int count = 0;
        while (count < 3) {
            System.out.println("into circle!");
            client.receive(datagramPacket);  //step 3.1
            System.out.println("passed receive!");
            byte[] data = datagramPacket.getData();     //step 3.2
            int length = datagramPacket.getLength();    //step 3.2

            System.out.println(count + "times received data:" + new String(data, 0, length));
            count++;
        }
        System.out.println("接收次数用完,退出程序!");
        client.close();
    }

}

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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/134226.html原文链接:https://javaforall.cn