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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам