您的位置:首页 > 理论基础 > 计算机网络

使用API判断网络是否连通(InternetGetConnectedState / IsNetworkAlive)

2013-04-17 10:58 916 查看
转至:http://blog.csdn.net/iiprogram/article/details/2452254


使用API判断网络是否连通(InternetGetConnectedState / IsNetworkAlive)

// test.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include "test.h"

#include <Wininet.h>

#include <Sensapi.h>

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// The one and only application object

CWinApp theApp;

using namespace std;

void Fun_InternetGetConnectedState()

{

  

//#define INTERNET_CONNECTION_MODEM           1

//#define INTERNET_CONNECTION_LAN             2

//#define INTERNET_CONNECTION_PROXY           4

//#define INTERNET_CONNECTION_MODEM_BUSY      8

  

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<<"不在线/n";

}

void Fun_IsNetworkAlive()

{

  

DWORD   flags;//上网方式 

BOOL   m_bOnline=TRUE;//是否在线  

m_bOnline=IsNetworkAlive(&flags);   

if(m_bOnline)//在线   

{   

   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";

}

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

int nRetCode = 0;

// initialize MFC and print and error on failure

if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))

{

   // TODO: change error code to suit your needs

   cerr << _T("Fatal Error: MFC initialization failed") << endl;

   nRetCode = 1;

}

else

{

   // TODO: code your application's behavior here.

//   CString strHello;

//   strHello.LoadString(IDS_HELLO);

//   cout << (LPCTSTR)strHello << endl;

   int i=0;

   while (TRUE)

   {

    cout << "请选择测试的方式:/n"

     << "1. InternetGetConnectedState/n"

     << "2. IsNetworkAlive"

     << endl;

    cin >> i;

    switch(i) 

    {

    case 1:

     Fun_InternetGetConnectedState();

     break;

    case 2:

     Fun_IsNetworkAlive();

     break;

    default:

     cout << "错误!/n";

    }

    cout << endl;

   }

}

return nRetCode;

}

说明:

InternetGetConnectedState():对网络状况不能及时反应

IsNetworkAlive():可以及时反应网络连通情况,但是需要服务System Event Notification支持(系统默认自动启动该服务)。使用该函数,需要安装最新的SDK(如.net的)

#pragma comment(lib, "Sensapi.lib")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: