From 8eceecf0db08257fd3824c3638c08e4e5c08de86 Mon Sep 17 00:00:00 2001 From: "zhou.mengjia" Date: Thu, 28 Dec 2023 14:09:05 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E8=AE=AF=E6=97=B6=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E6=B3=A2=E5=8A=A8=E9=87=8D=E5=90=AF=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NetControl.cpp | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/NetControl.cpp b/src/NetControl.cpp index 4438b38..2466131 100644 --- a/src/NetControl.cpp +++ b/src/NetControl.cpp @@ -1,6 +1,7 @@ #pragma execution_character_set("utf-8") #include "netControl.h" #include "commonDefine.h" +#include NetControl::NetControl(const QString& configPath, bool bAutoReconnect /* = false */, QObject *parent /* = 0 */) : QObject(parent), @@ -87,21 +88,22 @@ void NetControl::connectNet(QString severIp, int serverPort) void NetControl::onErrorHandler(QAbstractSocket::SocketError err) { + QMetaEnum metaEnum = QMetaEnum::fromType(); switch (err) { case QAbstractSocket::AddressInUseError: - qCritical() << __FUNCTION__ << endl + qCritical() << __FUNCTION__ <<": "<< metaEnum.key(err) << endl << "SOCKET ERROR: Address is already in use"; break; case QAbstractSocket::ConnectionRefusedError: - qWarning() << __FUNCTION__ << endl + qWarning() << __FUNCTION__ << ": " << metaEnum.key(err) << endl << "SOCKET ERROR: Connection refused"; m_pTcpSocket->abort(); m_pTcpSocket->close(); if (m_bAutoReconnect) { - qDebug() << __FUNCTION__ << endl + qDebug() << __FUNCTION__ << ": " << metaEnum.key(err) << endl << "Reconnecting ..."; QThread::sleep(1); m_pTcpSocket->connectToHost(m_szHostIp, m_port); @@ -109,16 +111,29 @@ void NetControl::onErrorHandler(QAbstractSocket::SocketError err) break; case QAbstractSocket::HostNotFoundError: { - qCritical() << __FUNCTION__ << endl + qCritical() << __FUNCTION__ << ": " << metaEnum.key(err) << endl << "SOCKET ERROR: Host not found"; qDebug() << "连接失败,未找到对应地址"; } break; case QAbstractSocket::RemoteHostClosedError: - qCritical() << __FUNCTION__ << endl + qCritical() << __FUNCTION__ << ": " << metaEnum.key(err) << endl << "SOCKET ERROR: Remote host closed"; break; + default: + { + // 网络波动可能导致断开链接后的重连失败,报错NetworkError + qCritical() << __FUNCTION__ << ": " << metaEnum.key(err) << endl; + if (!m_pTcpSocket->isOpen() && m_bAutoReconnect) + { + qDebug() << __FUNCTION__ << ": Start to reconnect ..."; + QThread::sleep(1); + m_pTcpSocket->connectToHost(m_szHostIp, m_port); + } + break; } + } + } void NetControl::onConnected()