Pergunta

Estou usando o componente TServersSocket no meu aplicativo Delphi. Eu gostaria de limitar as conexões do cliente, digamos a mil. Infelizmente, não sei como fazer isso. O componente não fornece propriedades como 'maxConnections' ou qualquer outra como esta.

Eu crio novos threads de servidor (TServerClientThread) usando o evento OnGetThread. Para obter o número de conexões ativas, usei a propriedade 'Socket.ActiveConnections'.

Infelizmente, não sei o que fazer então. Tentei não criar nenhum encadeamento dentro do procedimento OnGetThread quando o número de conexões está acima do limite, mas não mudou nada - cliente, mesmo que não consiga enviar ou receber nenhuma informação, ele pode se conectar ao servidor e permanecer conectado. O que fazer para não permitir que novos clientes se conectem ou apenas permitam que eles se conectem, mas quebrem a conexão instantaneamente?

Foi útil?

Solução

A última vez que usei Delphi foi há alguns anos, mas eu tinha uma situação semelhante para lidar e minha experiência poderia ser útil para você: eu estava enfrentando o mesmo problema e não queria mudar para os componentes "Indy", já que os ( grande) Aplicação não valeu a pena a porta. Tanto quanto me lembro, você deve ter um OnClientConnect Evento no soquete do servidor e aqui foi que eu verifiquei o limite:

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

Não me lembro mais disso, mas acho que fiz algo nessas linhas, ou pelo menos isso foi o que eu inventei.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top