Qt 拒绝到TCP服务器的传入连接

Qt 拒绝到TCP服务器的传入连接,qt,tcp,Qt,Tcp,在我的程序中,我想为我的TCP服务器设置客户端的限制 目前,我的传入连接代码为: void TCPServer::incomingConnection(int handle) { QPointer<TCPClient> client = new TCPClient(this); client->SetSocket(handle); clients[handle] = client; QObject::connect(client, SIGNA

在我的程序中,我想为我的TCP服务器设置客户端的限制

目前,我的传入连接代码为:

void TCPServer::incomingConnection(int handle)
{
    QPointer<TCPClient> client = new TCPClient(this);
    client->SetSocket(handle);

    clients[handle] = client;

    QObject::connect(client, SIGNAL(MessageRecieved(int,QString)), this, SLOT(MessageRecieved(int,QString)));
    QObject::connect(client, SIGNAL(ClientDisconnected(int)), this, SLOT(ClientDisconnected(int)));

    emit ClientConnected(handle);
}
void TCPServer::incomingConnection(int句柄)
{
QPointer客户端=新的TCP客户端(此);
客户端->设置锁(手柄);
客户[处理]=客户;
连接(客户端,信号(messagereceived(int,QString)),这个,插槽(messagereceived(int,QString));
连接(客户端,信号(ClientDisconnected(int)),这个,插槽(ClientDisconnected(int));
发出ClientConnected(句柄);
}
现在我想限制客户端的数量,例如总共100个活动连接。 我是否必须以某种特殊的方式处理它,或者使用简单的
if(clients.count()<100)
语句忽略它

void TCPServer::incomingConnection(int handle)
{
    if(clients.count() < 100)
    {
        QPointer<TCPClient> client = new TCPClient(this);
        client->SetSocket(handle);

        clients[handle] = client;

        QObject::connect(client, SIGNAL(MessageRecieved(int,QString)), this, SLOT(MessageRecieved(int,QString)));
        QObject::connect(client, SIGNAL(ClientDisconnected(int)), this, SLOT(ClientDisconnected(int)));

        emit ClientConnected(handle);
    }
}
void TCPServer::incomingConnection(int句柄)
{
if(clients.count()<100)
{
QPointer客户端=新的TCP客户端(此);
客户端->设置锁(手柄);
客户[处理]=客户;
连接(客户端,信号(messagereceived(int,QString)),这个,插槽(messagereceived(int,QString));
连接(客户端,信号(ClientDisconnected(int)),这个,插槽(ClientDisconnected(int));
发出ClientConnected(句柄);
}
}

这样做可以吗?未处理的连接是否处于活动状态(已连接到服务器),但只是未在我的
客户端
字典中列出?

您可以使用
QTcpServer::setMaxPendingConnections(int-numConnections)
。它设置到QTcpServer的最大传入连接数

从Qt文档中:

void qtcserver::setMaxPendingConnections(int numConnections)

设置numConnections的挂起接受连接的最大数量。 QTcpServer将只接受传入的numConnections 调用nextPendingConnection()之前的连接。默认情况下 限制为30个挂起的连接

在服务器到达其位置后,客户端可能仍然能够连接 挂起连接的最大数量(即QTcpSocket仍然可以发出 连接的()信号)。QTcpServer将停止接受新的 连接,但操作系统可能仍将它们保持在队列中


因此,如果连接数增长超过numConnections,服务器将停止接受新连接,但操作系统可能会对它们进行排队。

有条件的方法就是这样。我不太了解QT,无法提供一个好的代码示例,但是您需要断开并关闭未使用的句柄,因为它代表一个已连接的客户端。如果您不打算为客户提供服务,那么不关闭连接以便他们稍后再试是不礼貌的。