判斷當前網絡是否連通?

      有時候,我們需要判斷是否可以上網,比如說QQ,當網線撥出來的時候它,怎麼能知道現在掉線了呢?我猜它肯定會啓動啓動一個線程隔段時間檢查下網絡情況吧(具體是不是這樣,我也不知道),如果真的有這麼一個要求,我們怎麼實現呢。下面我就提供一種方法:

用API:InternetGetConnectedState

它的函數原型:InternetGetConnectedState(__out LPDWORD lpdwFlags, DWORD dwReserved)

下面是我寫的一個小例子:

#include <iostream>
#include <string>
#include <windows.h>
#include <Wininet.h>
#pragma comment(lib, "WinInet.lib")
using namespace std;

int main()
{
 DWORD   flags; 
 BOOL m_bOnline = TRUE;

 m_bOnline = InternetGetConnectedState(&flags, 0);
 if (m_bOnline)
 {
  if ((flags & INTERNET_CONNECTION_MODEM) ==INTERNET_CONNECTION_MODEM)
  {
   cout<<"在線:撥號上網/n";
  }
  if ((flags & INTERNET_CONNECTION_LAN) ==INTERNET_CONNECTION_LAN)
  {
   cout<<"在線:通過局域網/n";
  }
  if ((flags & INTERNET_CONNECTION_PROXY) ==INTERNET_CONNECTION_PROXY)
  {
   cout<<"在線:代理/n";
  }
  if ((flags & INTERNET_CONNECTION_MODEM_BUSY) ==INTERNET_CONNECTION_MODEM_BUSY)
  {
   cout<<"MODEM被其他非INTERNET連接佔用/n";
  }
 }
 else
 {
  cout<<"您已經斷網了。"<<endl;
 }
 return 0;
}

說明:
InternetGetConnectedState():對網絡狀況不能及時反應;

IsNetworkAlive():可以及時反應網絡連通情況,但是需要服務System Event Notification支持(系統默認自動啓動該服務)。使用該函數,需要安裝最新的SDK(如.net的)

作者:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章