C#中判断网络连接的状态

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.NetworkInformation;

namespace ConsoleApplication1
{
class Program
{
public static void Main(string[] args)
{
string url = “www.baidu.com;www.sina.com;www.cnblogs.com;www.google.com;www.163.com;www.csdn.com”;
string[] urls = url.Split(new char[] { ‘;’ });
CheckServeStatus(urls);

        Console.ReadKey();
    }

    /// <summary>
    /// 检测网络连接状态
    /// </summary>
    /// <param name="urls"></param>
    public static void CheckServeStatus(string[] urls)
    {
        int errCount = 0;//ping时连接失败个数

        if (!LocalConnectionStatus())
        {
            Console.WriteLine("网络异常~无连接");
        }
        else if (!MyPing(urls, out errCount))
        {
            if ((double)errCount / urls.Length >= 0.3)
            {
                Console.WriteLine("网络异常~连接多次无响应");
            }
            else
            {
                Console.WriteLine("网络不稳定");
            }
        }
        else
        {
            Console.WriteLine("网络正常");
        }
    }

    #region 网络检测

     private const int INTERNET_CONNECTION_MODEM = 1;
    private const int INTERNET_CONNECTION_LAN = 2;

    [System.Runtime.InteropServices.DllImport("winInet.dll")]
    private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved);

    /// <summary>
    /// 判断本地的连接状态
     /// </summary>
    /// <returns></returns>
    private static bool LocalConnectionStatus()
    {
        System.Int32 dwFlag = new Int32();
        if (!InternetGetConnectedState(ref dwFlag, 0))
        {
            Console.WriteLine("LocalConnectionStatus--未连网!");
            return false;
        }
        else
        {
            if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0)
            {
                Console.WriteLine("LocalConnectionStatus--采用调制解调器上网。");
                return true;
            }
            else if ((dwFlag & INTERNET_CONNECTION_LAN) != 0)
            {
                Console.WriteLine("LocalConnectionStatus--采用网卡上网。");
                return true;
            }
        }
        return false;
    }

    /// <summary>
    /// Ping命令检测网络是否畅通
    /// </summary>
    /// <param name="urls">URL数据</param>
    /// <param name="errorCount">ping时连接失败个数</param>
    /// <returns></returns>
    public static bool MyPing(string[] urls, out int errorCount)
    {
        bool isconn = true;
        Ping ping = new Ping();
        errorCount = 0;
        try
        {
            PingReply pr;
            for (int i = 0; i < urls.Length; i++)
            {
                pr = ping.Send(urls[i]);
                if (pr.Status != IPStatus.Success)
                {
                    isconn = false;
                    errorCount++;
                }
                Console.WriteLine("Ping " + urls[i] + "    " + pr.Status.ToString());
            }
        }
        catch
        {
            isconn = false;
            errorCount = urls.Length;
        }
        //if (errorCount > 0 && errorCount < 3)
        //  isconn = true;
        return isconn;
    }

    #endregion
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值