C#獲取WIFI的連接狀態
本文是在知道WIFI網絡設備名稱的情況下,獲取該設備的連接狀態,同樣也是可以判斷是否已連接廣域網
思路
-
起初是想着有沒有那樣一個直接訪問設備信息,通過這個返回的信息來得到我想要的狀態,查了一個資料在Linux上有個
libiw
,這個包能掃描到的ssid
的相關信息,並不是我想要的。 -
那么只能從另外一個方式入手,首先取得設備的
Gateway
信息,然后Ping
這個Gateway.IPAddress
會得到Ping
的結果,從這個結果來判斷是否連接是否成功。
問題得到解決
通過思路2,查找相關的C#方面的資料,果然有相關的API
, 通過NetworkInterface這個類來得到所有的網絡設備信息,然后再根據條件找出我關注的網絡設備,再通過Ping這個類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狀態效果
在OrangePI Linux Arm32上的測試效果
Microsoft (R) Build Engine version 16.7.1+52cd83677 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.
Determining projects to restore...
Restored /root/OrangePICallbox/WifiConnection/WifiConnection.csproj (in 1.29 sec).
WifiConnection -> /root/OrangePICallbox/WifiConnection/bin/Debug/netcoreapp3.1/WifiConnection.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:18.64
root@orangepipcplus:~/OrangePICallbox/WifiConnection# dotnet run
wlan0 - Wifi已連接. [Ping 192.168.31.1 Status: Success]
root@orangepipcplus:~/OrangePICallbox/WifiConnection#