Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2014, 13:10   #1
Dj_DeVaIs
Пользователь
 
Регистрация: 07.03.2009
Сообщений: 52
По умолчанию Когда нет Инета IdHttp должен быть выключен.

Добрый день.
Ситуация такая. Есть прога которая отправляет смс через интернет.
Но бывает так что инет выключен (по не понятным причинам) а в проге надо работать. но в ней нельзя работать так как вылазит ошибка Socket error #10060. Ну это понятно так как нет интернета он и не может соединиться с сервером.
Запрос делаю через get.

Отсюда вопрос как выключить в IdHttp проверку или сделать выключение его самого что бы когда инета нет он не работал? Побывал так
Код:
IdHttp.Disconnect
ни чего не помогло...Прошу Вашей помощи.
Dj_DeVaIs вне форума Ответить с цитированием
Старый 07.07.2014, 13:38   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а может обработчик ошибок добавить? не?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.07.2014, 13:45   #3
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Код:
Try 
get.
Except
IdHttp.Disconnect;
end;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 07.07.2014, 14:15   #4
Dj_DeVaIs
Пользователь
 
Регистрация: 07.03.2009
Сообщений: 52
По умолчанию

сделал. спасибо за помошь.

вот код кому надо:

Код:
function CheckInternetConnection(Host: string='google.com'; Port: integer=80; Timeout: integer=1000): boolean;
  var TCP: TIdTCPClient;
begin
  TCP:=TIdTCPClient.Create(nil);
  try
    TCP.Host:=Host;
    TCP.Port:=Port;
    TCP.ConnectTimeout:=Timeout;
    try
      TCP.Connect;
      Result:=TCP.Connected;
      FMain.StatusBar1.Panels[1].Text:='Интернет: - Есть';
    except
     on  e: exception do
     begin
      Result:=false;
      FMain.StatusBar1.Panels[1].Text:='Интернет: - Нет';
      FSMS2014.IdHTTP1.Free;
      FSMS2014.IdHTTP2.Free;

      FOdin_SMS.IdHTTP1.Free;
      FOdin_SMS.IdHTTP2.Free;



     end;
    end;
  finally
    TCP.Free;
  end;
end;
Dj_DeVaIs вне форума Ответить с цитированием
Старый 07.07.2014, 14:24   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
'Интернет: - Нет'
далеко не факт

IdHttp TIdTCPClient ?? несколько странновато
eval вне форума Ответить с цитированием
Старый 07.07.2014, 15:05   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
IdHttp TIdTCPClient ?? несколько странновато
Кстати да. TIdTCPClient дизконнекта не требует при отрубе инета. Это событие должно самостоятельно возникнуть.
А вот IdHttp он вообще независим - послал запрос, получил данные и все. Он отключен. За ним проверять ничего не надо. Так всетки - какой-же компонент используется?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.07.2014, 15:09   #7
Dj_DeVaIs
Пользователь
 
Регистрация: 07.03.2009
Сообщений: 52
По умолчанию

использоваться IdHTTP. для отправки смс.
а TIdTCPClient это просто для проверки интернета.

Последний раз редактировалось Dj_DeVaIs; 07.07.2014 в 15:10. Причина: забыл.
Dj_DeVaIs вне форума Ответить с цитированием
Старый 07.07.2014, 15:48   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Нет смысла. Если IdHTTP слажает, это можно отловить в try-except и в цикле повторить попытку. Лепить сюда второй компонент только для проверки это как пятое колесо зайцу. И потом ты уж если проверяешь соединение лучше используй обычный Ping.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.07.2014, 16:55   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
а TIdTCPClient это просто для проверки интернета.
http://www.foxbase.ru/delphi/proverk...t-v-delphi.htm

что пинг что не пинг. все едино
какая разница есть инет или нет, если целевой сайт (сервер) в дауне? - никакой
какая разница есть пинг или нет, если целевой сайт (сервер) в дауне? - никакой
какая разница сайт (сервер) в дауне или нет, если инета нет? - никакой

отсюда вывод - обыкновенная работа с исключениями вполне себе достаточна

для проверки соединения хватает и того что есть
http://z-oleg.com/delphi/net2.htm и тут автор также делает вывод
Цитата:
Следовательно, я хочу сформулировать вывод: Бессмысленно анализировать факт наличия некоего абстрактного "соединение с Интернет" - нужно пробовать выполнить заданную операцию и анализировать успешность ее выполнения. Или, перефразируя вышесказанное, наличие связи нужно рассматиривать в контексте каждого конретного сервера Интернет для каждой конкретной операции. Инача возможна ситуация, когда, к примеру, сервер отвечает на ping, но доступ к нему по порту 80 закрыт - в данном случае даже ping не является показателем наличия связи и доступности сервера
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Художник, - должен быть голодным! Smitt&Wesson Свободное общение 0 06.04.2014 06:24
Каким должен быть интерфейса gusluk Свободное общение 17 05.12.2013 19:40
Каким должен быть код? pufystyj Свободное общение 5 15.08.2012 01:29
Открытый доступ к компьютеру для всего инета. Опасно! Как быть? Web-Gangsta Безопасность, Шифрование 6 02.11.2009 21:44
Как узнать когда браузер скачивает, а когда нет? iPod Работа с сетью в Delphi 1 07.05.2007 15:16