我是在一个局域网内的.如何进行网线拨出的判断.好象windows可以很容易地知道??我怎么能实现它这样的功能呢?
另外我在检测网线拨出时,正在运行一个SOCK程序,有可能是服务器端,也可能是客户端.同时我在监测心跳包.我是否可以通过心跳包来检测网线拨出???我现在可以通过心跳包知道断开,我主要是想知道断开的原因是不是网线拨出造成而不是对方SOCK关闭或其它中断造成的.
谢谢大家的无私帮助!!!!!!!!!

解决方案 »

  1.   

    试试InternetCheckConnection这个函数
      

  2.   

    伯虎兄的这个好象只能判断是否和internet连接,而且还需要指定的地址才行.我主要是想知道是否拨出网线,不管是internet还是局域网.
    我倒想到一个笨办法.如果网络连上了,我本机会有一个IP地址.如果没有连上,我本机的IP就是127.0.0.1.我在一个线程里定时,比如一秒根据本机的名字去获取IP,如果发现发生变化.则表明网线拨出了???
    这个办法好笨哦!!!有没有标准的办法???或者更好的方式??
    请大家指教!
    感谢尾鱼头兄和伯虎兄的回答,
    请大家讨论
      

  3.   

    OVERLAPPED opd; 
    if(NotifyAddrChange(NULL,&opd) == NO_ERROR)
    {
      //有可能是网线被拔
    }
      

  4.   

    方法1:找到显卡的GUID ,(通过3个好长的让人一看就阳痿的API函数)转化成可以打开的符号联,如COM1类的,然后CreateFile之,看成功不?
    忘里面写个Byte再读,看是不是一样?
    方法2:
    CWnd *pwnd=FindWindow(NULL,str);str="拨号连接"//t通过VC.SPY++查看Windowname得到,pWnd==NULL,连接啦,or 可能断开啦。
    往里面发消息。
    方法3:最简单 和编程无关 趴在后面看看,插上没有嘛~NOTE:上面的方法都是乱写的 不要太认真啊,嘿嘿,呵呵
      

  5.   

    我吧那几个阳痿函数贴出来吧,楼主try下: GUID hidGuid= 自己看下网卡的GUID是什么,{0x4D36E96D, 0xE325, 0x11CE, {0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18}};

    HDEVINFO hDevInfo = SetupDiGetClassDevs((LPGUIDhidGuid,
    NULL, // no enumerator 
    NULL, // no parent
    (DIGCF_PRESENT | DIGCF_INTERFACEDEVICE)); 
    if(!hDevInfo)
    {
    AfxMessageBox(_T("Couldn't get handle for HID devices"));
    return;
    }

    SP_INTERFACE_DEVICE_DATA devInfoData;
    devInfoData.cbSize = sizeof (SP_INTERFACE_DEVICE_DATA);
    int deviceNo = 0;

    SetLastError(NO_ERROR);

    while(GetLastError() != ERROR_NO_MORE_ITEMS)
    {
    if(SetupDiEnumInterfaceDevice (hDevInfo,
    0, 
    &hidGuid,
    deviceNo,
    &devInfoData))
    {
    ULONG requiredLength = 0;
    SetupDiGetInterfaceDeviceDetail(hDevInfo,
    &devInfoData,
    NULL,
    0,
    &requiredLength,
    NULL);

    PSP_INTERFACE_DEVICE_DETAIL_DATA devDetail = (SP_INTERFACE_DEVICE_DETAIL_DATA*) malloc (requiredLength);
    devDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);

    if(! SetupDiGetInterfaceDeviceDetail(hDevInfo,
    &devInfoData,
    devDetail,
    requiredLength,
    NULL,
    NULL)) 
    {
    AfxMessageBox("Couldn't get HID details");
    free(devDetail);
    return;
    }

    // open a file to this device
    HANDLE hidHandle = CreateFile(devDetail->DevicePath,
    GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL, 
    OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED, 
    NULL);
    free(devDetail);

    if(INVALID_HANDLE_VALUE == hidHandle)
    {
    AfxMessageBox("Couldn't get HID handle");
    return;
    }
    }