gpt4 book ai didi

c++ - QTcpSocket 客户端自动重连

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:10 24 4
gpt4 key购买 nike

我正在尝试编写一段代码,定期尝试使用 QTcpSocket 连接到服务器,直到服务器启动并准备就绪。客户端还应在服务器关闭时自动并定期尝试重新连接,直到服务器再次启动或用户手动关闭程序。

我所做的是订阅QTcpSocket 的连接信号和错误信号。当我捕捉到错误信号时,我基本上会再次调用 connectToHost 方法。

我的代码会定期尝试连接到主机,直到服务器准备就绪(这部分工作正常)。但是,问题是当服务器关闭时它永远无法重新连接。当连接断开时,我会按预期收到 RemoteHostClosedError。但是,在同一方法(我捕获 RemoteHostClosedError 的地方)中再次调用 connectToHost 方法后,我什么也没得到。甚至 QTcpSocket 对象也不会发出错误信号。

我在下面给出了我的代码。

TcpServerConnector::TcpServerConnector( SocketSettings socketSettings, QObject* parent)
: QObject(parent), socket(new QTcpSocket())
{
this->connect(this->socket, SIGNAL(connected()), this, SLOT(connectionSuccess_Handler()), Qt::DirectConnection);
this->connect(this->socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(connectionError_Handler(QAbstractSocket::SocketError)), Qt::DirectConnection);
}


void TcpServerConnector::connectionError_Handler( QAbstractSocket::SocketError error )
{
switch (error)
{
case QAbstractSocket::AddressInUseError:
this->logger.log(LogLevel::ERR, "SOCKET ERROR: Address is already in use");
break;
case QAbstractSocket::ConnectionRefusedError:
this->logger.log(LogLevel::ERR, "SOCKET ERROR: Connection refused");
break;
case QAbstractSocket::HostNotFoundError:
this->logger.log(LogLevel::ERR, "SOCKET ERROR: Host not found");
break;
case QAbstractSocket::RemoteHostClosedError:
this->logger.log(LogLevel::ERR, "SOCKET ERROR: Remote host closed");
break;
}


this->socket->abort();
this->socket->close();
this->logger.log(LogLevel::DEBUG, "Reconnecting...");
SystemUtil::sleepCurrentThread(1000);
this->socket->connectToHost(ip_address, port);
}

我在调用 connectToHost 方法之前和之后检查 QTcpSocket 的状态(我在这里给出的最后一行)。在调用 connectToHost 之前,状态为 UnconnectedState,在调用 connectToHost 之后,其状态变为 Connecting。没什么意外的。但是,它既不能连接到服务器,也不能发出错误信号。

有什么想法吗?

注意:QTcpSocket的connectToHost方法是第一次在内部调用。

最佳答案

对于遇到类似情况的 friend ,QTcpSocket的reset方法解决了问题。

关于c++ - QTcpSocket 客户端自动重连,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11600288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com