判断网络未连接的方法

 以下两种方法都通过超时连接的方式判断网络连接:

一:

DWORD   flags;//上网方式  
 BOOL   InternetState;  
 InternetState=InternetGetConnectedState(&flags,0);  
 if(!InternetState)网络未连接;


二:

#include <iphlpapi.h>
OVERLAPPED   overLapped; 

HANDLE  handle=CreateEvent(NULL,  false,  false, NULL );  
 overLapped.hEvent=handle;  
 //创建一个子进程来等待消息  
 LPSECURITY_ATTRIBUTES   lpThreadAttributes   =   NULL;  
 SIZE_T   dwStackSize   =   0;  
 //LPTHREAD_START_ROUTINE   lpStartAddress;  
 LPVOID   lpParameter   =   (LPVOID)&handle;  
 DWORD   dwCreationFlags   =   0   ;  
 DWORD   lpThreadId;  
 HANDLE  THandle=CreateThread(lpThreadAttributes,  //   SD  
  dwStackSize,                                         //   initial   stack   size  
  WaitForEvent,       //lpStartAddress,thread   function  
  lpParameter,        //   thread   argument  
  dwCreationFlags,    //   creation   option  
  &lpThreadId         //   thread   identifier  
  );  

 
//子线程:  
DWORD     WINAPI     WaitForEvent(LPVOID   data){  
 HANDLE   handle;  
 DWORD     dwError;  
 handle=*(HANDLE*)data;   
    
 while(1){  
  
  DWORD m_dwResult=NotifyAddrChange(NULL,&overLapped);
  if (ERROR_IO_PENDING != m_dwResult)
  {
                AfxMessageBox("NotifyAddrChange() failed");
  }
  dwError=WaitForSingleObject(handle,500);  
 if(   dwError   ==   WAIT_OBJECT_0)  
  {  
   //A需要判断是否有新的网络设备启用  
   unsigned   long         OutBufLenN=0;  
   PIP_ADAPTER_INFO     AdaptersInfo=NULL;  
   DWORD   dret;  
   dret=GetAdaptersInfo(AdaptersInfo,&OutBufLenN);
   if(dret!=ERROR_BUFFER_OVERFLOW)
   {
    return 0;
   }
   AdaptersInfo=(PIP_ADAPTER_INFO) HeapAlloc(GetProcessHeap(), 0, OutBufLenN);  
   dret=GetAdaptersInfo(AdaptersInfo,&OutBufLenN);
   if(dret!=ERROR_SUCCESS)
   {
    HeapFree(GetProcessHeap(), 0, AdaptersInfo);
    return 0;
   }
   if(AdaptersInfo->Type==MIB_IF_TYPE_ETHERNET)
   {
    CString str=AdaptersInfo->IpAddressList.IpAddress.String;
    MIB_IFROW   ifrow;  
    memset(&ifrow,0,sizeof(MIB_IFROW));  
    ifrow.dwIndex=AdaptersInfo->Index;  
    if(GetIfEntry(&ifrow)!=NO_ERROR)
     return 0;
    DWORD len=ifrow.dwMtu;
    switch (ifrow.dwOperStatus)
    {
    case MIB_IF_OPER_STATUS_NON_OPERATIONAL:
     //AfxMessageBox("网络断开。。。");

............
     break;
    case MIB_IF_OPER_STATUS_OPERATIONAL:
     //AfxMessageBox("网络连接。。。");

............
          break;
     
    }
   }
   
  }  
 }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值