Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 500

/ вопрос открыт /

Здравствуйте!
Можно сделать так, что бы программа отслеживала подключение к интернету - и если оно отсутствует или прервалось выдавала ошибку? Спасибо!

Хитманчан Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Хитманчан (статус: Посетитель)
Вопрос отправлен: 10 марта 2009, 13:43
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Nasgool

Здравствуйте, Хитманчан!
Если ваша программа работает с интернетом (а это скорее всего так) и использует TIdTCPServer или TIdTCPClient, то любое обращении к сети, ка-то Connect, Disconnect, Send, Read нужно заключать в try ... except ... end и обрабатывать исключения EIdException.

"Исключения Indy только слегка отличаются от исключений VCL, все исключения Indy наследуются от EIdException. Если вы желаете обрабатывать исключения Indy отдельно от исключений VCL, то это можно сделать, как в следующем примере.
Для использования EIdException вы должны добавить IdException в uses."

Цитата из книги "Глубины Indy"

Приложение:
  1. try
  2.  
  3. Client.Connect;
  4.  
  5. try
  6.  
  7. // Perform read/write here
  8.  
  9. finally
  10.  
  11. Client.Disconnect;
  12.  
  13. end;
  14.  
  15. except
  16.  
  17. on E: EIdException do
  18.  
  19. begin
  20.  
  21. ShowMessage('Communication Exception: ' + E.Message);
  22.  
  23. end
  24.  
  25. else
  26.  
  27. begin
  28.  
  29. ShowMessage('VCL Exception: ' + E.Message);
  30.  
  31. end;
  32.  
  33. end;
  34.  


Ответ отправил: Nasgool (статус: 2-ой класс)
Время отправки: 11 марта 2009, 02:42
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 11 марта 2009, 18:00; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 10 марта 2009, 14:45 [#1]:

В общем - никак.
А так по отдельности - можно. Если это через модем (rasdial), то это отслеживаемо. Если же это по сети - сложнее. Наиболее надёжный способ - время от времени пинговать несколько сайтов. Если перестали откликаться - значит всё, упало
Галочка "подтверждения прочтения" - вселенское зло.
Хитманчан

Хитманчан (статус: Посетитель), 10 марта 2009, 16:36 [#2]:

Вадим К, не подскажите как это сделать (время от времени пинговать несколько сайтов)? Спасибо!
Вадим К

Вадим К (статус: Академик), 10 марта 2009, 22:52 [#3]:

Если установлена библиотека Indy (на новых версиях, начиная с 6 она есть обычно), то там можно найти компонент с именем IdICMP (вроде так). Ему только адрес надо передать, а он всё сделает.
Галочка "подтверждения прочтения" - вселенское зло.
Хитманчан

Хитманчан (статус: Посетитель), 10 марта 2009, 23:35 [#4]:

Вадим К, спасибо! Только для меня это глухой лес... может знаете, где почитать об этом можно по подробнее... ато я гугл поюзал - ничего не нашел толком... спасибо!
Вадим К

Вадим К (статус: Академик), 11 марта 2009, 02:42 [#5]:

А какой гугл Вы используете? я лично google.com.ua, мож от этого зависит? так как прям на первой странице уже кусочек кода был виден. вот он
 icmp: TIdIcmpClient;
.....
icmp.Host:='194.87.0.50';
icmp.Ping();
showmessage('Время до хоста: '+inttostr(icmp.ReplyStatus.MsRoundTripTime)+'ms');
Да, точное название компонента - TIdIcmpClient
Галочка "подтверждения прочтения" - вселенское зло.
Хитманчан

Хитманчан (статус: Посетитель), 11 марта 2009, 18:00 [#6]:

Nasgool, Вадим К, спасибо! Буду пробовать)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:42
Выполнено за 0.03 сек.