C#判断联网状态
方法一:使用InternetGetConnectedState方法
不推荐使用该API。
方法体(C++):BOOLAPI InternetGetConnectedState( LPDWORD lpdwFlags, DWORD dwReserved );
参数说明:
lpdwFlags:指向接收连接描述的变量的指针。即使函数返回FALSE,此参数也可能返回有效标志。此参数可以是以下一个或多个值。
值 | 含义 |
---|---|
|
本地系统具有到Internet的有效连接,但当前可能连接或可能未连接。 |
|
本地系统使用局域网连接到Internet。 |
|
本地系统使用调制解调器连接到Internet。 |
|
不再使用。 |
|
本地系统处于离线模式。 |
|
本地系统使用代理服务器连接到Internet。 |
|
本地系统已安装RAS。 |
dwReserved:该参数是保留参数,必须为0。
返回值:如果存在活动的调制解调器或LAN Internet连接,则返回TRUE;如果没有Internet连接,或者当前所有可能的Internet连接都不处于活动状态,则返回FALSE。
代码示例:
1 public static class Internet 2 { 3 [DllImport("winInet.dll")] 4 private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved); 5 6 /// <summary> 7 /// 返回网络状态 8 /// </summary> 9 public static bool Status 10 { 11 get 12 { 13 Int32 dwFlag = new int(); 14 if (!InternetGetConnectedState(ref dwFlag, 0)) 15 { 16 return false; 17 } 18 else 19 { 20 return true; 21 } 22 } 23 } 24 }
方法二:使用nuget安装 WindowsAPICodePack-Core 包,代码示例如下:
1 public class NetworkHelper 2 { 3 /// <summary> 4 /// 判断是否联网 5 /// </summary> 6 /// <param name="networkName">网络名称</param> 7 /// <returns></returns> 8 public static bool IsConnectNetwork(string networkName) 9 { 10 bool isConnection = false; 11 NetworkCollection nCollection = NetworkListManager.GetNetworks(NetworkConnectivityLevels.All); 12 if (nCollection != null && nCollection.Count() > 0) 13 { 14 if (string.IsNullOrEmpty(networkName)) 15 { 16 isConnection = nCollection.Any(t => t.IsConnected); 17 } 18 else 19 { 20 isConnection = nCollection.Any(t => t.IsConnected && t.Name.Equals(networkName, StringComparison.InvariantCultureIgnoreCase)); 21 } 22 isConnection = string.IsNullOrEmpty(networkName) ? nCollection.Any(t => t.IsConnected) : 23 nCollection.Any(t => t.IsConnected && t.Name.Equals(networkName, StringComparison.InvariantCultureIgnoreCase)); 24 } 25 return isConnection; 26 } 27 }