Question

J'utilise le composant TServerSocket dans mon application Delphi. Je voudrais limiter les connexions client, disons à mille. Malheureusement, je ne sais pas comment faire ça. Le composant ne fournit aucune propriété comme 'MaxConnections' ou une autre comme celle-ci.

Je crée de nouveaux threads de serveur (TServerClientThread) à l'aide de l'événement OnGetThread. Pour obtenir le nombre de connexions actives, j'ai utilisé la propriété 'Socket.ActiveConnections'.

Malheureusement, je ne sais pas quoi faire alors. J'ai essayé de ne créer aucun fil dans la procédure OnGetThread lorsque le nombre de connexions était supérieur à la limite, mais cela ne changeait rien - client, même s'il ne peut ni envoyer ni recevoir aucune information, il peut se connecter au serveur et rester connecté. Que faire pour ne pas permettre aux nouveaux clients de se connecter ou simplement leur permettre de se connecter mais de rompre la connexion instantanément?

Était-ce utile?

La solution

La dernière fois que j'ai utilisé Delphi, c’était il ya quelques années, mais j’avais une situation similaire à gérer et mon expérience pourrait vous être utile: j’étais confronté au même problème et je ne voulais pas passer à "Indy". composants puisque la (grosse) application ne valait pas le port. Autant que je me souvienne, vous devriez avoir un événement onClientConnect sur le socket du serveur. Voici où j'ai vérifié la limite:

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

Je ne peux pas me souvenir de plus que cela, mais je pense que j'ai fait quelque chose sur ces lignes, ou du moins c'est ce que j'ai imaginé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top