Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ограничение количества клиентов у TServerSocket [D7]


Sunny Way ©   (2004-05-27 15:12:00) 

Добрый день!
Можно ли как-нибудь ограничить число клиентов, которые принимает сервер?
Я знаю единственное плохое решение..

procedure TDCMStore_Server.OnClientConnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 if ServerSocket.Socket.ActiveConnections > 1 then
 begin
     MessageDLg('You can''t make more than one connection to the server',
     mtConfirmation,[mbOK],0);
     if Socket.Connected then Socket.Close;
  end;
end;


Sunny Way   (2004-05-28 17:20:00) [1]

Спасибо большое, если делать close на OnAccept, работает вроде.


able   (2004-05-27 19:35:00) [2]


> И никаких MessageBox !

они и не нужны!


able   (2004-05-27 19:35:00) [3]


> И никаких MessageBox !

они и не нужны!


Verg   (2004-05-27 19:06:00) [4]

procedure TForm1.ServerSocket1 Accept(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 if ServerSocket1.Socket.ActiveConnections > MAX_CLIENTS then
   Socket.Close;
end;


И никаких MessageBox !


Sunny Way   (2004-05-27 16:22:00) [5]

Правильно ли я понимаю, что средствами компонент delphi этого сделать вообще нельзя (Если делать указанным выше способом, TServerSocket почему-то все равно работает со вторым сокетом - получает сообщения и т.д., то считает его открытым)? Я обязательно разберусь с winsock, но несколько позже :), сейчас быстро не получилось.


Digitman   (2004-05-27 15:26:00) [6]

в упомянутых  системах эта возможность базируется на работающейтам опции

см. SetSockOpt(... SO_CONDITIONAL_ACCEPT)

смысл ее установки в том, что переданная параметром в WSAAccept() callback-ф-ция может возвращать false-результат, который в кон.итоге приводит к тому, что отвергнутый с пом.этого механизма клиент в ответ на свой SYN-запрос не получит ACK-квитанцию, что для клиента равнозначно отказу сервера в коннекте


Digitman   (2004-05-27 15:20:00) [7]

если речь идет о W2k/ХР, то в этих системах существует гораздо более изящное решение задачи (правда, непосредственно не поддерживаемое алгоритмом TServerSocket)

см. ф-цию Winsok2.WSAAccept()


Reindeer Moss Eater   (2004-05-27 15:17:00) [8]

В твоем обработчике уже есть два соединения


Наверх

Титульная страница Поиск, карта сайта Написать письмо