QTcpSocket客户端如何理解它在队列中?(并且不会进入连接状态)

How QTcpSocket client can understand that it is in the queue? (and does not go to connected state)

本文关键字:状态 连接 何理解 客户端 队列 QTcpSocket      更新时间:2023-10-16

我正在使用Qt开发一个服务器和客户端项目。我想打印用户的连接状态。对于这个建议,我使用 state((,如下所示:

socketState = mySocket.state();
if (socketState == 3) {
   Print("we have connected");
}

但是,当服务器对新连接进行排队时,它不起作用。为了清楚起见,即使服务器已暂停接受新连接,我的客户端状态也是 3:

//server side: 
myServer->pauseAccepting();
//client side: 
connectToHost()
socketState = mySocket.state();

现在套接字状态是 3 而不是 0 或队列状态的特殊数字。

总而言之,我想知道如何通知客户端它在队列中?有没有像 state(( 这样的东西有队列状态的返回值?

终于我找到了答案。

进入队列(按操作系统(的被拒绝的客户端与其他客户端没有什么不同。因此,我们可以为它制作一个特殊的套接字(这意味着它不再在队列中(并开始通信(通知并关闭(。

例如:

QTcpSocket clientSocket
QTcpSocket queueSocket

在我的项目中,服务器首先向队列客户端发送消息。消息是:

"我们不能接受新客户,因为我们不能处理多个客户"。所以,它知道问题是什么。

然后,服务器关闭队列客户端套接字。

我们应该关闭它,因为我们不想处理很多客户端。

但是,重点是我们可以与队列中的客户合作并决定如何处理他们。我宁愿接受它们只是为了通知和关闭它们。

if (we have NOT a client) {
    work with clientSocket
}
else {
    queueSocket.wirte("We can NOT accept a new client because we can NOT handle more than one")
    close queueSocket
}

我希望它能帮助那些想要通知被拒绝的客户的人。