![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработать ошибку пинга [D7, XP]
Tornado © (2009-11-18 08:51:00)Подскажите пожалуйста, моя программа при запуске пингует удаленный компьютер (в процессе работы она должна обмениваться данными с ним). Если по каким-то причинам комп на котором установили программу не подключен к сети или сеть не работает (в нашей огромной конторе такое к сожалению бывает, потом спохватятся, сеть настроят) то прога выдает ошибку "Socet Error.No route to host" что вообщемто и понятно. Вопрос в том как бы "красиво обработать" эту ошибку чтобы не получать это сообщение, а допустим в статусной строке писать "Нет соединения с сревером". А то юзеры очень пугаются таких ошибок :)
Не занят (2009-11-24 19:30:00) [1]Александр З.
Ошибка, Exception, Исключение - это одно и тоже.
Ошибка - это исключительная ситуация в работе программы.
Вопрос наверное должен звучать не "Как добавить исключение", а "Как скрыть модальное сообщение об ошибке, и обработать самому возникшее исключение, например чтобы вывести его текст в статус бар или журнал.".
Leonid Troyanovsky (2009-11-23 23:15:00) [2]
> Александр З. (23.11.09 22:12) [42]
> работать и осуществлять посылать запрос пинга, даже если
А Скрипач не нужен, родной. он только лишнее топливо жрёт.
--
Regards, LVT.
Александр З. (2009-11-23 22:12:00) [3]
> Anatoly Podgoretsky
Вопрос состоит в том, что при реализации вышеуказанного кода, возникает ошибка Socket Error.No route to host (при условии, что сервер отключен, недоступен и т.д.), через некоторое время и соответственно приложение (приложение выполняет роль монитора данного сервера на компе клиента) вылетает. Как добавить исключение, чтобы программа продолжала работать и осуществлять посылать запрос пинга, даже если нет отклика от сервера.
Anatoly Podgoretsky (2009-11-23 22:04:00) [4]> Александр З. (23.11.2009 22:02:40) [40]
В справке есть пример, но твой вопрос непонятный, загадочный.
Александр З. (2009-11-23 22:02:00) [5]
> Anatoly Podgoretsky
Я извиняюсь, а пример его реализации Вы смогли бы показать на примере моего кода. Спасибо Анатолий.
Anatoly Podgoretsky (2009-11-23 21:57:00) [6]> Александр З. (23.11.2009 21:50:38) [38]
Может быть ты про Raise говоришь, но не понятно.
Александр З. (2009-11-23 21:50:00) [7]В дополнение к предыдущему. Забыл добавить, что возникает ошибка, в случае длительного отсутствия пинга до данного сервера. Как ее поставить в исключения?
Александр З. (2009-11-23 21:48:00) [8]
procedure TForm1.Timer1Timer(Sender: TObject);
begin
IdIcmpClient1.Host :='10.1.1.5';
IdIcmpClient1.Ping;
IdIcmpClient1.ReceiveTimeout:=500;
if IdIcmpClient1.ReplyStatus.TimeToLive <>0 then
memo1.Lines.Add('Есть пинг!')
else
memo1.Lines.Add(Нет пинга!')
end;
Ребята подскажите, если в случае пропадания соединения с сервером, как мне поставить исключение, вернее порядок (try...exception)?
Сергей М. (2009-11-18 13:54:00) [9]
> это частные случаи и происходят они слава Богу не часто
Но обрабатывать-то их все равно следует ..
А если ты их обрабатываешь должным образом, то и проблема сама собой рассасывается..
А раз рассасывается, то и пятое колесо (ping) этой телеге не нужно
Anatoly Podgoretsky (2009-11-18 12:59:00) [10]> Tornado (18.11.2009 12:47:33) [33]
Ну так единственный вариант, это спросить явно, сделав какой либо запрос. А вот пинговать - это совсем не правильно, поскольку не дает никакого ответа, кроме слычая, что пинг работает.
Anatoly Podgoretsky (2009-11-18 12:57:00) [11]> kyn66 (18.11.2009 12:32:32) [32]
Я не знаю, по этому использовано слово "Вроде", что означает как может быть, так и ошибаюсь.
Tornado (2009-11-18 12:47:00) [12]
> Сергей М. © (18.11.09 12:09) [28]
Да согласен, не получается у меня правильно и понятно формулировать вопросы (( Вообщем программа периодически добавляет некие данные на удаленном компе (Firebird через FIB компоненты). Я к чему все это затеял, мне бы хотелось чтобы при запуске приложения какм-либо образом понять доступна БД или нет (уточняю). Понимаю что сейчас она доступна а через секекунду нет потому что сбой произошел или кабель порвали, но это частные случаи и происходят они слава Богу не часто.
Первое что пришло на ум - пинговать при запуске приложения удаленный комп. Я не говорю что это правильно, если есть варианты (а они безусловно есть) рад был бы о них услышать
kyn66 (2009-11-18 12:32:00) [13]
> Anatoly Podgoretsky © (18.11.09 11:31) [23]
> > Я использую IdIcmpClientВроде бы этот как раз работает
> с ErrorCode
Как раз у этого компонента нету упоминания о событии, связанного с ErrorCode
Сергей М. (2009-11-18 12:25:00) [14]
> kyn66 © (18.11.09 11:33) [24]
>
>
Код этот абсолютно непригоден для использования в доп.потоке.
Равно как и обработка события Application.OnException не позволяет перехватить исключения, возникающие в доп.потоках.
kyn66 (2009-11-18 12:23:00) [15]Это как вариант. А никто не утверждал что он единственный.
sniknik (2009-11-18 12:11:00) [16]> kyn66 © (18.11.09 11:33) [24]
глупости советуешь... заменять целый класс разнообразных ошибок одним "красивым повествованием"...
такие программы ОЧЕНЬ сложны в поддержке (т.е. в серьезной фирме с цто, отвечающей,и поддерживающей свои программы за такой код могут даже уволить... во всяком случае цто при рецидивах будет на этом настаивать).
хуже может быть только когда все ошибки заменяются одним сообщением. типа "а зато по русски".
и еще хуже когда ошибки скрываются, типа ничего не произошло.
Сергей М. (2009-11-18 12:09:00) [17]
> как это правильно реализовать? Нужно убедиться что удаленный
> компьютер доступен
Доступность компьютера - это нонсенс.
Говоря о доступности следует говорить не о компьютере, а о конкретном сервисе, потенциально предоставлямом компьютером.
Если тебя интересует, например, некий прикладной сервис (например, http), то и проверять на доступность следует именно его. А для этого следует обратиться к компьютеру по соответствующему прикладному протоколу, например, успешно послать http-запрос и успешно же получить http-ответ на этот запрос.
brother (2009-11-18 11:59:00) [18]согласен с [20] и пока с [25]
Anatoly Podgoretsky (2009-11-18 11:59:00) [19]> kyn66 (18.11.2009 11:33:24) [24]
А не устанешь подставлять для всех ошибок то?
Германн (2009-11-18 11:33:00) [20]<offtop>
Чем-то мне этот сабж напоминает вопрос "Как узнать есть ли связь с базой до подключения к ней?"
</offtop>