我有一个C#应用程序,只有在网络断开连接时才可以使用,但我担心用户会直接拔掉网络电缆来使用它。
是否有一种方法可以检测网络电缆是否已被拔出?
谢谢
我有一个C#应用程序,只有在网络断开连接时才可以使用,但我担心用户会直接拔掉网络电缆来使用它。
是否有一种方法可以检测网络电缆是否已被拔出?
谢谢
using System.Runtime.InteropServices;
class Program
{
[DllImport("sensapi.dll")]
static extern bool IsNetworkAlive(out int flags);
static void Main(string[] args)
{
int flags;
bool connected = IsNetworkAlive(out flags);
}
}
flags参数返回连接是互联网还是本地局域网。我不确定它如何知道,但我敢打赌它只是查看是否设置了默认网关。
System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()
一些网络驱动程序能够检测到这一点。然而,您需要使用非托管代码从C#访问它们(这可能非常困难/不可能),并且该解决方案可能对所有网络适配器都不可靠。
网络适配器将会把此状态报告出来。例如ethtool
这样的工具可以显示这一状态(Link up
),但只有Linux/Unix系统才可以使用。
如果您能够通过Windows API列举已安装的网络适配器,我相信您一定能找到“link up”的标记。
NetworkChange
类。当网络发生变化时,它实际上不会通知您发生了什么,因此您可以列出所有的网络接口(使用NetworkInterface
),过滤掉那些与您相关的接口(通过检查它们的属性),并检查它们的操作状态。要检测“网络电缆是否插入计算机?”,可以使用以下代码片段。
class Program
{
private static void Main(string[] args)
{
bool isNetworkCableConnected = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();
}
}
如果我真的想使用你的应用程序,而它是否能正常工作取决于这样的事情,我总是能找到一种方法来欺骗你的应用程序。你确定没有更好的解决方案吗?