QT软件网络库使用UDP组播(基于C++语言)

使用QT发送UDP包方法

最近对QT感兴趣,虽然日常用C语言比较多,但是由于C与C++的相似性,使用QT并不复杂

QT如何引入网络?

学习QT自然要学习QT提供的强大库函数。在QT中对于网络应用的使用已经为我们封装成可直接调用的类
接下来进入主题:

  1. 如何调用QT的网络库?
    首先在我们新建完工程后,在工程中我们可以看到一个.pro文件!
    这个文件是用来告诉qmake创建makefile文件所需要的细节。打开.pro文件后,在文件中添加QT += network。这样我们的QT工程就可以使用QT提供的强大网络库了。
  2. QT的网络库在那个头文件?
    要使用QT的网络库,必不可少我们需要引用相关的.h文件。如此我们需要在对网络相关操作的文件中引用:include <qudpsocket.h>。该头文件包含了对UDP协议的所有操作函数。
  3. 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());
  1. 接收数据

接收数据前需要做最后一步准备:绑定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;
	}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值