### UDP协议的本质
UDP协议,全称为User Datagram Protocol,即用户数据报协议,主要用于支持计算机之间数据传输的网络应用。许多网络视频会议系统等客户/服务器模式的网络应用,都依赖于UDP协议。尽管UDP协议的光环曾被其他类似协议所掩盖,但至今它仍被视为一种实用且高效的网络传输层协议。
UDP协议通过使用端口号为不同的应用保留独立的数据传输通道。与TCP协议一样,UDP通过这一机制,实现了在同一时刻对多项应用同时发送和接收数据的支持。UDP数据报的发送和接收依赖于源端口和目标端口,其中静态端口是预先预留或注册的,而动态端口则是未被注册的。
数据报的长度包括固定的报头和可变的数据部分。理论上,包含报头的数据报最大长度为65535字节,但在实际应用中,数据报的大小往往会受到限制。
UDP协议利用报头中的校验值来确保数据的安全。发送方通过特定算法计算出校验值,接收方在收到数据后需要重新计算校验值以验证数据是否在传输过程中遭到篡改或损坏。值得注意的是,校验功能在UDP中是可选的,关闭它可以提升系统性能,这与TCP协议的强制性校验值要求不同。
### 一个实现案例
下面,我们通过一个具体的实现案例来了解UDP协议的应用。假设我们有一个触摸屏,可以在液晶屏上进行画图,同时通过网络将数据传输到计算机屏幕上显示,并能够由计算机控制清除液晶屏上的图形。
实现步骤如下:
1. 新建工程,并初始化网络配置,包括获取ip地址、子网掩码、网关以及网卡地址等。 2. 定义计算机端的套接字,并作为全局变量。 3. 编写Main_Task任务及消息循环,主要负责响应触摸屏消息,并在屏幕上画图。同时,将触摸屏上的数据通过UDP协议传输到计算机上。
触摸屏的消息处理与键盘消息类似,消息类型为OSM_TOUCH_SCREEN,消息参数中包含了触摸屏的动作信息,如单击、双击、按下、抬起和移动等。消息参数中的坐标信息则用来确定绘图的位置。
当用户在触摸屏上按下时,使用MoveTo()函数设置绘图的起始点坐标;当用户移动触摸屏时,使用LineTo()函数绘制线段。通过这种方式,用户的触摸操作不仅能在液晶屏上显示,还能实时传输到计算机屏幕上。
通过这个案例,我们可以看到UDP协议在网络应用中的灵活性和高效性,它为各种实时性要求较高的网络应用提供了坚实的基础。随着技术的不断发展,UDP协议的应用也将越来越广泛,为我们的生活和工作带来更多便利。
随着人工智能的应用,ARM产品已经遍布到各个领域:工业控制、无线通讯领域、消费类电子产品、成像和安全产品,包括现在流行的数码相机和打印机中绝大部分采用ARM技术,手机中的32位SIM智能卡也采用了ARM技术。除此以外,ARM微处理器及技术还应用到许多不同的领域,并会在将来取得更加广泛的应用,因此,ARM与其它平台之间通讯就显得尤为重要。
1.UDP协议本质
UDP协议是英文User Datagram Protocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。
UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535.一般来说,大于49151的端口号都代表动态端口。
数据报的长度是指包括报头和数据部分在内的总的字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据工作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。
UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。
如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。其实在UDP协议中校验功能是可选的,如果将其关闭可以使系统的性能有所提升。这与TCP协议是不同的,后者要求必须具有校验值。
2.实现案例
实现案例如下:在触摸屏进行画图,使其在液晶屏上显示,同时通过网络传输数据,使其在计算机屏幕上显示,并由计算机控制清除液晶屏上的图形。
步骤如下:
(1)新建工程
(2)在main.c文件中编辑初始化网络函数void InitNetWork()//初始化网络{
U32 ipaddr32,ipmaskaddr32,ipgateaddr32;
U8 *MAC;
iPaddr32=Get_ipaddr(); //获取IP地址
ipmaskaddr32=Get_maskaddr();//获取子网掩码
ipgateaddr32=Get_gwaddr(); //获取网关
Mac=Get_mac(); //获取网卡地址NetPortChoose(0);
//选择网口,必须在配置网络以前进行
initOSNet(ipaddr32, ipmaskaddr32,
ipgateaddr32,Mac);//配置网络
OSTimeDly(1000);//任务挂起1秒
printk(“init Ethernet and UDP is
ok!\n”);
}
(3)定义计算机端套接字,全局变量(4)编写Main_Task任务及消息循环主要负责响应触摸屏消息,在屏幕上画图,然后将数据传输到计算机上。
对触摸屏消息的处理和键盘消息类似,其消息类型pMsg->Message为OSM_TOUCH_SCREEN,消息参数pMsg->LParam中包含了触摸屏的动作信息,定义如下:
#define TCHSCR_ACTION_NULL
0
#define TCHSCR_ACTION_CLICK 1 //触摸
屏单击
#define TCHSCR_ACTION_DBCLICK 2 //触
摸屏双击
#define TCHSCR_ACTION_DOWN 3 //触摸
屏按下
#define TCHSCR_ACTION_UP 4 //触摸
屏抬起
#define TCHSCR_ACTION_MOVE 5 //触摸
屏移动
消息参数pMsg->WParam中则包含了触摸
点的坐标信息,低16位是X坐标值,高16位是Y坐标值。这里当触摸屏产生“按下”动作后采用MoveTo()函数设置绘图起始点坐标,当产生“移动”动作后采用LineTo()函数绘制线段。