嵌入式平台lwip协议栈的udp通讯搭建

开篇介绍

上一节介绍了,在移植lwip协议栈到嵌入式平台后,成功搭建了tcp通讯;后续因为项目开发需要,为了简化tcp报文繁琐的解析过程,节省片上资源,更加专注于数据处理,我们选择牺牲一定的通讯严谨性来达到资源最优化,毕竟项目是属于本地局域网直连。
两者区别:
TCP与UDP一样,都是传输层的协议,但是提供的服务却不同。UDP为上层应用提供的是一种不可靠、无连接的服务,而TCP则提供一种面向连接、可靠的字节流传输服务,TCP让两个主机建立连接的关系,应用数据以数据流的形式进行传输,这与UDP是不一样的。
UDP的特点:
1)无连接、不可靠。
2)尽可能提供交付数据服务,出现差错直接丢弃,无反馈。
3)面向报文,发送方的UDP拿到上层数据直接添加UDP首部,校验后递给IP层,而接收的一方在接收到UDP报文后简单进行校验,然后直接去除数据递交给上层应用。
4)支持一对一、一对多、多对一、多对多的交互通信。
5)速度快UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,是一个无状态的传输协议,所以它在传递数据时非常快,即使在网络拥塞的时候UDP也不会降低发送数据的速度。
UDP虽然有很多缺点,但是也适用于很多场合,因为在如今的网络环境下,UDP传输出现错误的概率是很小的,并且它的实时性非常好,常用于实时视频的传输,比如直播、网络电话等,适用于对传输速度有要求,并且可以容忍出现差错的数据传输中。

一、udp块创建

作为客户端,需要从雷达获取数据,同样地,我们需要编写udp客户端的程序。调用udp的raw接口:udp_new()创建udp块。往后,就能搭建udp通讯了。
在这里插入图片描述

udp块的创建过程比tcp简单,udp也必须通过端口号来唯一识别数据的源头和去向,这里雷达的IP地址为192.168.10.160,端口号TCP_CLIENT_PORT为2105,在添加雷达端的IP地址到注册列表后,即可发起udp链接。然后由于雷达在udp下传输数据时,udp数据报的目的地址是全1,也就是广播地址,因此,我们需要通过udp_bind()来绑定udp块到广播地址,方可接收雷达的广播数据报;然后调用udp_connect(),向雷达端发起udp链接,链接成功后注册接收完成回调函数udp_recv();若失败则通过调用udp_remove()释放udp块内存。

二、网口断线、重连检测

为做得更像是一个正常的网口,具有插拔重连的功能。这里在tcp块创建成功后,我们在循环里轮询网线的连接状态,若网线断开了,则先将网口连接关闭并停止网口,然后释放tcp块占用的内存。若网线重连了,则对网口重新启动、配置通讯模式、启动网卡,最后重新创建tcp块,创建成功后继续发起对服务端的链接。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、测试效果

1.连接网线后,开发板上电:
在这里插入图片描述
2.拔出网线:
在这里插入图片描述
3.重新连接网线:
在这里插入图片描述

四、总结

各种暴力测试情况下,网口都能正常运作,但是插拔的时间间隔不能太快,因为其中网卡的启动、udp块的建立和销毁,都需要一定时间,若过快的插拔网线,会使嵌入式端内存或时间处理报错。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值