有時候,我們需要判斷是否可以上網,比如說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的)