2009-01-03 14 views
6

Ich verwende die TServerSocket-Komponente in meiner Delphi-Anwendung. Ich möchte Kundenverbindungen begrenzen, sagen wir zu eintausend. Leider weiß ich nicht, wie ich das machen soll. Die Komponente bietet keine Eigenschaften wie "MaxConnections" oder andere wie diese.Delphi: Begrenzen der TCP-Verbindungen

Ich erstelle neue Server-Threads (TServerClientThread) mit dem OnGetThread-Ereignis. Um die Anzahl der aktiven Verbindungen zu erhalten, habe ich die Eigenschaft 'Socket.ActiveConnections' verwendet.

Leider weiß ich nicht, was dann zu tun ist. Ich habe versucht, keinen Thread innerhalb der OnGetThread-Prozedur zu erstellen, wenn die Anzahl der Verbindungen über der Grenze liegt, aber nichts geändert hat - Client, obwohl er keine Informationen senden oder empfangen kann, kann er sich mit dem Server verbinden und in Verbindung bleiben. Was ist zu tun, damit neue Clients keine Verbindung herstellen können oder nur eine Verbindung zulassen, die Verbindung jedoch sofort unterbrochen wird?

+0

Gute Frage. Ich denke, ich muss so etwas selbst machen, sehr aktuell! – robsoft

Antwort

14

Das letzte Mal, dass ich Delphi benutzt habe, war vor einigen Jahren, aber ich hatte eine ähnliche Situation und meine Erfahrung könnte für dich nützlich sein: Ich hatte das selbe Problem und wollte nicht zum "Indy" wechseln Komponenten, da die (große) Anwendung den Port nicht wert war. Soweit ich mich erinnern kann, sollten Sie eine onClientConnect Ereignis auf dem Server-Socket haben und hier ist Wär 'ich für die Grenze geprüft:

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

Ich kann nicht mehr anders als das erinnern, aber ich glaube, ich Ich habe etwas in diese Richtung getan, oder zumindest das war das, was mir einfiel.