C#实现网络监控,网络连接是否断开

C#实现网络监控

利用C#代码实现网络监控,如果出现断网,进行后续处理(如,重启,设置重连,用户提示等)

注意:最开始看的文章也不知道在哪里了,标注转载需要转载原文链接,此处就标记了原著

实现方法:

using Microsoft.VisualBasic.Devices;
using System;
using System.Threading;

namespace Helper
{
    class Method
    {
        //网络状态标志位
        public string netWorkStatus = "0";
        //刷新线程
        public Thread thrRefresher;
        /// <summary>
        /// 用于控制线程的暂停和继续
        /// </summary>
        public AutoResetEvent areRefresher = new AutoResetEvent(false);

        public Method()
        {
            netWorkStatus = GetNetworkStatus();
            var msg = netWorkStatus == "1" ? "网络已连接" : "网络已断开";

            thrRefresher = new Thread(new ThreadStart(KeepOnRefresh));
        }

        private void KeepOnRefresh()
        {
            try
            {
                while (true)
                {
                    var result = GetNetworkStatus();
                    if (!string.Equals(result, netWorkStatus))
                    {
                        string resultStr = result == "1" ? "网络已连接" : "网络已断开";
                        Console.WriteLine(DateTime.Now.ToString() + ":" + resultStr);
                        //获取最新标志位
                        netWorkStatus = result;
                    }
                    //执行一次后暂停一个信息获取周期的时间
                    for (int i = 0; i < 10; i++)
                    {
                        Thread.Sleep(200);
                    }
                    //string x = null;
                    //x.Equals("`");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(DateTime.Now.ToString() + ":网络检测程序终止,请重启!");
                areRefresher.WaitOne();
                thrRefresher.Abort();
            }
        }

        public string GetNetworkStatus()
        {
            Network nw = new Network();
            //获取网络状态
            if (nw.IsAvailable)
                return "1";
            else
                return "0";
        }
    }
}

这里使用控制台应用程序,测试一下连接状态:

using System;
using System.Runtime.InteropServices;

namespace Helper
{
    /// <summary>
    /// 监控网络状态改变并且记录日志
    /// </summary>
    class Program
    {
        [DllImport("User32.dll", EntryPoint = "FindWindow")]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll", EntryPoint = "FindWindowEx")]   //找子窗体   
        private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

        [DllImport("User32.dll", EntryPoint = "SendMessage")]   //用于发送信息给窗体   
        private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);

        [DllImport("User32.dll", EntryPoint = "ShowWindow")]   //
        private static extern bool ShowWindow(IntPtr hWnd, int type);


        static void Main(string[] args)
        {
            Method method = new Method();

            var msg = method.netWorkStatus == "1" ? "网络已连接" : "网络已断开";
            Console.WriteLine("网络连接监控--------------------->");
            Console.WriteLine("初始网络状态:" + msg);

            method.thrRefresher.Start();
            method.areRefresher.Set();


            Console.Title = "网络监控";
            IntPtr ParenthWnd = new IntPtr(0);
            IntPtr et = new IntPtr(0);
            ParenthWnd = FindWindow(null, "网络监控");
            ShowWindow(ParenthWnd, 1);//隐藏本dos窗体, 0: 后台执行;1:正常启动;2:最小化到任务栏;3:最大化


            Console.ReadLine();
        }
    }
}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值