UDP协议简单了解和使用

UDP协议

udp是传输层协议,提供不可靠的服务,无链接
UDP无链接,时间上不存在创建链接须要的时延,更快!
在这里插入图片描述
大部分视频是UDP的,有部分是TCP结合 UDPjava

流这一块好久没用了,记录一下bufferReader的用法
BufferedReaderBufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽可能从文件中读入字符数据并置入缓冲区,而以后若使用read()方法,会先从缓冲区中进行读取。若是缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。若是缓冲区中的数据满了,才会一次对目的地进行写出web

InputStreamReader 将字节流转换为字符流。是字节流通向字符流的桥梁。若是不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。数组

DatagramSocket udp的套接字
DatagramPacket 数据包对象socket

接收端svg

public static void main(String[] args) throws IOException {
        //创建udp的服务 ,而且要监听一个端口。
        DatagramSocket  socket = new DatagramSocket(9090);

        //准备空的数据包用于存放数据。
        byte[] buf = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length); // 1024
        //循环是必要的,由于不知道数据什么时候来
        while(true){
 //调用udp的服务接收数据,正常要一直循环等待接收数据 while(true)
        socket.receive(datagramPacket); //receive是一个阻塞型的方法,没有接收到数据包以前会一直等待。 数据实际上就是存储到了byte的本身数组中了。
        byte[] data =socket.getData();
        System.out.println("接收端接收到的数据:"+ new String(buf,0,datagramPacket.getLength())); //把datagramPacket的0到 getLength() 获取数据包长度存储的字节转成string。
         if(new String(buf,0,datagramPacket.getLength()).equals("88")){
 System.out.println("接收端接收到的数据以88结尾时跳出循环,再也不接受数据:")
}
        break;
    }

        //关闭资源
        socket.close();

    }

发送端编码

public static void main(String[] args) throws IOException {
        //创建udp的服务
        DatagramSocket datagramSocket = new DatagramSocket();
        //准备数据,把数据封装到数据包中。
        String data = "这个是我第一个udp的例子..";
        //建立了一个数据包
        DatagramPacket packet = new DatagramPacket(data.getBytes(), data.getBytes().length,InetAddress.getLocalHost() , 9090);
        //调用udp的服务发送数据包
        datagramSocket.send(packet);
        //关闭资源 ---实际上就是释放占用的端口号
        datagramSocket.close();

    }