2009-01-03 27 views
6

Estoy usando el componente TServerSocket en mi aplicación Delphi. Me gustaría limitar las conexiones de los clientes, digamos a mil. Lamentablemente, no sé cómo hacer eso. El componente no proporciona propiedades como 'MaxConnections' o cualquier otro como este.Delphi: Limitando conexiones TCP

Creo hilos de servidor nuevos (TServerClientThread) utilizando el evento OnGetThread. Para obtener el número de conexiones activas utilicé la propiedad 'Socket.ActiveConnections'.

Desafortunadamente, no sé qué hacer entonces. Traté de no crear ningún hilo dentro del procedimiento OnGetThread cuando la cantidad de conexiones está por encima del límite, pero no cambió nada: el cliente, aunque no puede enviar ni recibir información, puede conectarse al servidor y mantenerse conectado. ¿Qué hacer para no permitir que nuevos clientes se conecten o simplemente permitir que se conecten, pero que rompan la conexión al instante?

+0

Buena pregunta. Estoy buscando hacer algo como esto yo mismo, ¡muy oportuno! – robsoft

Respuesta

14

La última vez que utilicé Delphi fue hace algunos años, pero tenía una situación similar y mi experiencia podría ser útil para usted: estaba enfrentando el mismo problema y no quería cambiar al "Indy" componentes ya que la (gran) aplicación no valía la pena el puerto. Por lo que yo puedo recordar, usted debe tener un evento onClientConnect en el zócalo del servidor y aquí es i se analiza en cuanto a límite:

.onClientConnect(Sender: TObject; aSocket: T...) 
begin 
    if(YourServerSocket.ActiveConnections > YourDefinedMaxConnections) 
    begin 
     // Drop the connection 
     aSocket.Close; 
    end; 
end 

No puedo recordar más aparte de eso, pero creo que hizo algo en estas líneas, o al menos esto fue lo que se me ocurrió.

Cuestiones relacionadas