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