2009-01-03 79 views
6

我在我的Delphi應用程序中使用了TServerSocket組件。我想限制客戶端連接,讓我們來說一千個。不幸的是我不知道該怎麼做。該組件不提供像'MaxConnections'或任何其他像這樣的任何屬性。Delphi:限制TCP連接

我使用OnGetThread事件創建新的服務器線程(TServerClientThread)。爲了獲得活動連接的數量,我使用了'Socket.ActiveConnections'屬性。

不幸的是我不知道該怎麼做。當連接數量超過限制時,我試圖不在OnGetThread過程中創建任何線程,但它不會改變任何 - 客戶端,即使它無法發送或接收任何信息,它可以連接到服務器並保持連接。不允許新客戶端連接或只是允許他們連接,但立即中斷連接?

+0

好問題。我正在考慮不得不這樣做自己,非常及時! – robsoft 2009-01-03 13:44:00

回答

14

上次我使用德爾福是在幾年前,但我有類似的情況來處理和我的經驗可能對你有用:我面臨同樣的問題,並不想切換到「印地」組件,因爲(大)應用程序不值得該端口。 至於我還記得,你應該有服務器插座上的onClientConnect事件,這裏是被我查了極限:

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

我不記得比這更另,但我想我在這些方面做了一些事情,或者至少這是我想出的事情。