2010-01-20 105 views
3

我试图在互联网连接丢失后重新建立连接时收到事件。这是我正在开发的数据传输软件。如果在数据传输过程中我丢失了网络,我希望在它返回时通知它并自动继续传输。捕获网络状态更改事件

我当然可以创建一个单独的线程,并用定时器检查网络,但也许有一个更好的选择。

我正在为Windows开发,主要是C++(不是.net)。

我也可以使用wxwidgets(我用它的GUI),但我怀疑它提供了任何相关的功能。

回答

2

你可能想看看系统事件通知服务器(SENS)API http://msdn.microsoft.com/en-us/library/cc185680(VS.85).aspx

我还没有实际使用过,但似乎它提供你寻找的事件。

编辑:

WMI似乎有您需要了解各种网络连接和状态变化的所有信息。它还具有可用于获取通知的异步事件模型。诀窍是,我想,生成适当的WMI查询来获取所需的信息。这blog看起来像正确类型的查询,并且这个MSDN解释如何异步处理事件。

+0

看起来它只适用于移动平台。得多看看。 – mentat 2010-01-21 16:57:11

+0

编辑答案包括使用WMI的建议 – Ruddy 2010-01-22 14:35:22

+0

相关:http://stackoverflow.com/questions/1085045/check-whether-internet-connection-is-available-with-c – Ruddy 2010-01-22 21:13:30

0

我不知道您使用哪种协议,并且您是否可以控制目标,但在这种情况下,目标可以轮询重试。目的地最清楚接收到的内容,因此它可以将接收到的字节数作为重传的偏移量。

+0

谢谢,但我能够继续从它被成功转移离开。但我希望尽快有网络/互联网可用。所以我应该以基于事件的方式检测网络可用性。 – mentat 2010-01-20 13:47:10

0

此MSDN链接提供了一个非常详细的示例,说明如何使用COM捕获WMI上的事件。这个例子实际上并没有捕获网络事件 - 但我相信如果你插入正确的查询,它会起作用。

(很多在这里的代码,所以我不会将它复制到答案) http://msdn.microsoft.com/en-us/library/aa390425%28v=vs.85%29.aspx

+0

而且 - 使用这个内置工具,你可以执行WMI查询而无需在其周围运行代码:(从命令行运行)wbemtest.exe – FuzzyAmi 2014-05-11 16:32:21