udp是传输层协议,提供不可靠的服务,无链接
UDP无链接,时间上不存在创建链接须要的时延,更快!
大部分视频是UDP的,有部分是TCP结合 UDPjava
流这一块好久没用了,记录一下bufferReader的用法
BufferedReader和BufferedWriter类各拥有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(); }