当前位置:网站首页>Wheel 7: TCP client
Wheel 7: TCP client
2022-07-28 22:51:00 【Lao Zhao's blog】
#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:
// Will receive Tcp Data transmission to business interface class
void sig_TransferData(QByteArray ba);
public slots:
void slot_InitSocket();
void slot_onConnected();
void slot_onDisconnected();
void slot_recvData();
// Network error
void slot_networkError(QAbstractSocket::SocketError err);
void slot_sendData(QByteArray ba);
private:
void connectTcpServer();
private:
QTcpSocket *m_pClientSocket;//tcp Client object pointer
QString m_strServerIP;//tcp Server side ip
quint16 m_uServerPort;//tcp Server port
bool m_bConnect;// Whether to connect identification
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(" Connect tcp Server success "),QString("ip=%1 port=%2").arg(m_strServerIP).arg(m_uServerPort));
}
else
{
AddLog(QStringLiteral(" Connect tcp The server failed "),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(" Connect tcp The server is disconnected "),"");
}
void TcpCmdClient::slot_networkError(QAbstractSocket::SocketError err)
{
AddLog(QStringLiteral(" Connect tcp An error occurred on the server "),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){
// Send a complete frame to businessIf Parsing
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());
}
}
边栏推荐
- Paddlenlp text classification based on ernir3.0: take wos dataset as an example (hierarchical classification)
- Log4j vulnerability elk platform processing method (logstah5.5.1)
- 轮子七:TCP客户端
- OSV-q The size of tensor a (3) must match the size of tensor b (320) at non-singleton dimension 3
- STM32 single chip microcomputer drive L298N
- PHP库neo4j怎么安装及使用
- [reprint] the token token is used in the login scenario
- How do we do full link grayscale on the database?
- 771. 字符串中最长的连续出现的字符
- Detection and tracking evaluation index
猜你喜欢
Paddlenlp text classification based on ernir3.0: take wos dataset as an example (hierarchical classification)
Multi activity disaster recovery construction after 713 failure of station B | takintalks share
【转载】token令牌在登录场景使用
Yolov5 improvement 7: loss function improvement
DIP-VBTV: Color Image Restoration Model Combining Deep Image Prior and Vector Bundle Total Variation
[3D target detection] 3dssd (I)
Improvement 11 of yolov5: replace backbone network C3 with lightweight network mobilenetv3
How do we do full link grayscale on the database?
Memseg [anomaly detection: embedded based]
[virtual machine _2]-hyper-v and vmware/virtualbox cannot coexist
随机推荐
shell脚本基础——Shell运行原理+变量、数组定义
fatal error: io. h: No such file or directory
C language to realize string reverse order arrangement
STM32 - systick timer (cubemx configures systick)
STM32 - advanced control timer (time base unit, functional block diagram, input, capture, output, open circuit)
Lvs+keepalived high availability deployment practical application
Anomaly detection summary: intensity_ based/Normalizing Flow
WinForm jump to the second form case
Es learning directory
即将获售高通、联发科芯片,荣耀要超越华为做国内第一?
OSV-q ValueError: axes don‘t match array
Awk blank line filtering
775. Inverted words
轮子六:QSerialPort 串口数据 收发
递归和迭代
winform跳转第二个窗体案例
JS get the current time (year month day hour minute second)
[connect set-top box] - use ADB command line to connect ec6108v9 Huawei Yuehe box wirelessly
JSON file to PNG image (batch conversion / image naming / migration / pixel value change) [tips]
Target segmentation learning