2009-01-03 62 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 

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