检测网络电缆何时拔出

Posted

技术标签:

【中文标题】检测网络电缆何时拔出【英文标题】:Detect When Network Cable Unplugged 【发布时间】:2011-02-24 08:47:27 【问题描述】:

Windows 知道您何时从 NIC 中移除了网络电缆。有没有一种编程方式通过 C++ 中的 API 来确定这一点?

注意:我没有使用 .NET,这是用于封闭 LAN(从未连接到 Internet)

【问题讨论】:

Ping google.com,如果没有响应,请考虑拔下电缆。 :) 只有当您通过某个网关而不是封闭的 LAN 连接到 Internet 时才有效 :) 【参考方案1】:

将Network List Manager api 与 INetwork api 一起使用。

您可以注册您的应用以在网络连接/未连接时接收回调。

或者您可以获取网络列表,然后检查每个网络以查看机器是否已连接网络

请记住,Windows 机器通常会设置多个网络(以太网、wifi 等)

请记住,仅仅因为网络已连接,您可能无法访问互联网。例如,您可能遇到 DNS 或路由问题。或者,您可能在未连接到互联网的工作网络上。

由于上述原因,如果许多诊断工具想真正知道它们是否已连接,它们也会连接到“已知良好”的互联网服务器。像 google.com 这样的网站——他们花费大量资金来确保他们的网站一直正常运行。

最后,您还可能遇到半连接的情况,即数据包可以通过,但不足以真正使通信畅通。为了测试这一点,不要只 ping 一个互联网站点,因为那只是一对数据包。相反,请打开 TCP 连接或 ping 以外的其他方式。

【讨论】:

不知道为什么每个人都认为我在谈论互联网 :) 我想我应该更清楚,这更多的是关于封闭的局域网场景 INetwork msdn.microsoft.com/en-us/library/aa370750(VS.85).aspx 让您可以分别提出“我在网络上吗”和“我在互联网上吗”这两个问题。这个答案给了你你需要的东西。 XP 有什么用吗?这仅表示 Vista 和 2008【参考方案2】:

Raymond Chen blogged 最近有类似的事情。这是相关的documentation。我认为 MIB_IPADDR_DISCONNECTED 标志是您正在寻找的。​​p>

【讨论】:

以上是关于检测网络电缆何时拔出的主要内容,如果未能解决你的问题,请参考以下文章

Oracle虚拟显示网络电缆被拔出

Oracle虚拟显示网络电缆被拔出

服务器套接字如何使用c ++知道在Windows中拔出的网络电缆

spring websocket客户端没有检测到网络连接丢失

Linux 下怎么用命令行检测是不是网线被拔出?

如何使用java套接字编程知道网络何时关闭