Domanda

Sto usando il componente TServerSocket nella mia applicazione Delphi. Vorrei limitare le connessioni client, diciamo a mille. Sfortunatamente non so come farlo. Il componente non fornisce proprietà come 'MaxConnections' o nessun altro come questo.

Creo nuovi thread del server (TServerClientThread) usando l'evento OnGetThread. Per ottenere il numero di connessioni attive ho usato la proprietà 'Socket.ActiveConnections'.

Purtroppo non so cosa fare allora. Ho cercato di non creare alcun thread all'interno della procedura OnGetThread quando il numero di connessioni è superiore al limite, ma non ha cambiato nulla: il client, anche se non è in grado di inviare o ricevere alcuna informazione, può connettersi al server e rimanere connesso. Cosa fare per non consentire ai nuovi client di connettersi o semplicemente consentire loro di connettersi ma interrompere immediatamente la connessione?

È stato utile?

Soluzione

L'ultima volta che ho usato Delphi è stato alcuni anni fa, ma ho avuto una situazione simile da affrontare e la mia esperienza potrebbe essere utile per te: stavo affrontando lo stesso problema e non volevo passare a " Indy " componenti poiché l'applicazione (grande) non valeva la porta. Per quanto posso ricordare, dovresti avere un evento onClientConnect sul socket del server e qui è dove ho controllato il limite:

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

Non ricordo altro oltre a quello, ma penso di aver fatto qualcosa su queste righe, o almeno questa è stata la cosa che mi è venuta in mente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top