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

Вниз

TServerSocket в режиме stThreadBlocking   Найти похожие ветки 

 
Filin2000   (2002-11-12 15:47) [0]

при работе с TServerSocket в режиме stnonBlocking при отключении клиента проходит событие OnClientDisconect... есть ли что-ниб аналогичное в режиме stThreadBlocking????


 
Digitman ©   (2002-11-12 16:23) [1]

тебе для каких целей нужно это событие ?


 
Filin2000   (2002-11-12 16:40) [2]

хочется сделать следующее...
на каждого клиента по одному потоку (обработка запросов клиентов может сильно затянуться.. а хочется чтоб в это время короткие запросы других клиентов тоже обрабатывались)... и вот клиент запрос поставил и отключился .... охота откличить Thread


 
Digitman ©   (2002-11-12 16:52) [3]


> охота


Охота пуще неволи )

О том, что клиент отключился, в этом случае ты узнаешь, получив исключение при попытке вызова любого Send-метода объекта TServerClientWinSocket для возврата результата клиентского запроса. Перехватывай это исключение и немедленно "закругляйся" с выполнением процедуры TServerClientThread.ClientExecute
Все остальное объект TServerSocket сделает сам.


 
Filin2000   (2002-11-12 16:59) [4]

такая система работает... пробовал...
тока вот по сети гонять пакеты ради проверки состояния????

и потом... при отключении клиента серверу приходит некий пакет (проверял)... вопрос.. как его отловить???


 
Digitman ©   (2002-11-12 17:07) [5]

>Filin2000

Давай-ка, чтобы не трепаться впустую, приведи свой существующий вариант тела ClientExecute. Желательно - полный. Я прокомментирую и выскажу свои соображения.


 
Filin2000   (2002-11-12 17:19) [6]

код ничего не даст... :-(

хотя хотельсь бы что-то типа

...
repeat
if ClientSocket.ReceiveLength<>0 then ..что-то делаем

until Terminated or (not ClientSocket.Connected)
...

и вот... когда клиет закрывает соединение то ничего не происходит.. Thread так и прожолжает работать...

вообще как мне кажется должно быть стандартное решение этой проблеммы.. но найти его я никак не могу....


 
Digitman ©   (2002-11-12 17:32) [7]

стандартное решение (и, пожалуй, самое простое для блок.режима) - одно :

while not Terminated and ClientSocket.Connected do
try
..... все, что угодно
except
on e:ESocketConnectionError do
ClientSocket.Close;
end;


 
Filin2000   (2002-11-12 17:37) [8]

это логично.. но не решает проблемму..
у меня когда клиент отключается свойство ClientSocket.Connected не переходит в false


 
Digitman ©   (2002-11-12 17:46) [9]


у меня когда клиент отключается


Ка отключается ? Выполняет на своей стороне ClientSocket.Close ? Или - ножницами по сет.кабелю ? Абсолютно разные ж вещи ! И реакция совершенно разная д.б. предусмотрена на штатный и нештатный разрыв транспортного канала


> свойство ClientSocket.Connected
> не переходит в false


И не перейдет - гнездо-то по-умолчанию работает в синхронном блокирующем режиме. Явный перевод гнезда в неблок.режим ощутимо усложнит код ClientExecute(), хотя и даст возможность использовать асинхронные нотификации о состоянии кл.транспорта (и некоторые иные преимущества)


 
Filin2000   (2002-11-12 17:55) [10]

тоесть для проверки на связи ли клиет ... кроме как пытаться ему что-ниб послать и получить ошибку если он отключен.. ничего более изящьного нельзя придумать???


 
Digitman ©   (2002-11-12 18:02) [11]

для блок.режима - вряд ли

так или иначе, но факт дисконнекта определяется в этом режиме по возврату значения SOCKET_ERROR с WSAGetLastError = WSAECONNRESET или WSAECONNABORTED для вызванной в какой-то момент ф-ции send()/recv()


 
Digitman ©   (2002-11-12 18:06) [12]

Скажу более : навряд ли, конечно, авторитет Борланда значит что-то для тебя повлияет на твое оконяательное решение, но вот то, что BSS использует именно такой способ корректной обработки штатного дисконнекта - это факт.
Убедись, если хочешь, сам, изучив тело соотв.метода в коде демо-проекта scktsrvr.dpr


 
filin2000   (2002-11-12 18:22) [13]

спасибо... буду копать дальше



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

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

Наверх




Память: 0.49 MB
Время: 0.013 c
1-37214
Yegor Derevenets
2002-12-31 13:09
2003.01.13
Закрыть все дочерние окна


4-37424
Novichek
2002-11-21 18:32
2003.01.13
можно ли флэш ролик и исполняющее его приложение склеить в одно целое?


1-37001
Armageddon
2002-12-27 17:55
2003.01.13
Создание динамического массива


6-37238
Mr. Moon
2002-11-12 14:57
2003.01.13
Сообщение по новелу


14-37337
AL2002
2002-12-20 10:15
2003.01.13
Какая прога...