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();
    }

    /// 
    /// 检测网络连接状态
    /// 
    /// 
    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);

    /// 
    /// 判断本地的连接状态
     /// 
    /// 
    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;
    }

    /// 
    /// Ping命令检测网络是否畅通
    /// 
    /// URL数据
    /// ping时连接失败个数
    /// 
    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
}

}

你可能感兴趣的:(C#)