Поиск:

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


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



возможны(и вполне вероятны) два "плохих" варианта:
  •  пинг проходит, web-сервер не пашет.
  •  пинг не проходит(блокируется), web-сервер работает.

набросал проверялку:
Код

#include "winsock2.h"
#include <windows.h>
#pragma comment(lib, "wininet.lib")

// варианты hostname: "ya.ru" / "yandex.ru:80" / "93.158.134.8:80"
bool CheckConnect(const char *hostname, int *error = 0)
{
  WSADATA wsaData;
  int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
  if (iResult != NO_ERROR) return false;
  try {
    char buf[256] = "";
    int port = 0;
    strncpy(buf, url, sizeof(buf)-1);
    char *pd = strrchr(buf, ':');
    if (pd)
    {
      *pd++ = 0;
      port = atoi(pd);
    }
    if (!port) port = 80;
    hostent *host = 0;
    if (isalpha(buf[0]))
    {
      host = gethostbyname(buf);
      if (!host) return false;
    }
    SOCKET cs;
    cs = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (cs == INVALID_SOCKET) return false;
    sockaddr_in cp;
    cp.sin_family = AF_INET;
    cp.sin_addr.s_addr = host ? *(u_long*)host->h_addr_list[0] : inet_addr(buf);
    cp.sin_port = htons(port);
    if (connect(cs, (SOCKADDR*)&cp, sizeof(cp)) == SOCKET_ERROR)
      return false;
    closesocket(cs);
  }
  __finally
  {
    if (error) *error = WSAGetLastError();
    WSACleanup();
  }
  return true;
}

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


Бывалый
*


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

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



dumb, ваш пример я так понимаю на WinAPI? Он исключает "плохие варианты"?
PM MAIL   Вверх
Alca
Дата 21.9.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Цитата

Он исключает "плохие варианты"?

Чего?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Superklug
Дата 21.9.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Alca @  21.9.2009,  12:58 Найти цитируемый пост)
Чего? 


Цитата(dumb @  21.9.2009,  05:36 Найти цитируемый пост)
возможны(и вполне вероятны) два "плохих" варианта:

    *  пинг проходит, web-сервер не пашет.
    *  пинг не проходит(блокируется), web-сервер работает.


PM MAIL   Вверх
Alca
Дата 21.9.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Цитата

Он исключает "плохие варианты"?

 smile 
Цитата

возможны(и вполне вероятны) два "плохих" варианта:


Добавлено через 2 минуты и 47 секунд
Код

/**********************************************************************
*    bIsOffline.cpp
*
***********************************************************************/


#include <wininet.h>    
#pragma comment(lib, "wininet.lib")

//---------------------------------------------------------------------------
bool bIsOffline() {
    DWORD dwFlags = INTERNET_CONNECTION_LAN;   
    if (InternetGetConnectedState(&dwFlags, 0) == 0) {
        return true;
    } else {
        return false;
    }     
}
//---------------------------------------------------------------------------
/*
#define INTERNET_CONNECTION_MODEM           0x01
#define INTERNET_CONNECTION_LAN             0x02
#define INTERNET_CONNECTION_PROXY           0x04
#define INTERNET_CONNECTION_MODEM_BUSY      0x08  //no longer used
#define INTERNET_RAS_INSTALLED              0x10
#define INTERNET_CONNECTION_OFFLINE         0x20
#define INTERNET_CONNECTION_CONFIGURED      0x40
*/



--------------------
PM WWW ICQ Skype Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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