LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 如何简单判断在局域网内的本程序是否可以连通外网?

admin
2025年9月11日 14:44 本文热度 79

C# 外网连通性简单检测方法

下面是一个简单的C#方法,用于检测本机是否可以连通外网。该方法会尝试连接国内三大运营商的DNS服务器,只要任何一个能够连通就返回true。

using System;

using System.Net.NetworkInformation;

using System.Threading.Tasks;


public class NetworkChecker

{

    // 国内广泛可访问的公共DNS服务器

    private static readonly string[] dnsServers = new string[]

    {

        "223.5.5.5",           // 阿里云DNS - 覆盖多运营商

        "223.6.6.6",           // 阿里云DNS备用

        "119.29.29.29",        // 腾讯DNS - 覆盖多运营商

        "180.76.76.76",        // 百度DNS - 覆盖多运营商

        "1.2.4.8",             // 中国互联网信息中心DNS

        "8.8.8.8"              // Google DNS (国内部分地区可用)

    };


    /// <summary>

    /// 检查是否可以连通外网

    /// </summary>

    /// <param name="timeoutMs">超时时间(毫秒),默认2秒</param>

    /// <returns>true表示可以连通外网,false表示不能</returns>

    public static async Task<bool> CanConnectToInternet(int timeoutMs = 2000)

    {

        try

        {

            var pingTasks = new Task<PingReply>[dnsServers.Length];

            

            // 并行ping所有DNS服务器

            for (int i = 0; i < dnsServers.Length; i++)

            {

                pingTasks[i] = PingAsync(dnsServers[i], timeoutMs);

            }


            // 等待任意一个ping任务成功完成

            var completedTask = await Task.WhenAny(pingTasks);

            var result = await completedTask;

            

            return result.Status == IPStatus.Success;

        }

        catch

        {

            return false;

        }

    }


    private static async Task<PingReply> PingAsync(string address, int timeout)

    {

        using (var ping = new Ping())

        {

            return await ping.SendPingAsync(address, timeout);

        }

    }

}

使用方法

// 异步调用

bool isConnected = await NetworkChecker.CanConnectToInternet();

Console.WriteLine($"网络连接状态: {(isConnected ? "已连接" : "未连接")}");


// 同步调用(在UI线程中不推荐)

bool isConnected = NetworkChecker.CanConnectToInternet().GetAwaiter().GetResult();

Console.WriteLine($"网络连接状态: {(isConnected ? "已连接" : "未连接")}");

改进说明

  1. 增加了更多DNS服务器选项:包含了阿里云、腾讯、百度等多家公司的DNS服务,提高了检测的成功率

  2. 优化了检测逻辑:使用Task.WhenAny而不是Task.WhenAll,只要有一个服务器响应就立即返回结果,提高了检测速度

  3. 缩短了默认超时时间:从3秒减少到2秒,加快检测速度

  4. 添加了异常处理:确保在任何情况下都不会抛出异常

这个改进版本应该能够在各种网络环境下更可靠地检测外网连接状态。如果您发现某些DNS服务器在您的网络中仍然不可用,您可以随时修改dnsServers数组,添加或删除特定的服务器地址。


该文章在 2025/9/11 18:19:41 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved