Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отлов отключения от интернета, Как это делается? 
:(
    Опции темы
Superklug
Дата 19.9.2009, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Многие программы (например ICQ), почти моментально реагируют на отключение от интернета. Как это реализовано?
Очень надеюсь на вашу помощь...
PM MAIL   Вверх
Sonic7272
Дата 19.9.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 18.9.2009

Репутация: 3
Всего: 3



Как именно в ICQ не знаю.
Но можно, например, иногда проверять соединение по нужному протоколу с внешним адресом...
Трудно посоветовать что либо конкретное, не зная твоих задумок или планов в проекте.
Распиши, что именно требуется?!
PM MAIL   Вверх
Superklug
Дата 20.9.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



В моей программе через TCppWebBrowser открыт сайт. Программа переодически обновляет страницу и обрабатывает данные...

Цитата(Sonic7272 @  19.9.2009,  23:45 Найти цитируемый пост)
Но можно, например, иногда проверять соединение по нужному протоколу с внешним адресом...

Очевидно проверку запускать по таймеру. А как проверить? Какой-нибудь там ping? Я просто в этом совсем не разбираюсь(
PM MAIL   Вверх
Sonic7272
Дата 20.9.2009, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 18.9.2009

Репутация: 3
Всего: 3



Ну если не хочешь лезть в дебри сокета, то возьми компонент NMHTTP во вкладке FastNet(BCB6).
В Host вбей адрес сервера, например www.mail.ru
В Port вбей 80(например)
А код 
Код

NMHTTP1-Open();

соединение и ошибки проверяй в Events - OnConnect, OnFailure...
В компоненте, который ты используешь, наверняка есть свои события... Посмотри внимательно.

Это сообщение отредактировал(а) Sonic7272 - 20.9.2009, 15:49
PM MAIL   Вверх
Superklug
Дата 20.9.2009, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Примерно так?
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    NMHTTP1->Connect();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    if(!NMHTTP1->Connected)
        ShowMessage("disconnect");
}


PM MAIL   Вверх
Sonic7272
Дата 20.9.2009, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 18.9.2009

Репутация: 3
Всего: 3



Мысль верная.
Смотри, если соединение  на порт 80 произошло успешно, то первое что сработает это событие OnConnect.
Если порт на сервере не отвечает, то действие компонента(NMHTTP1->Open) как бы зависает, примерно на 20 секунд, а потом возвращает ошибку.
Но если тебе 20 секунд дороги, то запусти таймер с задержкой 1-2-5 сек., и если за это время не произошло событие OnConnect, то действуй дальше по своим соображениям.
Если хочешь проверять порт сервера часто, и вообще после коннекта, обязательно делай  NMHTTP1->Close().
Можешь так же воспользоваться try{}; catch(...){};

Это сообщение отредактировал(а) Sonic7272 - 20.9.2009, 16:49
PM MAIL   Вверх
Superklug
Дата 20.9.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



У этого компонента нет метода Open. А еще не понял зачем выполнять Close.

Если проверять соединение по таймеру, то как часто это делать? На сколько я понимаю каждая такая проверка - это трафик и дополнительная нагрузка на процессор...
PM MAIL   Вверх
Sonic7272
Дата 20.9.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 18.9.2009

Репутация: 3
Всего: 3



Моя ошибка, нужно Connect, Disconnect.
Да, конечно можно и так
Код

if(!NMHTTP1->Connected){}

...тебе решать.
Ну а насчет того как часто, думай, нужна ли тебе посекундная проверка соединения или перед
Цитата(Superklug @  20.9.2009,  13:05 Найти цитируемый пост)
Программа переодически обновляет страницу и обрабатывает данные...


PM MAIL   Вверх
Superklug
Дата 20.9.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Sonic7272, Спасибо тебе большое!
PM MAIL   Вверх
Superklug
Дата 20.9.2009, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Последний вопрос... Чем отличаются TIdHTTP и TNMHTTP. Что лучше использовать?
PM MAIL   Вверх
Sonic7272
Дата 20.9.2009, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 18.9.2009

Репутация: 3
Всего: 3



Не работал с ним.
Судя по той задаче, что требуется от xxHTTP в твоей программе,  я бы не стал терять время на разбор полетов...
Но если будешь расширять применение его функции, то придется погуглить...
PM MAIL   Вверх
_Dimon_
Дата 20.9.2009, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



А почему бы не заюзать TIdIcmpClient с вкладки Indy Clients?

Код

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{

try {
       IdIcmpClient1->Host = //тут твой хост;
       IdIcmpClient1->Ping();
     }
 
catch(...)
 {
  Timer1->Enabled=false;
  ShowMessage("disconnect");
 }

}


Там есть 2 важных свойства:

PacketSize - по умолчанию 1024 (я у себя сменил на 32)
ReceiveTimeout - по умолчанию 5000 (ставь скок хочеш smile)) )
PM MAIL   Вверх
SenkraD
Дата 20.9.2009, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



_Dimon_, твоё решение подходит если не может быть ситуации, что хост жив, а HTTP сервак - нет,
так что, для уверености, нужно использовать предложенные раньше способы.


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
_Dimon_
Дата 21.9.2009, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Цитата

_Dimon_, твоё решение подходит если не может быть ситуации, что хост жив, а HTTP сервак - нет


Согласен, и такое бывает.

Только что посмотрел еще раз на этот компонент (TIdIcmpClient) и увидел параметр Port. Он у меня всегда = 0.
Никто мне не подскажет нафига он вообще нужен, а то справку я так и не понял
PM MAIL   Вверх
Superklug
Дата 21.9.2009, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Цитата(SenkraD @  20.9.2009,  23:38 Найти цитируемый пост)
_Dimon_, твоё решение подходит если не может быть ситуации, что хост жив, а HTTP сервак - нет,

Ммм... Объясните пожалуйста как это? Я в сетях не особо разбираюсь...

На сколько я понимаю ICMP быстрее, чем HTTP и трафика меньше... Или я не прав?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1990 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.