本文已参与「新人创作礼」活动,一起开启掘金创作之路
声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!!
文章目录
一、基于UDP的socket编程
对于基于UDP通信来说,通信双方不需要建立连接,也就不需要有一方去等待连接。所以说它们对于服务器和客户端的这种概念不是很明显。
对于基于UDP通信的双方,有一方是需要先启动的,如果有一方在发送数据的时候,接收方没有启动,那么数据就会存在没有接受者而丢失,我们可以把接收者作为服务器,发送者作为客户端。
那么和基于TCP的通信比较的话,我们会发现作为服务器的一方,总是先启动的一方,在java中编写基于UDP通信的程序是非常简单的。
我们首先创建数据报套接字DatagramSocket,基于UDP的套接字我们可以称为数据报套接字,当你构造数据报套接字之后,我们可以利用DatagramSocket类中的这两个方法:
一个是receive方法去接收一个数据包,
一个是send方法去发送一个数据包。
具体如下图:
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
UDP 的主要特点
1、UDP 是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。
2、UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
3、UDP 是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文。
4、UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。很多的实时应用(如IP电话、实时视频会议等)要去源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太多的时延。UDP正好符合这种要求。
5、UDP 支持一对一、一对多、多对一和多对多的交互通信。
6、UDP 的首部开销小,只有8个字节,比TCP的20个字节的首部要短。
UDP适用场景
通常情况下,UDP的使用范围是较小的,一般可以在以下场景使用
1、实时性要求很高,并且几乎不能容忍重传:
2、TCP实在不方便实现多点传输的情况;
3、需要进行NAT穿越;
4、对网络状态很熟悉,确保udp网络中没有氓流行为,疯狂抢带宽;
5、熟悉UDP编程。
二、基本步骤
接收端程序的基本步骤:
①调用DatagramSocket(int port)创建一个数据报套接字,并绑定到指定端口上;
②调用DatagramPacket(byte[]buf,int length),建立一个字节数组以接收UDP包。
③调用DatagramSocket类的receive(),接收UDP包。
④最后关闭数据报套接字。
发送端程序的基本步骤:
①调用DatagramSocket()创建一个数据报套接字;
②调用DatagramPacket(byte[]buf,int offset,int length,InetAddress address,int port),建立要发送的UDP包。
③调用DatagramSocket类的send(),发送UDP包。
④最后关闭数据报套接字。