如何检测TCP网络连接状态? 通过SOCKET检测TCP网络连接。我用过getpeername(),但这只对正常连接中断时有效,但对于硬件连接中断没有效果。我想用ping但,但怕增大网络流量。还有没有其它办法呢?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 tlhelp32.h和iphlpapi.lib,能检测出当前的TCP/IP连接状态和连接表。也就是netstat.exe1。取得TCP连接表函数:::GetTcpTable();2.取得UPD监听者表函数:::GetUdpTable();3.取得IP协议统计情况函数:::GetIpStatistics(); 硬件连接中断几乎没法检查出来.最简单的办法就是在TCP连接上周期发送检测包 这是我的一段检测程序,用在自定义的一个线程中,请讨论一下:DWORD WINAPI CSetSocket::CheckConThread(LPVOID lParam){ CSetSocket *pss = (CSetSocket *)lParam; fd_set fs; TIMEVAL tm; int nRet, nLen = 32; char lpRecv[32]; while(pss->m_bCheckCon) { fs.fd_count = 1; fs.fd_array[0] = pss->m_Socket; tm.tv_sec = 0; tm.tv_usec = 300; nRet = select(0, &fs, NULL, NULL, &tm); if(0 == nRet) //time out { continue; }else if(1 == nRet) { Sleep(50); nRet = recv(pss->m_Socket, lpRecv, 32, 0); if(0 == nRet) //if(!pss->RecvData(lpRecv, &nLen)) { //call the callback function for the completetion of the connection if(pss->m_pCallBack) { pss->m_pCallBack(); } pss->m_bConnected = FALSE; pss->m_bCheckCon = FALSE; pss->m_hCheckThread = NULL; break; }else{ continue; } }else if(SOCKET_ERROR == nRet) { break; } } return 0;} 转自驱动开发网发信人: rain (夜猫子大王), 信区: SysInternals标 题: Re: 请问实时发现网络down掉的原理?(转载)发信站: 武汉白云黄鹤站 (2001年03月31日09:57:05 星期六), 转信实时检测网线被拔掉是需要网卡设备驱动程序支持的,如果驱动程序不支持是无法实现的,NDIS4要求设备驱动程序最好提供CheckForHangHandler回调函数。2000会每隔2秒钟调用此函数。驱动程序在此函数中检查网卡连线状态,如果发生了改变,即拔去了网线或接上了网线,驱动程序就会调用NdisMIndicateStatus通知所有的上层NDIS协议驱动程序.其中: NDIS_STATUS_MEDIA_DISCONNECT 指示网线被拔掉,NDIS_STATUS_MEDIA_CONNECT 指示网线被接上NDIS_STATUS_LINK_SPEED_CHANGE 指示网卡速度改变,10/100自适应网卡才有。网卡一般都有 status register 指示当然的连线状态,也有网卡是通过获得 led status 来知道当前的连线状态的,即绿灯亮表示连线,灭表示没有。有些网卡拔掉或接上网线时会产生中断,在中断处理程序中一般也检测网络连线状态并调用NdisMIndicateStatus,这样连线状态在2000中就实时反应出来了,否则会在2秒钟内,即NDIS调用CheckForHangHandler后。这个功能是微软在PC97规范中定义的,所以ndis3没有这个功能。linux对这个没有要求,novell netware对这个有要求,其它的操作系统我也不清楚。 MSN做得很好的啊他是怎么搞得? WSAConnect连接的问题 可以,给分给邮箱 用setup factory制作安装程序时,如何把库文件mfc71.dll自动加到c:\windows\system32下?在线等 初学GDI,谁有远程屏幕监控的源代码啊?请教高手~偶是大一新生~ struct的容量是否有限制 如何用mfc定义窗口时使resource中的menu可用 一个简单的CreateDialog程序,为什么会错?求救! 有关多线程调用的问题 作为同行,大家认为北京,上海,深圳哪个城市更适合我们发展以及买房子娶老婆? 怎样做抓取cd音轨的程序 审计分析器界面问题求助 关于http文件定位,高手请进
也就是netstat.exe
1。取得TCP连接表函数:::GetTcpTable();
2.取得UPD监听者表函数:::GetUdpTable();
3.取得IP协议统计情况函数:::GetIpStatistics();
{
CSetSocket *pss = (CSetSocket *)lParam; fd_set fs;
TIMEVAL tm;
int nRet, nLen = 32;
char lpRecv[32]; while(pss->m_bCheckCon)
{
fs.fd_count = 1;
fs.fd_array[0] = pss->m_Socket;
tm.tv_sec = 0;
tm.tv_usec = 300;
nRet = select(0, &fs, NULL, NULL, &tm);
if(0 == nRet) //time out
{
continue;
}else if(1 == nRet)
{
Sleep(50);
nRet = recv(pss->m_Socket, lpRecv, 32, 0);
if(0 == nRet)
//if(!pss->RecvData(lpRecv, &nLen))
{
//call the callback function for the completetion of the connection
if(pss->m_pCallBack)
{
pss->m_pCallBack();
}
pss->m_bConnected = FALSE;
pss->m_bCheckCon = FALSE;
pss->m_hCheckThread = NULL; break;
}else{
continue;
}
}else if(SOCKET_ERROR == nRet)
{
break;
} } return 0;
}
发信人: rain (夜猫子大王), 信区: SysInternals
标 题: Re: 请问实时发现网络down掉的原理?(转载)
发信站: 武汉白云黄鹤站 (2001年03月31日09:57:05 星期六), 转信实时检测网线被拔掉是需要网卡设备驱动程序支持的,
如果驱动程序不支持是无法实现的,NDIS4要求设备驱动程序
最好提供CheckForHangHandler回调函数。2000会每隔2秒钟
调用此函数。驱动程序在此函数中检查网卡连线状态,
如果发生了改变,即拔去了网线或接上了网线,
驱动程序就会调用NdisMIndicateStatus通知所有的上层NDIS协议驱动程序.
其中: NDIS_STATUS_MEDIA_DISCONNECT 指示网线被拔掉,
NDIS_STATUS_MEDIA_CONNECT 指示网线被接上
NDIS_STATUS_LINK_SPEED_CHANGE 指示网卡速度改变,10/100自适应网卡才有。
网卡一般都有 status register 指示当然的连线状态,
也有网卡是通过获得 led status 来知道当前的连线状态的,
即绿灯亮表示连线,灭表示没有。
有些网卡拔掉或接上网线时会产生中断,在中断处理程序中一般也
检测网络连线状态并调用NdisMIndicateStatus,这样连线状态
在2000中就实时反应出来了,否则会在2秒钟内,即NDIS调用CheckForHangHandler后。这个功能是微软在PC97规范中定义的,所以ndis3没有这个功能。
linux对这个没有要求,novell netware对这个有要求,其它的操作系统我也不清楚。
他是怎么搞得?