Как сказать, если подключен к интернету - PullRequest
3 голосов
/ 26 января 2009

Я хочу написать приложение для Windows, которое делает что-то, когда я отключаюсь от Интернета . Я думал о том, чтобы написать очень простое приложение на C # / Delphi, которое просто опрашивает каждые 20 секунд, чтобы узнать, все ли еще я подключен.

Если мне нужно опросить, мне бы очень хотелось другое решение, чем попытка загрузить веб-страницу из сети. Я не могу предположить, что неудачная попытка загрузки означает «не в сети», поскольку могут быть другие приложения, которые поглощают пропускную способность интернета. Кроме того, я уверен, что постоянное подключение / загрузка с определенного сайта приведет к блокировке моего IP-адреса.

Я уверен, что есть способ узнать, подключены ли вы к сети без загрузки / подключения к удаленному серверу , но я не уверен, как.

Ответы [ 3 ]

10 голосов
/ 26 января 2009

Остерегайтесь того, что подключение к Интернету на самом деле ничего не значит: что, если вы подключены к своему провайдеру, но магистраль не работает, или все сайты, к которым вы хотите получить доступ, находятся в стране, которая недавно вышла из сети? Наличие соединения не означает, что вы можете делать то, что хотите.
В любом случае, как было сказано ранее, вы можете использовать InternetGetConnectedState API для проверки того, что у вас настроено действительное подключение к Интернету.
Например, следующая процедура правильно сказала мне, что у меня есть подключение к локальной сети, но не удалось обнаружить, что мой брандмауэр ZoneAlarm настроен на блокировку «Вся активность в Интернете», что означает, что вы фактически потеряли все подключения к Интернету.

Дельфийская рутина:

procedure IsConnected;
var
  dwFlags: DWORD;
begin
  if InternetGetConnectedState(@dwFlags, 0) then
  begin
    if (dwFlags and INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM  then
      ShowMessage('Modem Connection')
    else
    if (dwFlags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then
      ShowMessage('LAN Connection')
    else
    if (dwFlags and INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY then
      ShowMessage('Connection thru Proxy')
    else
    if (dwFlags and INTERNET_CONNECTION_OFFLINE) = INTERNET_CONNECTION_OFFLINE then
      ShowMessage('Local system in offline mode')
    else
    if (dwFlags and INTERNET_CONNECTION_CONFIGURED) = INTERNET_CONNECTION_CONFIGURED then
      ShowMessage('Valid connection exists, but might or might not be connected')
  end
  else
    ShowMessage('Not Connected. Try to connect and risk of being prompted to dial into another Internet Service Provider.');
end;
3 голосов
/ 26 января 2009

Вызовите функцию InternetGetConnectedState. Эта статья базы знаний объясняет, как это сделать.

2 голосов
/ 26 января 2009

Похоже, что это можно сделать, используя метод, описанный здесь: http://www.csharphelp.com/archives3/archive499.html

...