1.头文件
#ifndef CTCPCLIENT_H
#define CTCPCLIENT_H
#include <QObject>
#include <QTcpSocket>
class CTcpClient : public QObject
{
Q_OBJECT
public:
CTcpClient(const QString& ip, qint16 port, QObject* parent = nullptr);
~CTcpClient();
public slots:
void ConnectedSlot();
void DisConnectedSlot();
void StateChangedSlot(QAbstractSocket::SocketState state);
void ReadyReadSlot();
private:
QTcpSocket* m_pSocket; // tcp客户端
};
#endif // CTCPCLIENT_H
2.源文件
#include "ctcpclient.h"
#include <QDebug>
CTcpClient::CTcpClient(const QString& ip, qint16 port, QObject* parent):
QObject(parent),
m_pSocket(new QTcpSocket(this))
{
connect(m_pSocket, &QTcpSocket::connected, this, &CTcpClient::ConnectedSlot);
connect(m_pSocket, &QTcpSocket::disconnected, this, &CTcpClient::DisConnectedSlot);
connect(m_pSocket, &QTcpSocket::stateChanged, this, &CTcpClient::StateChangedSlot);
connect(m_pSocket, &QTcpSocket::readyRead, this, &CTcpClient::ReadyReadSlot);
m_pSocket->setSocketOption(QAbstractSocket::KeepAliveOption, 1); // 设置保持连接
// 连接服务端
m_pSocket->connectToHost(ip, port);
m_pSocket->waitForConnected(3000);
}
CTcpClient::~CTcpClient()
{
if(m_pSocket != nullptr) {
m_pSocket->close();
}
}
void CTcpClient::ConnectedSlot()
{
qDebug() << "客户端已连接";
}
void CTcpClient::DisConnectedSlot()
{
qDebug() << "客户端已断开连接";
}
void CTcpClient::StateChangedSlot(QAbstractSocket::SocketState state)
{
qDebug() << "状态:" << state;
}
void CTcpClient::ReadyReadSlot()
{
QByteArray data = m_pSocket->readAll();
qDebug() << "接收到的数据:" << data;
}