当前位置:网站首页>轮子七:TCP客户端
轮子七:TCP客户端
2022-07-28 20:56:00 【老赵的博客】
#ifndef TCPCMDCLIENT_H
#define TCPCMDCLIENT_H
#include <QObject>
#include <QTcpSocket>
#include "CustomFrameBuffer/CustomFrameBufferFor48s.h"
class TcpCmdClient : public QObject
{
Q_OBJECT
public:
explicit TcpCmdClient(QObject *parent = nullptr);
~TcpCmdClient();
void setServerIpPort(QString strIp, quint16 port);
signals:
//将接收到的Tcp数据透传给业务接口类
void sig_TransferData(QByteArray ba);
public slots:
void slot_InitSocket();
void slot_onConnected();
void slot_onDisconnected();
void slot_recvData();
//网络错误
void slot_networkError(QAbstractSocket::SocketError err);
void slot_sendData(QByteArray ba);
private:
void connectTcpServer();
private:
QTcpSocket *m_pClientSocket;//tcp客户端对象指针
QString m_strServerIP;//tcp服务端ip
quint16 m_uServerPort;//tcp服务端端口
bool m_bConnect;//是否连接标识
CustomFrameBufferFor48s m_FrameBuffer;
};
#endif // TCPCMDCLIENT_H
#include "TcpCmdClient.h"
#include "Player.h"
TcpCmdClient::TcpCmdClient(QObject *parent) : QObject(parent)
{
m_bConnect = false;
m_strServerIP = "";
m_uServerPort = 0;
m_pClientSocket = nullptr;
}
TcpCmdClient::~TcpCmdClient()
{
if(m_pClientSocket)
{
m_pClientSocket->abort();
m_pClientSocket->deleteLater();
}
}
void TcpCmdClient::setServerIpPort(QString strIp, quint16 port)
{
m_strServerIP = strIp;
m_uServerPort = port;
}
void TcpCmdClient::connectTcpServer()
{
if(nullptr==m_pClientSocket)
{
m_pClientSocket = new QTcpSocket;
connect(m_pClientSocket,&QTcpSocket::readyRead,this,&TcpCmdClient::slot_recvData);
connect(m_pClientSocket,&QTcpSocket::connected,this,&TcpCmdClient::slot_onConnected);
connect(m_pClientSocket,&QTcpSocket::disconnected,this,&TcpCmdClient::slot_onDisconnected);
connect(m_pClientSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(slot_networkError(QAbstractSocket::SocketError)));
}
m_pClientSocket->abort();
//m_pClientSocket->setProxy(QNetworkProxy::NoProxy);
m_pClientSocket->connectToHost(m_strServerIP,m_uServerPort);
m_bConnect = m_pClientSocket->waitForConnected(5000);
if(m_bConnect)
{
AddLog(QStringLiteral("连接tcp服务端成功"),QString("ip=%1 port=%2").arg(m_strServerIP).arg(m_uServerPort));
}
else
{
AddLog(QStringLiteral("连接tcp服务端失败"),QString("ip=%1 port=%2").arg(m_strServerIP).arg(m_uServerPort));
}
}
void TcpCmdClient::slot_InitSocket()
{
connectTcpServer();
}
void TcpCmdClient::slot_onConnected()
{
m_bConnect = true;
}
void TcpCmdClient::slot_onDisconnected()
{
m_bConnect = false;
AddLog(QStringLiteral("连接tcp服务端断开"),"");
}
void TcpCmdClient::slot_networkError(QAbstractSocket::SocketError err)
{
AddLog(QStringLiteral("连接tcp服务端发生错误"),QString("err = %1").arg(err));
}
void TcpCmdClient::slot_recvData()
{
while((m_pClientSocket->bytesAvailable())>0)
{
QByteArray readmsg = m_pClientSocket->readAll();
//qDebug()<<readmsg.size();
m_FrameBuffer.Write(readmsg.data(),readmsg.size());
QByteArray baFrame;
while(1){
int ret = m_FrameBuffer.GetFrame(baFrame);
if(ret == 1){
//将完整一帧发送给businessIf解析处理
emit sig_TransferData(baFrame);
//qDebug() << "m_FrameBuffer.GetFrame is complete.";
}else{
//qDebug() << "m_FrameBuffer.GetFrame is not complete.";
break;
}
}
}
}
void TcpCmdClient::slot_sendData(QByteArray ba)
{
if(m_bConnect)
{
m_pClientSocket->write(ba.data(),ba.size());
}
}
边栏推荐
- LeetCode练习3——回文数
- Idea generate class diagram plug-in UML (super detailed)
- NPM switch Taobao source (NPM source)
- Anomaly detection summary: intensity_ based/Normalizing Flow
- Vscode ROS configuration GDB debugging error record
- LeetCode刷题系列之-多数之和类型
- 20-09-27 the project is migrated to Alibaba toss record (the network card order makes the service unable to connect to DB through haproxy)
- Qt+FFmpeg环境搭建
- Wechat applet uses canvas drawing, round avatar, network background, text, dotted line, straight line
- The function of wechat applet to cut pictures
猜你喜欢

基于Ernie-3.0 CAIL2019法研杯要素识别多标签分类任务

Baidu map usage

简单的es高亮实战

flask之蓝图 补充openpyxl

Research cup element recognition multi label classification task based on ernie-3.0 cail2019 method

JVM——自定义类加载器
![Padim [anomaly detection: embedded based]](/img/11/834d8b4fdd39959a9dd380e179d317.png)
Padim [anomaly detection: embedded based]

Ngrok intranet penetration

STM32 - reset and clock control (cubemx for clock configuration)

Summary of the problem that MathType formula does not correspond in word
随机推荐
Integrating database Ecology: using eventbridge to build CDC applications
删除容器镜像报错解决image is referenced in multiple repositories
Log4j vulnerability elk platform processing method (logstah5.5.1)
Leetcode question brushing series - sum of majority type
fatal error: io. h: No such file or directory
C语言学习内容总结
Winserver operation and maintenance technology stack
Lvs+keepalived high availability deployment practical application
PC side special effects - animation function
Install PCL and VTK under the background of ROS installation, and solve VTK and PCL_ ROS conflict problem
Image is referred in multiple repositories
LeetCode刷题系列之-多数之和类型
elment-plus图标input上面带的图标为什么不显示
Draem+sspcab [anomaly detection: block]
CMD common commands
PC side web page effects (client series, scroll series, immediate function execution, sidebar effects)
ssh免密登陆
Paddlenlp is based on ernir3.0 text classification. Take the traditional Chinese medicine search and retrieval semantic map classification (kuake-qic) as an example [multi classification (single label
Chrome encountered a problem when debugging the code. After modifying and saving the code in vscode, chrome did not update after refreshing
ES6, deep copy, shallow copy