Delphi: ограничение TCP-соединений

Я использую компонент TServerSocket в своем приложении Delphi. Я хотел бы ограничить клиентские соединения, скажем, до тысячи. К сожалению, я не знаю, как это сделать. Компонент не предоставляет никаких свойств, таких как "MaxConnections" или любые другие, подобные этому.

Я создаю новые потоки сервера (TServerClientThread), используя событие OnGetThread. Чтобы получить количество активных соединений я использовал гнездо.Собственность ActiveConnections'.

к сожалению, я не знаю, что делать потом. Я попытался не создавать поток внутри процедуры OnGetThread, когда количество подключений превышает предел, но это ничего не изменило - клиент, даже если он не может отправлять или получать какую-либо информацию, он может подключиться к серверу и оставаться на связи. Что делать, чтобы не позволить новым клиентам подключиться или просто позволить им подключиться, но разорвать соединение мгновенно?

1 ответов


последний раз я использовал Delphi несколько лет назад, но у меня была аналогичная ситуация, и мой опыт может быть полезен для вас: я столкнулся с той же проблемой и не хотел переключаться на компоненты "Indy", так как (большое) приложение не стоило порта. Насколько я помню, у вас должен быть onClientConnect событие на сервере сокета и вот я проверил для предела:

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

Я не могу вспомнить больше, чем другие, но я думаю, что я сделал что-то в этом роде, или, по крайней мере, это было то, что я придумал.