C#獲取WIFI的連接狀態


C#獲取WIFI的連接狀態

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

思路


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

  2. 那么只能從另外一個方式入手,首先取得設備的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#


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM