UDP简介
UDP:User Datagram Protocol,中文名称为用户数据报协议。
它为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。
UDP的特点是无连接、不可靠、快速传输。
UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。
通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。
UDP如何收发数据
UDP是可靠的网络协议,它在通信协议的两端各建立了一个Socket对象,但这两个指数发送,接收的对象。因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念。
Java提供了DatagramSocket类作为基于UDP协议的Socket。
UDP发送数据
UDP发送步骤
1、创建发送端的Socket对象(DatagramSocket);
2、创建数据,并把数据打包;
3、调用DatagramSocket对象的方法发送数据;
4、关闭发送端;
固定输入发送UDP
public static void main(String[] args) throws IOException { //创建发送端的Socket对象(DatagramSocket) DatagramSocket ds = new DatagramSocket(); //创建数据,并把数据打包; String str = "你好呀,Java,我来啦"; DatagramPacket dp = new DatagramPacket(str.getBytes(),str.getBytes().length, InetAddress.getByName("172.16.47.101"),10001); //️调用DatagramSocket对象的方法发送数据; ds.send(dp); //关闭发送端; ds.close(); }
手动输入发送UDP
可以进一步优化,将写死的输入改为手动输入。
public static void main(String[] args) throws IOException { //创建发送端的Socket对象 DatagramSocket ds = new DatagramSocket(); //键盘录入 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line; while ((line = br.readLine()) != null){ if ("88".equals(line)){ break; } //创建数据,并把对象打包 byte[] bytes = line.getBytes(); DatagramPacket dp = new DatagramPacket(bytes,bytes.length, InetAddress.getByName("172.16.47.101"),12001); ds.send(dp); } //关闭数据源 ds.close(); }
代码运行输出结果
UDP接收数据
接收的步骤
1、创建接收端的Socket对象(DatagramSocket);
2、创建一个数据包,用于接收数据;
3、调用DatagramSocket对象的方法接收数据;
4、解析数据包,并把数据文档在控制台显示;
5、关闭接收端;
接收UDP发送的数据
public static void main(String[] args) throws IOException { //创建接收端的Socket对象(DatagramSocket); DatagramSocket ds = new DatagramSocket(12001); //创建一个数据包,用于接收数据; byte[] bytes = new byte[1024]; DatagramPacket dp = new DatagramPacket(bytes,bytes.length); //调用DatagramSocket对象的方法接收数据; ds.receive(dp); byte[] datas = dp.getData(); int length = dp.getLength(); String dataStr = new String(datas,0,length); System.out.println("udp接收到的数据:" +dataStr); ds.close(); }