.Net 6.0 Windows平台如何判断当前电脑是否联网

最近在工作中开发需要判断当前电脑是否联网的需求,在网上找了一个调用window API来判断本机是否联网。具体请看下面介绍:

1.方法一(调用winAPI)

cs 复制代码
[DllImport("wininet")]
public static extern bool InternetGetConnectedState(out int conState, int reder);

/// <summary>
/// 判断本机是否联网
/// </summary>
/// <returns></returns>
[Obsolete("当前方法不准,在以太网卡已连接状态,实际不能上网(无Internet访问),会误判为联网状态")]
public static bool CheckInternetAccessOld()
{
    return InternetGetConnectedState(out _, 0) ? true : false;
}

这个winAPI在使用以太网卡连接的时候,会存在误判的情况。(明明不能上网,却返回true)

2.方法2(获取当前网络状态)【推荐!!!】

cs 复制代码
/// <summary>
/// 检查本机是否联网,联网返回true,否则返回false
/// </summary>
/// <returns></returns>
public static bool CheckInternetAccess()
{
    var connectProfile = NetworkInformation.GetInternetConnectionProfile();
    if (null == connectProfile) return false;//没有连接的网络
    var networkLevel = connectProfile.GetNetworkConnectivityLevel();
    if (networkLevel == NetworkConnectivityLevel.InternetAccess)
        return true;//Internet 访问
    else
        return false;
}

经过对比测试,方法二可以弥补方法一以太网卡误判的情况。建议使用这种方式。

相关推荐
吴声子夜歌18 分钟前
Guava——基本工具(一)
windows·guava
坐吃山猪19 分钟前
JDK 8 到 JDK 21 新特性知识要点
java·开发语言·windows
kakakahahahaha1 小时前
重装系统后 D 盘没了怎么办?磁盘管理显示“存储空间保护分区”的恢复思路
windows·电脑·内容运营·软件需求
geovindu3 小时前
CSharp: Template Method Pattern
开发语言·后端·c#·.net·模板方法模式·行为模式
您^_^3 小时前
DeepSeek-Harness 升级排障完全指南:三类本地残留逐个拆解
人工智能·windows·个人开发·deepseekharness·deepseekv4pro
步步为营DotNet3 小时前
【MVP深度】.NET MAF:从单 Agent 到可恢复的多 Agent 工作流
.net
MSTcheng.4 小时前
【Linux】Linux学习第三弹——Linux基本指令2
linux·windows·学习·ubuntu·操作系统
还是大剑师兰特5 小时前
Windows Redis 完整下载‑安装‑配置教程
windows·redis
水饺编程6 小时前
第5章,[Win32 章节] :练习程序,BigFontPic
c语言·c++·windows·visual studio
geovindu14 小时前
CSharp: 万年历
开发语言·后端·c#·.net