通讯时网络波动重启处理

LanXin3D
zhou.mengjia 2 years ago
parent ff351c799a
commit 8eceecf0db

@ -1,6 +1,7 @@
#pragma execution_character_set("utf-8") #pragma execution_character_set("utf-8")
#include "netControl.h" #include "netControl.h"
#include "commonDefine.h" #include "commonDefine.h"
#include <QMetaEnum>
NetControl::NetControl(const QString& configPath, bool bAutoReconnect /* = false */, QObject *parent /* = 0 */) NetControl::NetControl(const QString& configPath, bool bAutoReconnect /* = false */, QObject *parent /* = 0 */)
: QObject(parent), : QObject(parent),
@ -87,21 +88,22 @@ void NetControl::connectNet(QString severIp, int serverPort)
void NetControl::onErrorHandler(QAbstractSocket::SocketError err) void NetControl::onErrorHandler(QAbstractSocket::SocketError err)
{ {
QMetaEnum metaEnum = QMetaEnum::fromType<QAbstractSocket::SocketError>();
switch (err) switch (err)
{ {
case QAbstractSocket::AddressInUseError: case QAbstractSocket::AddressInUseError:
qCritical() << __FUNCTION__ << endl qCritical() << __FUNCTION__ <<": "<< metaEnum.key(err) << endl
<< "SOCKET ERROR: Address is already in use"; << "SOCKET ERROR: Address is already in use";
break; break;
case QAbstractSocket::ConnectionRefusedError: case QAbstractSocket::ConnectionRefusedError:
qWarning() << __FUNCTION__ << endl qWarning() << __FUNCTION__ << ": " << metaEnum.key(err) << endl
<< "SOCKET ERROR: Connection refused"; << "SOCKET ERROR: Connection refused";
m_pTcpSocket->abort(); m_pTcpSocket->abort();
m_pTcpSocket->close(); m_pTcpSocket->close();
if (m_bAutoReconnect) if (m_bAutoReconnect)
{ {
qDebug() << __FUNCTION__ << endl qDebug() << __FUNCTION__ << ": " << metaEnum.key(err) << endl
<< "Reconnecting ..."; << "Reconnecting ...";
QThread::sleep(1); QThread::sleep(1);
m_pTcpSocket->connectToHost(m_szHostIp, m_port); m_pTcpSocket->connectToHost(m_szHostIp, m_port);
@ -109,16 +111,29 @@ void NetControl::onErrorHandler(QAbstractSocket::SocketError err)
break; break;
case QAbstractSocket::HostNotFoundError: case QAbstractSocket::HostNotFoundError:
{ {
qCritical() << __FUNCTION__ << endl qCritical() << __FUNCTION__ << ": " << metaEnum.key(err) << endl
<< "SOCKET ERROR: Host not found"; << "SOCKET ERROR: Host not found";
qDebug() << "连接失败,未找到对应地址"; qDebug() << "连接失败,未找到对应地址";
} }
break; break;
case QAbstractSocket::RemoteHostClosedError: case QAbstractSocket::RemoteHostClosedError:
qCritical() << __FUNCTION__ << endl qCritical() << __FUNCTION__ << ": " << metaEnum.key(err) << endl
<< "SOCKET ERROR: Remote host closed"; << "SOCKET ERROR: Remote host closed";
break; 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() void NetControl::onConnected()

Loading…
Cancel
Save