19.Qt中Thread线程中创建QTcpSocket

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];
	}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangshui516

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值