![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Клиент не отключается!!!
аыпвапы © (2007-04-23 10:54:00)есть сервер и клиент.
работает по принципу подключился клиент сервер ему сразу ответ а клиент как получает данные отключается.
ок. все работает.
начинаю тестить закрываю запускаю сервер. тость зупустил прогу, вуключил, запустил, выключил ......
в один прекрасный момент у клиента не происходит отключение тоесть даже такое не помогает:
while(ClientSocket1.Active)do
ClientSocket1.Close;
стоит актив ивсё (((
P.S. в событии ClientSocket1Error ставлю Abort что бы ерроры не вылазили.
(2007-09-19 10:11:00) [1]Удалено модератором
Примечание: сорри за закрытую изза этого спама ветку. если вопрос еще актуален перезадайте.
(2007-09-17 22:47:00) [2]Удалено модератором
ient (2007-09-12 10:09:00) [3]>ClientSocket1Error
>abort
errorcode := 0;
socket.close;
>while(ClientSocket1.Active)do
> ClientSocket1.Close;
ClientSocket1.close;
(2007-09-10 21:44:00) [4]Удалено модератором
Сергей М. (2007-04-24 12:43:00) [5]
> цикл while будет выполнятся до тех пор пока свойство Active
> не станет равным false
Оно и не станет False, если ClientType = ctNonBlocking и в теле цикла нет обработки Win-сообщений.
Сдесь есть два варианта - либо ClientType должен быть равен ctBlocking, либо после Active = False в тело цикла добавить строчку Application.Processmessages.
Но цикл этот сам по себе бестолков, потому как отключение на самом деле заведомопроисходит (убедись сам на тестовом приложении, использующем событие OnClientDisconnect компонента TServerSocket).
А раз он бестолков, то и организовывать его ради проверки Active = False нет никакого смысла.
аыпвапы (2007-04-24 12:29:00) [6]
> в один прекрасный момент у клиента не происходит отключение
> тоесть даже такое не помогает:
> while(ClientSocket1.Active)do
> ClientSocket1.Close;
> стоит актив ивсё (((
это кусок вопроса заданый мною в самом начале.
Уважаемый Сергей приношу свои глубочайшие извенения что не рассказал очень трудного для понимания кода.
рассказываю:
цикл while будет выполнятся до тех пор пока свойство Active не станет равным false, что в свою очередь будет соотвецтвовать отключению от сервера. а а тело цикла содержит единственную команду ClientSocket1.Close котороя выполняет отключение, но в моем случае (Сергей напоминаю что это инногда возникает) отключение не происходит и цикл начинает бесконечно выполнятся.
Сергей польше программного кода у меня нет остальное написанно словами. может у тебя еще какие вопросы? не стесняйся спрашивай я срадостью постраюсь уточнить все моменты.
Сергей М. (2007-04-24 08:48:00) [7]
> эти действия не приносят никакого результата
А у меня приносят. Контрвопрос - что я не так делаю ?)
> на мой ответ я получаю не тот ответ
Каков ответ - таков и ответ)
Ты же не спросил, почему, мол, Active остается True, если я только что установил его в False)
аыпвапы (2007-04-24 08:42:00) [8]ну конечно извените меня, но я вроде написал в самом начале что возникает такая ситуация когда эти действия не приносят никакого результата. я же неспрашиваю как это сделать. я говорю что я это делаю,но это не работает.
на мой ответ я получаю не тот ответ.
Сергей М. (2007-04-24 08:04:00) [9]
> я же говорю что это не помогает
А как это, по-твоему, должно помочь ? И кому помочь ?
Я же говорю - для отключения клиента достаточноустановить ClientSocket.Active := False или вызвать метод ClientSocket.Close.
аыпвапы (2007-04-24 07:11:00) [10]
> Для отключения клиента достаточно установить ClientSocket.
> Active := False или вызвать метод ClientSocket.Close
я же говорю что это не помогает.
я спрашиваю почему? и как это исправить?
Сергей М. (2007-04-23 11:01:00) [11]Для отключения клиента достаточно установить ClientSocket.Active := False или вызвать метод ClientSocket.Close