Форум: "Сети";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
ВнизВопрос по компоненту 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c