相比于TCP协议,UDP有它的优势和应用场景。常用于语音和视频通信。而且除了端对端的通信以外,还支持广播和多播。
常用函数介绍
-
发送数据包到目标地址的端口号
qint64 QUdpSocket::writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)
-
绑定接收消息的IP地址和端口号。
bool bind(const QHostAddress &address, quint16 port = 0, BindMode mode = DefaultForPlatform);
-
接收到数据包信号
void readyRead();
-
连接中是否有数据包,必须接收完才能继续接收
bool hasPendingDatagrams() const;
-
数据包的长度
qint64 pendingDatagramSize() const;
-
读取数据包
qint64 readDatagram(char *data, qint64 maxlen, QHostAddress *host = Q_NULLPTR, quint16 *port = Q_NULLPTR);
-
如果使用多播,则加入多播地址
bool joinMulticastGroup(QHostAddress("224.0.0.131"));
使用案例
头文件
#include <QWidget>
class QUdpSocket;
class QLineEdit;
class QPushButton;
class QTextBrowser;
class UdpClient :public QWidget
{
Q_OBJECT
public:
UdpClient(QWidget *parent);
bool setSendHostAddress(const QString &addr, int part);
bool setReceivePart(const QString &addr, int part);
public slots:
void slotButtonClicked();
private:
QUdpSocket *_udpSocket;
QLineEdit *_lineEdit;//输入数据
QPushButton *_button;//发送数据命令
QTextBrowser *_textBrowser;//显示接收到的数据
QString _sendAddress;
int _sendPart;
int _receivePart;
};
具体实现
#include "UdpTest.h"
#include <QUdpSocket>
#include <QLineEdit>
#include <QPushButton>
#include <QGridLayout>
#include