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

Вниз

Вопрос по компоненту IdTCPClient   Найти похожие ветки 

 
dreamse   (2007-04-18 11:53) [0]

Вопрос в следующем :

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

есть клиент на нём установлен IdTCPClient1
Так вот нужно подключиться к серверу и ждать какого нибудь события от него или от программы. Если сервер отвалился то запускаем таймер который через каждые 5 минут пытается присоединиться к серверу если соединение произошло таймер выключается, если нет то пытается каждые 5 сек присоединиться.

Вопрос. Как в компоненте IdTCPClient1 отследить момент когда сервер отвалился ? т.е произошел разрыв связи ?

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

Как решить этот вопрос ?

p.s в старых компонентах стандартных всё было ништяк и просто. Но политика компании такова что заставляют использовать indy
помогите решить вопрос.


 
Reindeer Moss Eater ©   (2007-04-18 12:02) [1]

Если ты ничего не читаешь с сервера, то тебе по барабану, жив он или нет.
А если читаешь, и сервер помер, то получишь исключение.


 
dreamse   (2007-04-18 12:08) [2]

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

В старых TClienSocket всё прекрасно работало при отваливании сервера вызывалось событие дисконекта.

что делать ?


 
umbra ©   (2007-04-18 12:14) [3]

try
 IdTCPClient1.IoHandler.WriteDirect(ToBytes("Ты еще жив?"));
on E:EIdConnClosedGracefully
 ShowMessage("Пациент скорее мертв, чем жив");
end;


 
Reindeer Moss Eater ©   (2007-04-18 12:16) [4]

Как мне ужнать что сервер начал передавать данные если у меня соединения с ним оборвалось в момент ожидания ?

Чтобы принять от сервера данные, передача которых может начаться в любой момент - надо вызвать метод чтения данных.
Метод синхронный.
Вот и все.
А если это глупо, а ты такой умный, то чего здесь вопросы задаешь?
:)


 
dreamse   (2007-04-18 12:18) [5]

получается что постоянно нужно делать проверку :( Не очень приятно. Но понятно.
Спасибо всем. Буду дальше решать.


 
umbra ©   (2007-04-18 12:20) [6]


> получается что постоянно нужно делать проверку

да не надо ничего делать, Reindeer Moss Eater © совершенно прав. Если при чтении возникла ошибка - запускайте свой таймер.


 
Плохиш ©   (2007-04-18 12:37) [7]


> dreamse   (18.04.07 12:18) [5]

Технология клиен/сервер работает по принципу "клиент подключился - отправил запрос - сервер ответил - клиен получил ответ - отключился". Что вы там собираетесь ждать и какое соединение постоянно держать не понятно. Даже при сессионости не надо ни каких соединений открытых держать, существует уникальный идентификатор сессии.


 
Wolchonok29   (2007-04-19 10:11) [8]


> SocketConnected и  SocketDisconnected какую то чушь показывают
> и SocketDisconnected не реагирует вообще никак на отваливания
> сервера.

Зачем все это? у данной компоненты есть метод OnDisconnected, в нем  и можно запустить процедуру нового коннекта к серверу!!!


 
DVM ©   (2007-04-19 10:35) [9]


> Зачем все это? у данной компоненты есть метод OnDisconnected,
>  в нем  и можно запустить процедуру нового коннекта к серверу!
> !!

Эти события не генерируются при разрыве соединения со стороны сервера.


> Технология клиен/сервер работает по принципу "клиент подключился
> - отправил запрос - сервер ответил - клиен получил ответ
> - отключился".

Это скорее для HTTP протокола. Не всегда так должно быть. Клиент может висеть подключенным к серверу годами. Типичный пример - Telnet.


 
DVM ©   (2007-04-19 10:37) [10]

Но узнать о том, что сервер отвалился можно только попробовав обменяться с ним данными.



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

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

Наверх




Память: 0.49 MB
Время: 0.017 c
2-1196768252
abhtr
2007-12-04 14:37
2007.12.30
Запрос для набора данных DBGrid-a.


1-1191819732
den303_work
2007-10-08 09:02
2007.12.30
Копирование форм


2-1196750879
Kolan
2007-12-04 09:47
2007.12.30
А можно у TreeView отключить рисование пунктирных точек?


2-1196675502
Alexandr Malygin
2007-12-03 12:51
2007.12.30
excel


6-1176925891
Dmitry_177
2007-04-18 23:51
2007.12.30
При изменении порта или ip-адреса нужно ли пересоздавать сокет?