Дельфи:Ограничение TCP-соединений
-
03-07-2019 - |
Вопрос
Я использую компонент 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
Я не могу вспомнить больше, чем это, но думаю, что я сделал что-то в этом духе, или, по крайней мере, это то, что я придумал.