拒绝传入TCP服务器的连接

时间:2014-06-14 12:04:32

标签: qt tcp

在我的程序中,我想设置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);
}

现在我想限制客户端数量,例如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);
    }
}

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

1 个答案:

答案 0 :(得分:3)

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

来自Qt文档:

  

void QTcpServer :: setMaxPendingConnections(int numConnections)

     

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

     

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

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