1. /本机网络连接类型(成功)
  2. #define  NET_TYPE_RAS_DIAL_UP_CONNECT_NET           0x01    //上网类型:采用RAS拨号连接上网    0x01
  3. #define  NET_TYPE_LAN_CONNECT_NET                   0x02    //上网类型:采用网卡通过局域网上网 0x02
  4. #define  NET_TYPE_PROXY_CONNECT_NET                 0x04    //上网类型:使用代理服务器上网     0x04
  5. #define  NET_TYPE_RAS_INSTALL                       0x10    //RAS安装                        0x10
  6. //本机网络连接(失败)
  7. #define  NET_TYPE_NO_CONNECT_NET                    0x41    //未连接到网络
  8. #define  NET_STATE_VALID_CONNECT_NOCONNECT_NET      0x40    //可以联网,但当前不可用    0x40
  9. #define  NET_STATE_MODEM_BUSY                       0x08    //调制解调器 繁忙           0x08
  10. #define  NET_STATE_SYSTEM_OFFLINE_MODE              0x20    //系统脱机模式              0x20
  11. CheckNet()
  12. {
  13. if(!InternetGetConnectedState(&dwOnline, 0))
  14. {
  15. if (dwOnline & INTERNET_CONNECTION_CONFIGURED )
  16. {
  17. return NET_STATE_VALID_CONNECT_NOCONNECT_NET;
  18. }
  19. if (dwOnline & INTERNET_CONNECTION_MODEM_BUSY)
  20. {
  21. return NET_STATE_MODEM_BUSY;
  22. }
  23. if (dwOnline & INTERNET_CONNECTION_OFFLINE)
  24. {
  25. return NET_STATE_SYSTEM_OFFLINE_MODE;
  26. }
  27. return NET_TYPE_NO_CONNECT_NET;
  28. }
  29. if ( dwOnline& INTERNET_CONNECTION_MODEM )      //上网类型:采用RAS拨号连接上网
  30. {
  31. return  NET_TYPE_RAS_DIAL_UP_CONNECT_NET;
  32. }
  33. else if ( dwOnline&INTERNET_CONNECTION_LAN  )  //上网类型:采用网卡通过局域网上网
  34. {
  35. return NET_TYPE_LAN_CONNECT_NET;
  36. }
  37. else if ( dwOnline& INTERNET_CONNECTION_PROXY) //在线:代理
  38. {
  39. return NET_TYPE_PROXY_CONNECT_NET;
  40. }
  41. else if ( dwOnline&INTERNET_CONNECTION_MODEM_BUSY ) //MODEM被其他非INTERNET连接占用
  42. {
  43. return NET_TYPE_RAS_INSTALL;
  44. }
  45. }

MSDN中定义了7种参数类型,但实际中wininet.h头文件中只对四种类型的值进行了定义
7种类型:
INTERNET_CONNECTION_LAN          局域网
INTERNET_CONNECTION_MODEM        拨号上网
INTERNET_CONNECTION_PROXY       代理
INTERNET_CONNECTION_MODEM_BUSY  代理被占用
INTERNET_CONNECTION_CONFIGURED    虽然可以联网,但当前不可用
INTERNET_CONNECTION_OFFLINE     离线
INTERNET_RAS_INSTALLED       RAS安装

Wininet.h头文件中值定义:
// Flags for InternetGetConnectedState and Ex
#define INTERNET_CONNECTION_MODEM           0x01
#define INTERNET_CONNECTION_LAN             0x02
#define INTERNET_CONNECTION_PROXY           0x04
#define INTERNET_CONNECTION_MODEM_BUSY      0x08  /* no longer used */
#define INTERNET_RAS_INSTALLED              0x10
#define INTERNET_CONNECTION_OFFLINE         0x20
#define INTERNET_CONNECTION_CONFIGURED      0x40

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

微软文档:
http://www.microsoft.com/china/technet/security/topics/serversecurity/tcg/tcgch07n.mspx

System Event Notification

System Event Notification (SENS) 服务监视并跟踪计算机事件(如 Windows 登录网络和电源事件)。它还将这些事件通知给 COM+ 事件系统 订阅者。在 Windows XP 和 Windows Server 2003 上默认安装并自动运行此服务。

如果 System Event Notification 服务停止,COM+ Event System 服务的订阅者将不会接收到事件通知,并且会发生以下问题:

Win32 API IsNetworkAlive() 和 IsDestinationReachable() 将无法运行。这些 API 大多在便携式计算机的移动应用程序中使用。

ISens* 接口将无法使用。SENS 登录/注销通知将失败。

SyncMgr (mobsync.exe) 将无法正常运行。SyncMgr 依赖于连接信息,以及来自 SENS 的网络连接/断开、登录/注销通知。

COM+ EventSystem 试图向 SENS 通知某些事件时将失败。

Volume Shadow Copy 服务将不能正常加载,这将导致 Windows 备份 API 失败。

    1. //
    2. #include "stdafx.h"
    3. #include "test.h"
    4. #include <Wininet.h>
    5. #include <Sensapi.h>
    6. #ifdef _DEBUG
    7. #define new DEBUG_NEW
    8. #undef THIS_FILE
    9. static char THIS_FILE[] = __FILE__;
    10. #endif
    11. /////////////////////////////////////////////////////////////////////////////
    12. // The one and only application object
    13. CWinApp theApp;
    14. using namespace std;
    15. void Fun_InternetGetConnectedState()
    16. {
    17. //#define INTERNET_CONNECTION_MODEM           1
    18. //#define INTERNET_CONNECTION_LAN             2
    19. //#define INTERNET_CONNECTION_PROXY           4
    20. //#define INTERNET_CONNECTION_MODEM_BUSY      8
    21. DWORD   flags;//上网方式
    22. BOOL   m_bOnline=TRUE;//是否在线
    23. m_bOnline=InternetGetConnectedState(&flags,0);
    24. if(m_bOnline)//在线
    25. {
    26. if ((flags & INTERNET_CONNECTION_MODEM) ==INTERNET_CONNECTION_MODEM)
    27. {
    28. cout<<"在线:拨号上网\n";
    29. }
    30. if ((flags & INTERNET_CONNECTION_LAN) ==INTERNET_CONNECTION_LAN)
    31. {
    32. cout<<"在线:通过局域网\n";
    33. }
    34. if ((flags & INTERNET_CONNECTION_PROXY) ==INTERNET_CONNECTION_PROXY)
    35. {
    36. cout<<"在线:代理\n";
    37. }
    38. if ((flags & INTERNET_CONNECTION_MODEM_BUSY) ==INTERNET_CONNECTION_MODEM_BUSY)
    39. {
    40. cout<<"MODEM被其他非INTERNET连接占用\n";
    41. }
    42. }
    43. else
    44. cout<<"不在线\n";
    45. }
    46. void Fun_IsNetworkAlive()
    47. {
    48. DWORD   flags;//上网方式
    49. BOOL   m_bOnline=TRUE;//是否在线
    50. m_bOnline=IsNetworkAlive(&flags);
    51. if(m_bOnline)//在线
    52. {
    53. if ((flags & NETWORK_ALIVE_LAN) ==NETWORK_ALIVE_LAN)
    54. {
    55. cout<<"在线:NETWORK_ALIVE_LAN\n";
    56. }
    57. if ((flags & NETWORK_ALIVE_WAN) ==NETWORK_ALIVE_WAN)
    58. {
    59. cout<<"在线:NETWORK_ALIVE_WAN\n";
    60. }
    61. if ((flags & NETWORK_ALIVE_AOL) ==NETWORK_ALIVE_AOL)
    62. {
    63. cout<<"在线:NETWORK_ALIVE_AOL\n";
    64. }
    65. }
    66. else
    67. cout<<"不在线\n";
    68. }
    69. int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    70. {
    71. int nRetCode = 0;
    72. // initialize MFC and print and error on failure
    73. if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    74. {
    75. // TODO: change error code to suit your needs
    76. cerr << _T("Fatal Error: MFC initialization failed") << endl;
    77. nRetCode = 1;
    78. }
    79. else
    80. {
    81. // TODO: code your application's behavior here.
    82. //   CString strHello;
    83. //   strHello.LoadString(IDS_HELLO);
    84. //   cout << (LPCTSTR)strHello << endl;
    85. int i=0;
    86. while (TRUE)
    87. {
    88. cout << "请选择测试的方式:\n"
    89. << "1. InternetGetConnectedState\n"
    90. << "2. IsNetworkAlive"
    91. << endl;
    92. cin >> i;
    93. switch(i)
    94. {
    95. case 1:
    96. Fun_InternetGetConnectedState();
    97. break;
    98. case 2:
    99. Fun_IsNetworkAlive();
    100. break;
    101. default:
    102. cout << "错误!\n";
    103. }
    104. cout << endl;
    105. }
    106. }
    107. return nRetCode;
    108. }

VC获得本机网络连接状态的更多相关文章

  1. VMware 桥接 Bridge 复制物理网络连接状态

    https://zhidao.baidu.com/question/535593443.html 意思就是说,VM上使用的是虚拟的网卡,也就是说VM虚拟机上的网卡不是真实存在的,而桥接还有其他的网路链 ...

  2. Centos-本机网络连接、运行端口和路由表等信息-netstat

    netstat 网络状态,显示本机网络连接.运行端口和路由表等信息 相关选项 -a 显示本机所有连接和监听端口 -n 以网络IP地址形式显示当前建立的有效连接和端口 -r 显示路由表信息 -t 显示T ...

  3. Win8 app判断网络连接状态

    Win8 app判断网络连接状态 NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged; ...

  4. Silverlight项目笔记6:Linq求差集、交集&检查网络连接状态&重载构造函数复用窗口

    1.使用Linq求差集.交集 使用场景: 需要从数据中心获得用户数据,并以此为标准,同步系统的用户信息,对系统中多余的用户进行删除操作,缺失的用户进行添加操作,对信息更新了的用户进行编辑操作更新. 所 ...

  5. android 检查网络连接状态实现步骤

    获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android.permission.AC ...

  6. CentOS下netstat + awk 查看tcp的网络连接状态

    执行以下命令: #netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key."\t".sta ...

  7. Android 检测网络连接状态

    Android连接网络的时候,并不是每次都能连接到网络,因此在程序启动中需要对网络的状态进行判断,如果没有网络则提醒用户进行设置. 首先,要判断网络状态,需要有相应的权限,下面为权限代码(Androi ...

  8. c#判断网络连接状态示例代码

    使用c#判断网络连接状态的代码. 代码: public partial class Form1 : Form { [DllImport() == true) { label1.Text = " ...

  9. iOS  如何判断当前网络连接状态  网络是否正常  网络是否可用

    网络资源:出处http://blog.csdn.net/mad1989/article/details/8987368   众所周知,我们在开发APP时,涉及网络连接的时候,都会想着提前判断一下当前的 ...

随机推荐

  1. 老项目Xcode5.1编译器错误

    老项目编译器错误html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; pa ...

  2. python使用selenium

    首先安装 pip install selenium 测试抓取baidu,其中的chromedriver.exe需要自己下载,百度有很多的 import timefrom selenium import ...

  3. Sublime Text 3中文乱码问题的解决(最有效)

    Sublime Text 3中文乱码问题的解决(最有效) Sublime Text 3是很好的代码编辑器,没有之一,因为她的性感高亮代码配色,更因为它的小巧,但是它默认不支持GBK的编码格式,因此打开 ...

  4. 非常有用的15个Linux 服务器监控命令

    如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员. 有些 Linux 发行版会提供 GUI 程序来进行系统的监控,例如 ...

  5. Git 基本概念

    版本控制系统 (VCS) 版本控制系统 (VCS) 是软件,帮助软件开发人员携手合作,他们的工作并保持完整的历史. 以下是VCS目标 允许开发人员同步工作. 不要覆盖对方的变化. 维护历史的每一个版本 ...

  6. Web API(六):使用Autofac实现依赖注入

    在这一篇文章将会讲解如何在Web API2中使用Autofac实现依赖注入. 一.创建实体类库 1.创建单独实体类 创建DI.Entity类库,用来存放所有的实体类,新建用户实体类,其结构如下: us ...

  7. springmvc搭建环境时报No mapping found for HTTP request with URI [/exam3/welcome] in DispatcherServlet with name 'spring2'

    项目是使用spring MVC (1)在浏览器中访问,后台总报错: No mapping found for HTTP request with URI [/exam3/welcome] in Dis ...

  8. 关于Unity中的光照(五)

    Mobile Diffuse Unity自带的一种shader,用的比较多,性能还可以.我们默认创建的unit shader基本和它一致,但是没有参与光照计算,看起来和Mobile Diffuse有区 ...

  9. Git安装遇到的问题fatal: Could not read from remote repository.的解决办法

    转自:https://blog.csdn.net/huahua78/article/details/52330792 查看远端地址 git remote –v 查看配置 git config --li ...

  10. MAC配置Xcode的Cocos2d-x环境

    Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00003988 1.Mac配置环境变量,即编辑命令: o ...