qt widgets UDP稳定接收大数据
·
今天主要分享一下网络的UDP通信,如何实现UDP收到数据 之后,稳定高效的把收到的所有数据存起来去分析使用,正常网上一搜是有很多qt udp通信的例程,本来我不想写个博来说 这个,但是在简单的移植一个udp例程后,发现仍然有很多问题,所以我发一版经我测试稳定的udp之大数据传输。
话不多少上代码:
pro文件中包含 network
头文件包含#include <QUdpSocket>
.h中包含
private slots:
void send_slot();
void recv_slot();
private:
QUdpSocket *udpSocket;
.cpp
#include "mythread.h"
#include <QWaitCondition>
#include <QNetworkInterface>
#include <QHostInfo>
QString bb;
MyThread::MyThread(QObject *parent)
{
//初始化UDP
udpSocket = new QUdpSocket;
udpSocket -> bind(QHostAddress::AnyIPv4,2050);
connect(udpSocket,SIGNAL(readyRead()),this,SLOT(recv_slot()));
}
MyThread::~MyThread()
{
udpSocket->close();//线程退出关闭udp连接
}
void MyThread::run()
{
//获取本机ip,通过槽函数传递给主界面显示
QString localHostName = QHostInfo::localHostName();
qDebug() <<"localHostName: "<<localHostName;
QHostInfo info = QHostInfo::fromName(localHostName);
qDebug() <<"IP Address: "<<info.addresses();
foreach(QHostAddress address,info.addresses())
{
if(address.protocol() == QAbstractSocket::IPv4Protocol)
qDebug() << address.toString();
bb=address.toString();
}
qDebug()<<bb;
while (1) {
sleep(1);
}
}
void MyThread::start(QThread::Priority priority)
{
QThread::start(priority);
qDebug()<<"==============thread已启动==========";
}
void MyThread::send_slot()
{
qDebug()<<"in send_slot";
QString str = "222222222222";
udpSocket -> writeDatagram(qPrintable(str),4096,QHostAddress::AnyIPv4,8000);
}
void MyThread::recv_slot()
{
while (udpSocket->hasPendingDatagrams()) {
QByteArray data;
data.resize(udpSocket->pendingDatagramSize());
for(int i=0;i<data.count();i++){
data[i]=0;
}
udpSocket -> readDatagram(data.data(),data.size());
qDebug()<<data.toHex();
}
}
以上代码是udp配置部分,之前就是因为配置部分代码没有写的完美,导致发送一些数据总会多一个字节或者多几个字节,数据对应不上,如上修改完之后,未在出现这种问题,经反复测试还是很稳定的,处理好接收数据后我是把数据传到一个自定义方法中,在里面将网络发送的 几千个字节拆分到一个数组中,然后通过数组去 处理合并字节,最总获取到需要的数据信息,这块就不分享了,很容易实现。
传输效果图:

2019年5月24日10:01:16 后台放个10分钟,发送是定时间隔1ms发送
2019年5月24日10:06:03 不等了,时间太紧,换个闲的电脑测试,回头发上测试结果,下面的是5分钟后

测试了3个小时,结果如下

数据达到了10亿,网络助手已经显示不出发送多少个数据了,再继续测下去没有啥意义了,不测了就这样把
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)