Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
2-1196763788
Alexandr Malygin
2007-12-04 13:23
2007.12.30
динамическое создание/удаление компонент


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


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


2-1196871903
Леонид
2007-12-05 19:25
2007.12.30
ADOCommand


15-1196291049
Германн
2007-11-29 02:04
2007.12.30
Локальный логический диск vs сетевой диск





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский