学习目标:使用udp通信
前置环境
运行环境:qt creator 4.12
学习内容
UDP 协议基础知识
1、UDP(用户数据报协议)是轻量的、不可靠的、面向数据报、无连接的协议,用于可靠性要求不高的场合。两个应用程序之间进行UDP 通信不需先建立持久的 socket 连接,UDP 每次发送数据报都需要指定目标地址和端口。
2.ÙDP 报文没有可靠性保证、顺序保证和流量控制字段等,可靠性一较差。但是正因为 UDP 协议的控制选项较少在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如 DNS、TFTP、SNMP 等。
3、UDP 报头由 4个域组成,其中每个域各占用 2 个字节,具体包括
源端口号、目标端口号、数据包长度、校验值。端口号有效范围0--65535,假设端口号大于 49151的端口都代表动态端口
4、QUdpSocket类从QAbstractSocket类继承 基本跟QTcpSocket共用大部分的接口函数,主要区别在于 QUdpSocket 以数据报传输数据,不是以连续的数据流,发送方发送数据报使用函数QUdpSocket::writeDataGram(),数据报长度一般不超过 512 个字节,每个数据报包含发送方和接收方的 IP 地址和端口等数据信息。
QUdpSocket是Qt中用于UDP网络通信的类,它提供了以下一些常用的成员函数:
-
bind(const QHostAddress &address, quint16 port)
: 绑定到指定的地址和端口。 -
bind(quint16 port, BindMode mode = DefaultForPlatform)
: 绑定到指定的端口,并设置绑定模式。 -
writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)
: 将指定的数据报发送到指定的主机和端口。 -
writeDatagram(const char *data, qint64 size, const QHostAddress &host, quint16 port)
: 将指定大小的数据发送到指定的主机和端口。 -
readDatagram(char *data, qint64 maxSize, QHostAddress *address = nullptr, quint16 *port = nullptr)
: 从接收缓冲区中读取一个数据报,并将其存储在指定的缓冲区中。 -
pendingDatagramSize()
: 返回下一个待读取的数据报的大小。 -
hasPendingDatagrams()
: 检查是否有待读取的数据报。 -
joinMulticastGroup(const QHostAddress &groupAddress)