使用API判断网络是否连通

#include <windows.h> #include <Wininet.h> #include <Sensapi.h> #include <iostream> using namespace std; #pragma comment( lib , "Sensapi.lib" ) #pragma comment( lib , "Wininet.lib" ) BOOL IsConnectedState() { //#define INTERNET_CONNECTION_MODEM 1 //#define INTERNET_CONNECTION_LAN 2 //#define INTERNET_CONNECTION_PROXY 4 //#define INTERNET_CONNECTION_MODEM_BUSY 8 DWORD flags;//上网方式 BOOL bOnline=TRUE;//是否在线 bOnline=InternetGetConnectedState(&flags,0); if(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<<"不在线/n"; return bOnline; } BOOL IsNetworkConnectAlive() { DWORD flags;//上网方式 BOOL bOnline=TRUE;//是否在线 bOnline=IsNetworkAlive(&flags); if(bOnline && GetLastError() == 0)//在线,调用后要用GetLastError确定是否调用成功 { if ((flags & NETWORK_ALIVE_LAN) ==NETWORK_ALIVE_LAN) { cout<<"在线:NETWORK_ALIVE_LAN/n"; } if ((flags & NETWORK_ALIVE_WAN) ==NETWORK_ALIVE_WAN) { cout<<"在线:NETWORK_ALIVE_WAN/n"; } if ((flags & NETWORK_ALIVE_AOL) ==NETWORK_ALIVE_AOL) { cout<<"在线:NETWORK_ALIVE_AOL/n"; } } else cout<<"不在线/n"; return bOnline; } int main(int argc,char** argv) { IsConnectedState(); IsNetworkConnectAlive(); } //说明: //InternetGetConnectedState():对网络状况不能及时反应 //IsNetworkAlive():可以及时反应网络连通情况,但是需要服务System Event Notification支持(系统默认自动启动该服务)。调用后要用GetLastError确定是否调用成功 

你可能感兴趣的:(网络,api,System,NetWork,include,internet)