广轻电气091 发表于 2019-6-6 20:24:54

嵌入式Linux应用程序开发-(9)UDP网络通信应用程序(UDP-Soc...

基于UDP协议的网络通信应用程序(UDP-Socket)
前两篇文章介绍了基于TCP/IP协议的网络通信应用程序。
嵌入式Linux应用程序开发-(7)TCP-IP网络通信应用程序(TCP-Client)
嵌入式Linux应用程序开发-(8)TCP-IP网络通信应用程序(TCP-Server)

相比起TCP/IP协议的可靠,面向连接,基于字节流通信这些特性,UDP协议是一种轻量级,不可靠,基于数据报的传输协议。
很多人会问,为什么UDP协议传输不可靠还要继续使用它?那是因为UDP协议使用起来很方便,不需要建立连接,资源消耗少,通信效率高,
在线播放音频或者视频的时候,使用UDP协议比使用TCP/IP协议有更高的传输效率,因为在这种使用场景下,即使丢失一两个数据包,对结果都影响不大。
在网络质量不佳的情况下,使用UDP协议传输可能丢包严重,开发者应该注意根据不同的场合选择合适的协议。

对于UDP传输协议,数据报有以下三种传输方式:
单播:UDP单播传输,即发送方指定接收方的IP地址和端口号,把数据直接发送到对方。这种属于一对一的数据传输方式。
组播:接收方需要加入组播地址和端口号,发送方往组播的IP地址发送数据,只要是加入了组播地址的设备,都能收到数据,属于一对多的数据传输方式。
广播:接收方不需要加入广播地址,只指定接收的端口号,发送方往广播的IP地址发送数据,则局域网内的所有设备都能收到数据,属于一对多的数据传输方式。

总的来说,不管是单播,组播,还是广播,对于发送方,每一次数据传输都需要指定接收方的IP地址和端口。
而对于接收方,单播和广播的接收方式是一样的,都是监听局域网内所有的IP地址,组播则多了一个步骤,需要加入指定的组播地址才能接收组播数据。

使用嵌入式QT进行UDP协议的网络通信应用程序开发,QT的network类库提供了QUdpSocket类,这个类继承于QAbstractSocket类,并向应用层提供了UDP通信的基本操作方法,
如绑定函数bind(),加入组播joinMulticastGroup(),离开组播leaveMulticastGroup(),数据报的读写操作函数,等等。具体可以参阅 QtNetwork/qudpsocket.h 文件的内容。

目标:使用QT提供的UDP网络通信类,实现一个简单的Udp_Socket数据收发应用程序
功能:
(1)界面显示开发板本机IP地址。
(2)可手动输入接收端的IP地址和端口。
(3)可选择UDP数据报的发送方式:组播,单播,广播。
(4)界面显示UDP协议的网络收发数据,并提供清屏按钮。
(5)提供手动发送按钮和自动发送按钮。
开发板运行Udp_Socket收发工具后,界面如下图所示:

界面描述:
(1)Udp_Socket收发工具运行后,在界面显示开发板的IP地址。
(2)可输入接收端的IP地址和端口。
(3)选择UDP的发送方式,单播,组播或广播。
(4)点击 ,往指定的IP地址和端口发送数据。
(5)点击 ,以一秒的频率间隔发送数据。

基于UDP协议的 Udp_Socket 应用程序开发过程,请点击这里

prince2010 发表于 2019-6-7 09:30:40

帮顶{:victory:}

广轻电气091 发表于 2019-6-7 12:38:03

prince2010 发表于 2019-6-7 09:30
帮顶

感谢帮顶

xiaohuoban 发表于 2019-6-7 16:21:54

虽然还看不懂,也顶

广轻电气091 发表于 2019-6-7 17:32:37

xiaohuoban 发表于 2019-6-7 16:21
虽然还看不懂,也顶

优秀如你,很快就看懂了{:lol:}

zhousun 发表于 2019-6-7 18:38:19

向楼主学习,谢谢共享

广轻电气091 发表于 2019-6-7 21:08:19

zhousun 发表于 2019-6-7 18:38
向楼主学习,谢谢共享

感谢支持!

hmsfeng 发表于 2019-6-24 14:16:30

楼主,没有pdf分享了么?

广轻电气091 发表于 2019-6-24 15:38:11

hmsfeng 发表于 2019-6-24 14:16
楼主,没有pdf分享了么?

有pdf 啊,在blog里面

luohui5003 发表于 2019-6-24 17:09:12

多谢楼主。
页: [1]
查看完整版本: 嵌入式Linux应用程序开发-(9)UDP网络通信应用程序(UDP-Soc...