![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ограничение количества подключаемых клиентов [D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]
Gleb Grenkin © (2004-09-27 12:28:00)Все доброго времени суток!
Мой вопрос: я работаю с TServerSocket и TClientSocket.
Как мне сделать так, чтобы к серверу могло подключиться НЕ БОЛЕЕ ОДНОГО клиента?
Спасибо.
Digitman (2004-11-02 08:19:00) [1]
> Xtron © (02.11.04 05:45) [11]
когда ты говоришь Socket.Close, то это подразумевает, что коннект только что установлен, и ты просто закрываешь его тут же .. и где же это соответствует условию ограничения именно подключений?
Xtron (2004-11-02 05:45:00) [2]Че мозги то парить?:
procedure TForm1.ServerSocketAccept(Sender: TObject;
Socket: TCustomWinSocket);
begin
if ServerSocket.Socket.ActiveConnections >1 then Socket.Close;
end;
Digitman (2004-10-21 12:55:00) [3]
> надо, чтобы, когда кто-то подключается к серваку, к которому
> уже подключились, у клиента, который пробует подконнектиться,
> возникала ошибка соединения или что-то типа того
именно такую фичу и дает задействование механизма true conditional acceptance
Smithson (2004-10-21 12:41:00) [4]Ну так в чем проблема? Заводишь глобальный счетчик. При подключении его проверяешь и если он не больше предела, увелиичиваешь и даешь подключение. А если больше, то закрываешь новую сессию.
При отключении уменьшаешь.
Gleb Grenkin (2004-10-21 11:23:00) [5]Devel ©
суть правильна, только при отключении вызывается какое-то там событие (onDisconnect или какое-то ещё - название из головы вылетело), и в TLabel не тот статус показывается.
А надо, чтобы, когда кто-то подключается к серваку, к которому уже подключились, у клиента, который пробует подконнектиться, возникала ошибка соединения или что-то типа того.
Polevi (2004-09-28 17:05:00) [6]поправить scktcomp, добавив туда cond accept - не такая уж сложная задача, делов на пару часов максимум
Digitman (2004-09-27 14:10:00) [7]
> Devel © (27.09.04 13:55) [5]
и как это соответствует условиям, заданным в вопросе ?
да никак не соответствует !
Devel (2004-09-27 13:55:00) [8]а если в событии OnClientConnect проверить, и если соединение уже есть сразу же оключить?
Digitman (2004-09-27 13:14:00) [9]впрочем, через "причинное место" можно сделать и это ...
перехватить вызов WSAStartup, SetSockOpt, Listen, accept и иже с ними и работать с ws v2.xx, задействуя true conditional acceptance, ежели тек.ОС есть не менее чем Винтукей
стоит ли вот только ?
Digitman (2004-09-27 13:10:00) [10]
> Reindeer Moss Eater
ну ты загнул)
гланды через причинное место ?)
Reindeer Moss Eater (2004-09-27 12:40:00) [11]Заранее открыть столько дескрипторов на машине с сервером, что бы соединение первого же клиента съело последний свободный.
Digitman (2004-09-27 12:39:00) [12]никак