Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top