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