使用QT发送UDP包方法
最近对QT感兴趣,虽然日常用C语言比较多,但是由于C与C++的相似性,使用QT并不复杂
QT如何引入网络?
学习QT自然要学习QT提供的强大库函数。在QT中对于网络应用的使用已经为我们封装成可直接调用的类
接下来进入主题:
- 如何调用QT的网络库?
首先在我们新建完工程后,在工程中我们可以看到一个.pro文件!
这个文件是用来告诉qmake创建makefile文件所需要的细节。打开.pro文件后,在文件中添加QT += network
。这样我们的QT工程就可以使用QT提供的强大网络库了。 - QT的网络库在那个头文件?
要使用QT的网络库,必不可少我们需要引用相关的.h文件。如此我们需要在对网络相关操作的文件中引用:include <qudpsocket.h>
。该头文件包含了对UDP协议的所有操作函数。 - UDP发送数据
在我们的.h文件的类中添加相关UDP变量
例如:
QUdpSocket* udpSocket;
添加完毕后,在后续的编程中使用。
新建后,我们要使用它
在初始化函数中添加
udpSocket = new QUdpSocket();
初始化完成后,我们就可以调用相关函数发送数据。
QString SignalRbIp = "192.168.3.7";
Qstring PimRbIP = "224.0.0.1"
Qstring Port = "1024";
//单播发送数据
udpSocket->writeDatagram("this is SigRb Or PIMRb Udp Package",QHostAddress(SignalRbIp),Port.toInt();
//组播发送数据
udpSocket->writeDatagram("this is SigRb Or PIMRb Udp Package",QHostAddress(PimRbIP),Port.toInt());
//广播发送数据
udpSocket->writeDatagram("this is SigRb Or PIMRb Udp Package",QHostAddress::Broadcast,Port.toInt());
- 接收数据
接收数据前需要做最后一步准备:绑定IP和相关端口,并连接槽函数
//单播绑定
udpSocket->bind(QHostAddress(SignalRbIp,1024);
connect(udpSocket,SIGNAL(readyRead()),this,SLOT(UDPReciveData()));
//广播绑定
udpSocket->bind(QHostAddress("255.255.255.255",1024);
connect(udpSocket,SIGNAL(readyRead()),this,SLOT(UDPReciveData()));
//组播绑定
udpSocket->bind(QHostAddress::AnyIpv4,1024,QUdpSocket::ShareAddress);
connect(udpSocket,SIGNAL(readyRead()),this,SLOT(UDPReciveData()));
//将组播地址加入组播
udpSocket->joinMulticastGroup(QHostAddress(PimRbIP));
/******************************
* 函数名:UDPReciveData
* 作者:MelyLenient
* 函数功能:接收UDP数据
* 输入参数:无
* 返回参数:无
******************************/
void MainWindow::UDPReciveData()
{
QByteArray udpRecv; //接收存储
while(udpSocket->hasPendingDatagrams())
{
//重定义缓存大小为本次接收数据长度
udpRecv.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(udpRecv.data(),udpRecv.size(),&dstAddress,&dstPort);
QString showData = udpRecv;
qdebug()<<"recive Data is:"<<showData;
}
}