zoukankan      html  css  js  c++  java
  • 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
        }
    }
  • 相关阅读:
    Android--->activity高级运用,保存前一个界面为完成的数据savedInstanceState。
    Android--->activity界面跳转,以及查看生命周期过程
    Android--->Intent
    Android--->Button按钮操作
    安卓EditText按钮
    DDS视图&Button控件
    Android之EditText控件
    Android之TextView控件的学习
    usb免驱动摄像头实验
    Flash硬件原理
  • 原文地址:https://www.cnblogs.com/JuneZhang/p/2579654.html
Copyright © 2011-2022 走看看