Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработать ошибку пинга [D7, XP]


Страницы:   1 2 3

Tornado ©   (2009-11-18 08:51:00) 

Подскажите пожалуйста, моя программа при запуске пингует удаленный компьютер (в процессе работы она должна обмениваться данными с ним). Если по каким-то причинам комп на котором установили программу не подключен к сети или сеть не работает (в нашей огромной конторе такое к сожалению бывает, потом спохватятся, сеть настроят) то прога выдает ошибку "Socet Error.No route to host" что вообщемто и понятно. Вопрос в том как бы "красиво обработать" эту ошибку чтобы не получать это сообщение, а допустим в статусной строке писать "Нет соединения с сревером". А то юзеры очень пугаются таких ошибок :)


kyn66   (2009-11-18 11:33:00) [21]


> Tornado   (18.11.09 10:49) [13]


Нет, нужно подставить класс конкретно проверяемой ошибки. В "Страшном окне написано будет". Можно оформить через блок
try
...
except
...
end

begin
  try
    // нечто выполняем...
  except
    // возникла ошибка - реагируем
    on E...Error do
      ShowMessage('Красивое повествование об ошибке');
    on E...Error do  // другой предполагаемый вид ошибки
      ShowMessage('Некая другая ошибка');
    else // если ничего не прокатило
      Application.HandleException(Sender) // во всех остальных случаях
    end;


Anatoly Podgoretsky   (2009-11-18 11:31:00) [22]


> Я использую IdIcmpClient

Вроде бы этот как раз работает с ErrorCode


Anatoly Podgoretsky   (2009-11-18 11:30:00) [23]


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

Конечно и это плохо.


Anatoly Podgoretsky   (2009-11-18 11:28:00) [24]


> Из слов автора вытекает, что пользователей пугает именно
> окно ошибки с краснвм крестом. А вот чтобы оно не появлялось
> как раз таки и нужно сделать свою мякгую обработку через
> перехват исключений. Чего гадать. Давайте дождемся что автор
> скажет по этому поводу.

А у меня другое впечатление, например что пугает именно то сообщение, на англиском языке, но я же не стал называть твои сообщения ехидными, хотя между ними нет никакой разницы.


Anatoly Podgoretsky   (2009-11-18 11:26:00) [25]


> Tornado   (18.11.09 10:34) [10]

Ну кто его знает, твой вопрос не аккуратно построен, а благодарил ты зря, код неверный и подход тоже. Для ответа надо выдать гораздо больше информации, чем ты выдал.


DVM   (2009-11-18 11:24:00) [26]


> Нужно убедиться что удаленный компьютер доступен.

Доступен для чего? Если нужно проверить, доступен ли компьютер по определенному протоколу и порту - вот и проверяй по этому протоколу и порту. Хотя все равно это сомнительная пользя - через миг после проверки он становится недоступен и дальше что? Доступность или недоступность она определяется в момент работы с узлом.


Tornado   (2009-11-18 11:05:00) [27]


> Сергей М. ©   (18.11.09 10:50) [14]

Может подскажете как это правильно реализовать? Нужно убедиться что удаленный компьютер доступен. Какие еще есть способы?


Сергей М.   (2009-11-18 10:59:00) [28]


> brother ©   (18.11.09 10:54) [16]


Совершенно верно.
Или, что тоже немаловероятно, маршрутизатор/файрвол на одном из хостов на потенциальном маршруте между А и В попросту блокирует форвардинг icmp-пакетов от А до В и/или в обратном направлении.


brother   (2009-11-18 10:54:00) [29]

> То что удаленный хост не ответил на твой ICMP-эхо-запрос,
> вовсе не означает что он не доступен, и уж тем более что
> с ним "нет соединения".

от может принимать подключения, например http, но не отвечать на эхо запросы вообще.


Сергей М.   (2009-11-18 10:50:00) [30]


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


Нет.


Сергей М.   (2009-11-18 10:50:00) [31]


> Нет соединения с сревером


То что удаленный хост не ответил на твой ICMP-эхо-запрос, вовсе не означает что он не доступен, и уж тем более что с ним "нет соединения".

Короче полную ерунду ты реализуешь.


Tornado   (2009-11-18 10:49:00) [32]


> kyn66 ©   (18.11.09 09:25) [2]


procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := MyExcept;
end;

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


Tornado   (2009-11-18 10:36:00) [33]

Вот код (прошу не бить сильно, чесно нарыл в инете, если он совсем кривой прошу поправить)


IdIcmpClient1.Host := IniParam.ReadString('ServerIP', 'ServerHostIP',
     '');
   IdIcmpClient1.Ping();
   if IdIcmpClient1.ReceiveTimeout >= 30000 then
   begin
     Exit;
   end
   else......


Tornado   (2009-11-18 10:34:00) [34]


> Leonid Troyanovsky ©   (18.11.09 09:38) [5]

Я использую IdIcmpClient


Tornado   (2009-11-18 10:34:00) [35]


> Anatoly Podgoretsky ©   (18.11.09 09:06) [1]

Анатолий, с выводом сообщения в статусстроке я разобрался несколько лет назад :))


Tornado   (2009-11-18 10:33:00) [36]


> kyn66 ©   (18.11.09 09:25) [2]

Спасибо!


kyn66   (2009-11-18 09:59:00) [37]


> именно такой текст, что бы не пугать другим.


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


Anatoly Podgoretsky   (2009-11-18 09:45:00) [38]


> Leonid Troyanovsky ©   (18.11.09 09:38) [5]

Вероятность близка к 100%, поскольку отсутствие пинга это не ошибка, а одно из нормальных состояний. Ошибка когда нет соединения.


app   (2009-11-18 09:42:00) [39]


> Я думаю StatusBar.SimpleText := 'Нет соединения с сревером';
>  и 0-классник додумался бы написать.

Что поделаешь, если автор пишет в твоем репертуара, но он четко спросил как вывести, именно такой текст, что бы не пугать другим.


Leonid Troyanovsky   (2009-11-18 09:38:00) [40]


> kyn66 ©   (18.11.09 09:25) [2]

> написать. А вот человеку нужно было посоветовать перехватить
> системную ошибку и вывести своим сообщением... чтобы красиво

Написанное тобой может быть и вовсе зряшным, если,
вопрошающий пользует, например, TTcpClient, или
нечто в этом роде, с обработчиком OnError и ErrorCode.

--
Regards, LVT.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо