System.Net.NetworkInformation
命名空间中的类来检查网络状态。可以使用 NetworkInterface
类来获取网络接口的信息,并检查它们的状态。以下是一个简单的示例代码:“ csharp,using System;,using System.Net.NetworkInformation;class Program,{, static void Main(), {, foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()), {, Console.WriteLine($"Name: {ni.Name}, Status: {ni.OperationalStatus}");, }, },},
“这段代码会遍历所有的网络接口,并输出它们的名称和状态。
在C#中,要显示网络状态,通常可以通过查询系统网络接口的状态信息来实现,以下是一个使用System.Net.NetworkInformation
命名空间中的NetworkInterface
类来获取并显示网络状态的示例代码:
using System; using System.Net; using System.Net.NetworkInformation; using System.Text; class Program { static void Main() { StringBuilder sb = new StringBuilder(); foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) { sb.AppendLine($"Interface: {ni.Name}"); sb.AppendLine($"tDescription: {ni.Description}"); sb.AppendLine($"tOperational Status: {(ni.OperationalStatus ? "Up" : "Down")}"); if (ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet) { sb.AppendLine("tEthernet Specific Properties:"); EthernetStatistics es = ni as EthernetStatistics; if (es != null) { sb.AppendLine($"ttBytes Received: {es.BytesReceived}"); sb.AppendLine($"ttBytes Sent: {es.BytesSent}"); sb.AppendLine($"ttPackets Received: {es.PacketsReceived}"); sb.AppendLine($"ttPackets Sent: {es.PacketsSent}"); } } else if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211) { sb.AppendLine("tWireless Specific Properties:"); WirelessStatistics ws = ni as WirelessStatistics; if (ws != null) { sb.AppendLine($"ttAssociation State: {ws.Associated}"); sb.AppendLine($"ttAuthentication Algorithm: {ws.AuthenticationAlgorithm}"); sb.AppendLine($"ttEncryption Algorithm: {ws.EncryptionAlgorithm}"); } } sb.AppendLine(); } Console.WriteLine(sb.ToString()); } }
1、引用命名空间:首先引用了必要的命名空间,包括System
,System.Net
,System.Net.NetworkInformation
, 和System.Text
。
2、主函数:在Main
方法中,创建了一个StringBuilder
对象用于构建输出字符串。
3、获取所有网络接口:使用NetworkInterface.GetAllNetworkInterfaces()
方法获取系统中的所有网络接口。
4、遍历网络接口:使用foreach
循环遍历每个网络接口,并获取其名称、描述和操作状态。
5、特定类型网络接口的属性:根据网络接口的类型(以太网或无线),获取并显示特定的统计信息,对于以太网接口,显示接收和发送的字节数以及数据包数;对于无线接口,显示关联状态、认证算法和加密算法。
6、输出结果:将构建好的字符串输出到控制台。
假设你的计算机上有一个以太网接口和一个无线接口,运行上述程序可能会得到如下输出:
Interface: Ethernet Description: Intel(R) Ethernet Connection I219-LM Operational Status: Up Ethernet Specific Properties: Bytes Received: 123456789 Bytes Sent: 987654321 Packets Received: 123456 Packets Sent: 98765 Interface: Wi-Fi Description: Intel Dual Band Wireless-AC 7260 Operational Status: Up Wireless Specific Properties: Association State: True Authentication Algorithm: WPA2PSK Encryption Algorithm: AES
问题1:如果网络接口很多,如何筛选出特定的接口?
答:你可以通过检查NetworkInterface
对象的Name
或Description
属性来筛选特定的网络接口,如果你想只显示名为 "Wi-Fi" 的接口,可以在循环中添加一个条件判断:
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) { if (ni.Name == "Wi-Fi") { // 处理 Wi-Fi 接口的逻辑 } }
问题2:如何定期更新网络状态显示?
答:你可以使用定时器来定期执行网络状态检查和显示的逻辑,使用System.Timers.Timer
类设置一个定时器,每隔一定时间(如5秒)调用一次获取网络状态的函数:
using System; using System.Net; using System.Net.NetworkInformation; using System.Text; using System.Timers; class Program { private static Timer timer; private static StringBuilder sb = new StringBuilder(); static void Main() { timer = new Timer(5000); // 每5秒触发一次 timer.Elapsed += OnTimedEvent; timer.AutoReset = true; timer.Enabled = true; Console.WriteLine("按任意键退出..."); Console.ReadKey(); } private static void OnTimedEvent(Object source, ElapsedEventArgs e) { sb.Clear(); foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) { sb.AppendLine($"Interface: {ni.Name}"); sb.AppendLine($"tDescription: {ni.Description}"); sb.AppendLine($"tOperational Status: {(ni.OperationalStatus ? "Up" : "Down")}"); // ... 其他逻辑与之前相同 ... } Console.WriteLine(sb.ToString()); } }