在我的程序中,我想设置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
字典中?
答案 0 :(得分:3)
您可以使用QTcpServer::setMaxPendingConnections ( int numConnections )
。它设置到QTcpServer的最大传入连接数。
来自Qt文档:
void QTcpServer :: setMaxPendingConnections(int numConnections)
设置numConnections的最大挂起接受连接数。 QTcpServer只接受numConnections传入 调用nextPendingConnection()之前的连接。默认情况下 限制是30个未决连接。
服务器到达后,客户端仍然可以连接 最大挂起连接数(即QTcpSocket仍然可以发出 connected()信号)。 QTcpServer将停止接受新的 连接,但操作系统仍然可以将它们保持在队列中。
因此,如果连接数增长超过numConnections,服务器将停止接受新连接,但操作系统可能会将它们排队。