1. 程式人生 > 實用技巧 >C#獲取WIFI的連線狀態

C#獲取WIFI的連線狀態

C#獲取WIFI的連線狀態

本文是在知道WIFI網路裝置名稱的情況下,獲取該裝置的連線狀態,同樣也是可以判斷是否已連線廣域網

思路


  1. 起初是想著有沒有那樣一個直接訪問裝置資訊,通過這個返回的資訊來得到我想要的狀態,查了一個資料在Linux上有個libiw,這個包能掃描到的ssid的相關資訊,並不是我想要的。

  2. 那麼只能從另外一個方式入手,首先取得裝置的Gateway資訊,然後Ping這個Gateway.IPAddress會得到Ping的結果,從這個結果來判斷是否連線是否成功。

問題得到解決


通過思路2,查詢相關的C#方面的資料,果然有相關的API, 通過[NetworkInterface](https://docs.microsoft.com/zh-cn/dotnet/api/system.net.networkinformation.networkinterface?f1url=%3FappId%3DDev16IDEF1%26l%3DZH-CN%26k%3Dk(System.Net.NetworkInformation.NetworkInterface);k(DevLang-csharp)%26rd%3Dtrue&view=net-5.0)

這個類來得到所有的網路裝置資訊,然後再根據條件找出我關注的網路裝置,再通過[Ping](https://docs.microsoft.com/en-us/dotnet/api/system.net.networkinformation.ping?view=net-5.0)這個類SendPingAsync取得Ping的結果,最後由結果來判別連線狀態。

程式碼展示


NetworkInterface[] nfaces = NetworkInterface.GetAllNetworkInterfaces();
var nface = nfaces.First(x => x.Name == "WLAN 2");
if (nface == null)
{
    MessageBox.Show("WLAN2 - Wifi未連線.");
    return;
}
var ipProperties = nface.GetIPProperties();
// 獲取預設閘道器
var defualtGateway = ipProperties.GatewayAddresses[0];
Ping ping = new Ping();
var treplay = ping.SendPingAsync(defualtGateway.Address);
var replay = treplay.Result;
MessageBox.Show(replay?.Status == IPStatus.Success
                ? $"WLAN2 - Wifi已連線. [Ping {defualtGateway.Address} Status: {replay?.Status}]"
                : $"WLAN2 - Wifi未連線. [Ping {defualtGateway.Address} Status: {replay?.Status}]");

斷開與連線WIFI狀態效果