Pregunta

Estoy usando el componente TServerSocket en mi aplicación Delphi. Me gustaría limitar las conexiones de clientes, digamos a mil. Lamentablemente no sé cómo hacerlo. El componente no proporciona propiedades como 'MaxConnections' o cualquier otra como esta.

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

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

¿Fue útil?

Solución

La última vez que usé Delphi fue hace algunos años, pero tuve una situación similar con la que lidiar y mi experiencia podría ser útil para usted: enfrentaba el mismo problema y no quería cambiar a la "Indy" " componentes desde la aplicación (grande) no valía la pena el puerto. Por lo que puedo recordar, debe tener un evento onClientConnect en el zócalo del servidor y aquí se verificó el 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 que eso, pero creo que hice algo en estas líneas, o al menos esto fue lo que se me ocurrió.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top