我是在一个局域网内的.如何进行网线拨出的判断.好象windows可以很容易地知道??我怎么能实现它这样的功能呢?
另外我在检测网线拨出时,正在运行一个SOCK程序,有可能是服务器端,也可能是客户端.同时我在监测心跳包.我是否可以通过心跳包来检测网线拨出???我现在可以通过心跳包知道断开,我主要是想知道断开的原因是不是网线拨出造成而不是对方SOCK关闭或其它中断造成的.
谢谢大家的无私帮助!!!!!!!!!
另外我在检测网线拨出时,正在运行一个SOCK程序,有可能是服务器端,也可能是客户端.同时我在监测心跳包.我是否可以通过心跳包来检测网线拨出???我现在可以通过心跳包知道断开,我主要是想知道断开的原因是不是网线拨出造成而不是对方SOCK关闭或其它中断造成的.
谢谢大家的无私帮助!!!!!!!!!
我倒想到一个笨办法.如果网络连上了,我本机会有一个IP地址.如果没有连上,我本机的IP就是127.0.0.1.我在一个线程里定时,比如一秒根据本机的名字去获取IP,如果发现发生变化.则表明网线拨出了???
这个办法好笨哦!!!有没有标准的办法???或者更好的方式??
请大家指教!
感谢尾鱼头兄和伯虎兄的回答,
请大家讨论
if(NotifyAddrChange(NULL,&opd) == NO_ERROR)
{
//有可能是网线被拔
}
忘里面写个Byte再读,看是不是一样?
方法2:
CWnd *pwnd=FindWindow(NULL,str);str="拨号连接"//t通过VC.SPY++查看Windowname得到,pWnd==NULL,连接啦,or 可能断开啦。
往里面发消息。
方法3:最简单 和编程无关 趴在后面看看,插上没有嘛~NOTE:上面的方法都是乱写的 不要太认真啊,嘿嘿,呵呵
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;
}
}