qt_demoe/nettool/api/tcpclient.cpp

96 lines
2.3 KiB
C++

#include "tcpclient.h"
#include "quihelper.h"
TcpClient::TcpClient(QTcpSocket *socket, QObject *parent) : QObject(parent)
{
this->socket = socket;
ip = socket->peerAddress().toString();
ip = ip.replace("::ffff:", "");
port = socket->peerPort();
connect(socket, SIGNAL(disconnected()), this, SLOT(slot_disconnected()));
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))
connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SLOT(slot_error()));
#else
connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(slot_error()));
#endif
connect(socket, SIGNAL(readyRead()), this, SLOT(slot_readData()));
}
QString TcpClient::getIP() const
{
return this->ip;
}
int TcpClient::getPort() const
{
return this->port;
}
void TcpClient::slot_disconnected()
{
emit disconnected(ip, port);
socket->deleteLater();
this->deleteLater();
}
void TcpClient::slot_error()
{
emit error(ip, port, socket->errorString());
}
void TcpClient::slot_readData()
{
QByteArray data = socket->readAll();
if (data.length() <= 0) {
return;
}
QString buffer;
if (AppConfig::HexReceiveTcpServer) {
buffer = QUIHelper::byteArrayToHexStr(data);
} else if (AppConfig::AsciiTcpServer) {
buffer = QUIHelper::byteArrayToAsciiStr(data);
} else {
buffer = QString(data);
}
emit receiveData(ip, port, buffer);
//自动回复数据,可以回复的数据是以;隔开,每行可以带多个;所以这里不需要继续判断
if (AppConfig::DebugTcpServer) {
int count = AppData::Keys.count();
for (int i = 0; i < count; i++) {
if (AppData::Keys.at(i) == buffer) {
sendData(AppData::Values.at(i));
break;
}
}
}
}
void TcpClient::sendData(const QString &data)
{
QByteArray buffer;
if (AppConfig::HexSendTcpServer) {
buffer = QUIHelper::hexStrToByteArray(data);
} else if (AppConfig::AsciiTcpServer) {
buffer = QUIHelper::asciiStrToByteArray(data);
} else {
buffer = data.toUtf8();
}
socket->write(buffer);
emit sendData(ip, port, data);
}
void TcpClient::disconnectFromHost()
{
socket->disconnectFromHost();
}
void TcpClient::abort()
{
socket->abort();
}