如何检测网络断开?

little_thing 2006-10-23 05:39:55
TCP呼叫并与对方建立了连接后,如何检测网络物理断开。
...全文
1627 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
herofys 2006-11-29
  • 打赏
  • 举报
回复
InternetGetConnectedState函数可以检测网络状态。
mynamelj 2006-11-28
  • 打赏
  • 举报
回复
Bool IsNetworkAlive(
LPDWORD lpdwFlags
);
ben_jiang 2006-11-28
  • 打赏
  • 举报
回复
消息的值为: 0XC801 名称为:SubclassedFSNotify , 是由窗口类名"ToolbarWindow32" 发送出来的,你用钩子,拦截即可
shawnwan 2006-11-28
  • 打赏
  • 举报
回复
检查recv的返回值就可以了
KeSummer 2006-11-27
  • 打赏
  • 举报
回复
楼上的..是什么消息?
ben_jiang 2006-11-27
  • 打赏
  • 举报
回复
我用SPY++ 找到了当网络断开,和连接时,系统会发送消息出来,你只要做一个钩子,即可
蒋晟 2006-11-27
  • 打赏
  • 举报
回复
class Tester {
public static void Main() {
Tester we = new Tester();
ManagementScope scope = new ManagementScope("root\\wmi");
ManagementEventWatcher w = null;
try {
WqlEventQuery q = new WqlEventQuery();
q.EventClassName = "__InstanceOperationEvent";
q.WithinInterval = new TimeSpan(0,0,3);
q.Condition = @"TargetInstance ISA 'MSNdis_MediaConnectStatus' ";
w = new ManagementEventWatcher( q);
w.EventArrived += new EventArrivedEventHandler(we.NetwEventArrived);
w.Start();
Console.ReadLine(); // block main thread for test purposes
}
catch(Exception e) {
Console.WriteLine(e.Message);
}
finally {
w.Stop();
w.Dispose();
}
}
public void NetwEventArrived(object sender, EventArrivedEventArgs e) {
//Get the Event object and show it
ManagementBaseObject prop =
e.NewEvent.Properties["PreviousInstance"].Value as ManagementBaseObject;
Console.WriteLine(Convert.ToBoolean(prop.Properties["NdisMediaConnectStatus­"].Value)?"Connected":"Disonnected");
}



}
KeSummer 2006-10-26
  • 打赏
  • 举报
回复
回楼上的,可能是服务器导致的,或者防火墙等之类。
周江涛 2006-10-26
  • 打赏
  • 举报
回复
没那么麻烦,阻塞函数recv本身就知道,
返回0:正常断开。
返回-1:异常断开。

对于异步的WSARecv函数,需要调用WSAGetOverlappedResult或获取队列完成状态来看是否正常断开。www.vckbase.com/code下此类代码很多。
konj 2006-10-25
  • 打赏
  • 举报
回复
期待高手出现
蒋晟 2006-10-25
  • 打赏
  • 举报
回复
send app-level heart-beat messages and socket select() for FD_CLOSE.
wait for time out before you drop the connection.
lsgt 2006-10-25
  • 打赏
  • 举报
回复
心跳包
wo1981813 2006-10-25
  • 打赏
  • 举报
回复
有相应的网络事件,当断开事件发生时在响应函数中弹出对话框就可以了
hhg200654 2006-10-25
  • 打赏
  • 举报
回复
很想知道.........高手....在哪里?
palmax 2006-10-24
  • 打赏
  • 举报
回复
好象断开时会系统会发送消息的
可能有人已经注意到了,像QQ、MSN都是能即时检测网络断开并切换到离线状态的
ben_jiang 2006-10-24
  • 打赏
  • 举报
回复
楼上的方法不对, 查一下资料就可,比如,windows 系统消息,事件之类的,用定时去检测不安逸得
Allen_zhang 2006-10-24
  • 打赏
  • 举报
回复
http://www.china-askpro.com/msg50/qa35.shtml

如何编程实现检测网线是否被拔下
编号: QA004935
建立日期: 2005年8月22日 最后修改日期: 2005年8月22日
所属类别: C/C++ - 网络与通信

Visual Basic - 网络与通信
操作系统:WIN2000
编程工具:VB6
问题:在VB6中如何编程实现检测网线是否被拔下?我所使用的是WIN2000操作系统,机器中有两块网卡,我想通过编程检测到当前哪块网卡连接网线,哪块网卡网线被拔下。(辛雨)

可利用SDK API:GetAdaptersInfo以及GetIfEntry实现。
GetAdaptersInfo返回系统中的所有网卡信息。
GetIfEntry则返回制定网口的速率、状态等信息。
如果觉得将相关数据结构改造到VB下很痛苦的话,可编写一个短小的DLL完成网口检测工作,并仅返回检测结果即可。
VC代码:
DWORD dwOutBufLen=0;

PIP_ADAPTER_INFO pAdapterInfo=NULL,pAdapter=NULL;

MIB_IFROW zSNMP;

char sTemp[20];

int iReturn;

iReturn=GetAdaptersInfo(pAdapterInfo,&dwOutBufLen);

if(iReturn!=ERROR_BUFFER_OVERFLOW)

{

return 0;

}

pAdapterInfo =(PIP_ADAPTER_INFO) HeapAlloc(GetProcessHeap(), 0, dwOutBufLen);

iReturn=GetAdaptersInfo(pAdapterInfo,&dwOutBufLen);

if(iReturn!=ERROR_SUCCESS)

{

HeapFree(GetProcessHeap(), 0, pAdapterInfo);

return 0;

}

pAdapter=pAdapterInfo;



//find if there is ppp adapter

while(pAdapter!=NULL )

{

zSNMP.dwIndex = pAdapter->Index;

iReturn=GetIfEntry(&zSNMP);

if(iReturn!=NO_ERROR)

return 0;



m_iIfSpeed=zSNMP.dwSpeed/(1000*1000);

m_iIfAdminStatus=zSNMP.dwAdminStatus;

m_iIfOperStatus=zSNMP.dwOperStatus;



pAdapter=pAdapter->Next;

}
snowbirdfly 2006-10-24
  • 打赏
  • 举报
回复
网络物理断开?
什么意思?
网络断开还是什么?
star119119 2006-10-24
  • 打赏
  • 举报
回复
我也很想知道

如何判断网卡现在是否插网线。当前机器是否可以访问互联网。

当前机器处于lan还是万维网。
trueadou 2006-10-24
  • 打赏
  • 举报
回复
关注,帮顶~
加载更多回复(4)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧