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()