Qt 拒绝到TCP服务器的传入连接
在我的程序中,我想为我的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
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,无法提供一个好的代码示例,但是您需要断开并关闭未使用的句柄,因为它代表一个已连接的客户端。如果您不打算为客户提供服务,那么不关闭连接以便他们稍后再试是不礼貌的。