C#獲取WIFI的連線狀態
阿新 • • 發佈:2020-12-23
C#獲取WIFI的連線狀態
本文是在知道WIFI網路裝置名稱的情況下,獲取該裝置的連線狀態,同樣也是可以判斷是否已連線廣域網
思路
-
起初是想著有沒有那樣一個直接訪問裝置資訊,通過這個返回的資訊來得到我想要的狀態,查了一個資料在Linux上有個
libiw
,這個包能掃描到的ssid
的相關資訊,並不是我想要的。 -
那麼只能從另外一個方式入手,首先取得裝置的
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}]");