看了坛子里的一些faq,大侠们给出了一些办法探测网络的状态
比如NdisMIndicateStatus,IsNetworkAlive啊之类的,但是很多好象都是在VC的lib和include中没有的函数,要不就是针对Windows CE的。
有没有简单的办法来实现呢?Windows 2K可是一下子就知道我把网线拔下了啊。
还请赐教啊!多谢

解决方案 »

  1.   

    我想不用写驱动那么复杂吧。
    如果本机网线断了。那么发送数据就会失败或没有回音。
    你可用tcp的3次握手连接。即不占用系统的内存,也很方便。
      

  2.   

    一般是用KeepAlive报文。如果断开马上插上,有时可以检测不出来。WinSock也检测不出来,我测试过。
      

  3.   

    即时探测到网线断开是不可能的!无论你用HeartBeat还是KeepAlive都不可能及时发现。这是TCP协议本身的问题。
    即时探测Socket断开可以通过Recv的返回值判断
      

  4.   

    好象有一个函数
    GetPeerName();
      

  5.   

    那Windows是怎么实现的呢?
    它也是发包来检测?跟谁发呢?
      

  6.   

    int getNICStatus()
    {
    PPACKET_OID_DATA  oidData;         // Defined in Ntddpack.h
    unsigned int      buffLen;  // OID memory allocation
    unsigned long   nRet; buffLen = sizeof(PACKET_OID_DATA) + sizeof(unsigned long) - 1;
    oidData = (PPACKET_OID_DATA) GlobalAllocPtr(GMEM_MOVEABLE | GMEM_ZEROINIT, buffLen);
    if (oidData == NULL)
    return FALSE; oidData->Oid = OID_GEN_MEDIA_CONNECT_STATUS;
    oidData->Length = sizeof(unsigned long);

    if ((PacketRequest(lpAdapter,0, oidData)) > 0)
    {
    nRet  = *(unsigned long *)oidData->Data;
    GlobalFreePtr(oidData);
    return nRet;
    }
    else
    {
    GlobalFreePtr(oidData);
    return FALSE;
    }
    }
      

  7.   

    简单吧需要使用 #include "iphlpapi.h"
    和pack32.lib
      

  8.   

    可以试试InternetCheckConnection这个API
      

  9.   

    在winsock控件中会发winsock控件中的OnError事件
      

  10.   

    windows当然可以知道,当断开网线的时候,网卡一定会发送信号的,windows的硬件抽象层一定可以检测得到这个变化!我想要用驱动才可以。应用层的东西不能立刻反应过来的。
      

  11.   

    If u can write some network interface driver,u can get the info immediately
      

  12.   

    如果是网络编程,socket 是无法得到通知的
     只有设置定时发送数据包,如果接受不成功
    说明网线端开!
      

  13.   

    这个问题我也遇到了。推荐使用一下GetAdaptersInfo和NetBios两个函数。我也只能这样回答了。呵呵