Thread线程中创建QTcpSocket
本文承接上一篇博文,Qt线程创建,本文记录在线程中创建socket 套接字,连接服务器进行编程.
/**********************************************************************************************
* ThreadRecvData.cpp
* 描述:本线程类主要功能实现从服务器接收数据.
* 作者:xhome
* 时间:2020/5/8
*********************************************************************************************/
#include "ThreadRecvData.h"
#include <QDebug>
#include <QtNetWork>
#include "GroundStation.h"
ThreadRecvData::ThreadRecvData(QObject *parent) :QThread(parent)
{
mStopFlag = false;
qDebug() << "ThreadRecvData start ok.";
}
void ThreadRecvData::run()
{
//1.创建tcp 客户端类, 服务器由ros2_msgmiddleware 本地搭建.端口10001
mTcpClient = new QTcpSocket;
connect(mTcpClient, SIGNAL(readyRead()), this, SLOT(readDataSlot()), Qt::DirectConnection);
mTcpClient->connectToHost("127.0.0.1", 10001);
//2.超时等待连接30s
if (!mTcpClient->waitForConnected(30000)){
qDebug() << __FILE__ << " , " << __FUNCTION__ << ", " << __LINE__ << " failed to connect server. -------";
return emit errorCodeSignal(ERROR_CODE_CONNECT_SERVER_TIMEOUT);
}
else {
qDebug() << "";
qDebug() << " ThreadRecvData ---> client connect server ok. ";
}
//3.连接成功发送确认标志位.
QString client_msg_id(SOCK_MSG_TYPE::SOCK_MSG_SWARM_MSG);
// mTcpClient->write("1", 2);
mTcpClient->write(client_msg_id.toUtf8());
mTcpClient->flush();
//阻塞线程结束.
exec();
//while (!m_stopFlag)
//{
// QThread::sleep(1);
// qDebug() << "ThreadRecvData +++++++++++";
//}
}
ThreadRecvData::~ThreadRecvData()
{
}
void ThreadRecvData::stop()
{
mStopFlag = true;
}
/**
* 功能:从sock中读取消息.
* 作者:xhome
* 时间:2020/5/8
*/
void ThreadRecvData::readDataSlot()
{
//解析数据.
UavSituation_t uavSituation;
QByteArray buffer = mTcpClient->readAll();
QString sbuffer(buffer);
qDebug() << "sbuffer:" << sbuffer;
QStringList list = sbuffer.split(",");
for (int i = 0; i < list.size(); i++) {
qDebug() << list[i];
}
}