Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

Ограничение количества клиентов у TServerSocket   Найти похожие ветки 

 
Sunny Way   (2004-05-27 15:12) [0]

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

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;


 
Reindeer Moss Eater ©   (2004-05-27 15:17) [1]

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


 
Digitman ©   (2004-05-27 15:20) [2]

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

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


 
Digitman ©   (2004-05-27 15:26) [3]

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

см. SetSockOpt(... SO_CONDITIONAL_ACCEPT)

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


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

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


 
Verg ©   (2004-05-27 19:06) [5]

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


И никаких MessageBox !


 
able ©   (2004-05-27 19:35) [6]


> И никаких MessageBox !

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


 
able ©   (2004-05-27 19:35) [7]


> И никаких MessageBox !

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
1-1089705911
half_litre
2004-07-13 12:05
2004.07.25
Hint в формах из dll


6-1085399228
besen-ok
2004-05-24 15:47
2004.07.25
Вопрос: есть API функция аналог команды NET SEND ? (-)


1-1089324398
Zvr@b
2004-07-09 02:06
2004.07.25
Как такое может быть!.... цикл до 3 а выполняется 10 раз!


4-1086984795
alienserg
2004-06-12 00:13
2004.07.25
Synchronize внутри DLL. Пытаюсь рисовать из треда на форме.


1-1089308932
TechnoDreamer
2004-07-08 21:48
2004.07.25
Как автоматически убирать/показывать полосы прокрутки в TMemo?