![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
глюки с ActiveConnections [D5, NT4, Win2k]
izhalex © (2002-10-12 12:05:00)Подскажите люди может я где глючу или что ...
Включаю приложение с ServerSocket
Коннекчусь к нему с других компов ClientSocket"ами
например если коннект был с двумя ClientSocket"ами, то ServerSocket.Socket.ActiveConnections может быть и 3 и даже 4 :(
как будто по рандому
подскажите плз в чем глюк
Digitman (2002-10-22 09:51:00) [1]
> начинаю трасерить
Не знаю уж, что ты там и как "трасеришь", но OnClientRead() возникает ПОСЛЕ OnClientConnect().
Ты не выдумывай, а подсчитай, СКОЛЬКО РАЗ на стороне сервера возникло событие OnClientConnect и сравни полученное значение с состоянием св-ва ActiveConnections
izhalex (2002-10-22 09:10:00) [2]попробую поподробнее
допустим у меня в сетке n клиентов все ждут соединения с серваком, который пока вырублен. начинаю трасерить серверную программу, захожу в ServerSocket1ClientRead ПЕРВЫЙ раз, сразу после формкреейта (первый ответ от ПЕРВОГО же клиента). Смотрю на значение ActiveConnections, а оно уже ДВА ! вот и все чудеса :(((((((( и OnClientDisconnect еще ни разу
Digitman (2002-10-22 08:55:00) [3]Как это "по 2 создаются" ? Сами по себе ?? Да ну не бывает чудес !!
Еще раз спрашиваю :
1. сколько всего экземпляров TClientSocket (потенциальных клиентов) существует на момент тестирования ?
2. сколько раз у каждого из клиентов возникло событие OnConnect и OnDisconnect (как ответная реакция на Open и Close) ?
3. сколько раз у сервера возникло событие OnClientConnect и OnClientDisconnect ?
izhalex (2002-10-22 08:48:00) [4]ну activeconnections это еще полбеды. но вот что делать с сокетами лишними у серверсокета - это уже вопрос. ведь они тоже по 2 создаются :( или удалять один лишний ?
Digitman (2002-10-16 09:09:00) [5]А зачем ее "бороть" ? Просто проконтролируй происходящее в своем собственном сч-ке активных коннектов :
- на стороне сервера :
в событии OnClientConnect() - Inc(Счетчик)
в событии OnClientDisconnect() - Dec(Счетчик)
- на стороне клиента :
в событии OnConnect() - Inc(Счетчик)
в событии OnDisconnect() - Dec(Счетчик)
izhalex (2002-10-15 15:26:00) [6]ну енто и колючему ясно
а вот как бороть сию ситуацию - другой вопрос :-|
Digitman (2002-10-14 13:24:00) [7]>izhalex
Событие ClientRead здесь ни при чем.
Если АctiveСonnections = 2 , это говорит только об одном - за все время данного сеанса активности сервера на клиентской стороне кол-во успешных коннектов было на два больше, чем кол-во успешных же дисконнектов.
izhalex (2002-10-14 12:32:00) [8]входит в процедуру ServerSocket1ClientRead 1 раз, а activeconnections сразу на 2 ...
izhalex (2002-10-14 12:30:00) [9]Делал я такое ...
чаще всего activeconnections при присоединении 1 клиента увеличивается на 1, но иногда и на 2 :( а после дисконнекта всегда тока на 1.(в начале activeconnections=0)
дело в том что клиентами я постоянно (по таймеру) опрашиваю наличие сервера(т.е. для теста беру ситуацию, когда клиент включен, а сервак нет). дак вот, ежели ставлю малое время опроса на клиенте(порядка 1 сек) то возникает та самая трабла при включении сервака, а ежели 5 сек - то вроде бы нет ...
Malder (2002-10-14 00:27:00) [10]сделай так...
ServerSocket.Connect(...);
Begin
Label1.caption:=inttostr(ServerSocket.socket.activeconnections);
end;
...
ServerSocket.Disconnect(...);
Begin
Label1.caption:=inttostr(ServerSocket.socket.activeconnections);
end;
Ты будешь сразу видеть, когда изменяется ActiveConnections.
Если в начале он не будет равен нулю, если сразу меняется больше, чем на единицу - то это глюк ServerSocket (это вряд ли).
Далее посмотри. После диконекта клиентов ActiveConnections уменьшается ?