用技术解决困惑:解决校园网掉线时自动重启问题

来源:互联网 发布:淘宝艾灸盒哪个牌子好 编辑:程序博客网 时间:2024/05/18 16:13

解决校园网掉线时自动重启问题

在学校常常会遇到校园网狗血般经常性断网,断网原因多种多样,有些是校园网技术落后,负载太多时故障性掉线,有些则是检测到开启wifi而主动掉线。

一、如何解决校园网断网后自动重新启动,并且重新开启wifi?

以下为题主的解决方案,采用C#编写,其实如果你愿意的话,用脚本编写也是一种明智的选择,而且效率更高,但是如果要做到人人都能够方面操作的话,个人认为winform是一种相对比较好的选择。

1)定时检测网络,我这里采用的是cmd命令ping

2)抓去ping结果,对结果进行解析,根据解析结果做出反应

①ping通:状态栏显示网络正常。

②ping不通:状态栏显示网络状态,并且杀掉校园网登录软件以及开启wifi的软件进程,题主的是锐捷和猎豹wifi,你必须清楚的知道你的进程的名称或者进程ID号,重启时因为需要用到软件的路径,所以你也必须知道软件的路径名。

二、关键代码

这里我用的是一个定时器timer,设定timer的值(毫秒),当间隔一定时间之后,就会触发timer1_Tick事件,接着打开cmd,发送命令,获取命令结果,然后再处理。

1、网络检测代码块

public bool netCheck()        {            System.Diagnostics.Process proIP = new System.Diagnostics.Process();            proIP.StartInfo.FileName = "cmd.exe";            proIP.StartInfo.UseShellExecute = false;            proIP.StartInfo.RedirectStandardInput = true;            proIP.StartInfo.RedirectStandardOutput = true;            proIP.StartInfo.RedirectStandardError = true;            proIP.StartInfo.CreateNoWindow = true;// 不显示 cmd 窗口              proIP.Start();            proIP.StandardInput.WriteLine("ping  baidu.com");            proIP.StandardInput.WriteLine("exit");            string strResult = proIP.StandardOutput.ReadToEnd();            proIP.Close();            if (strResult.IndexOf("(0% 丢失)") != -1)            {                return true;            }            else            {                return false;            }        }

2、网络重启代码块

            System.Diagnostics.Process proIP = new System.Diagnostics.Process();            proIP.StartInfo.FileName = "cmd.exe";            proIP.StartInfo.UseShellExecute = false;            proIP.StartInfo.RedirectStandardInput = true;            proIP.StartInfo.RedirectStandardOutput = true;            proIP.StartInfo.RedirectStandardError = true;            proIP.StartInfo.CreateNoWindow = true;// 不显示 cmd 窗口              proIP.Start();            proIP.StandardInput.WriteLine("taskkill /f /t /im 8021x.exe");            proIP.StandardInput.WriteLine("taskkill /f /t /im kwifi.exe");            proIP.StandardInput.WriteLine("RuijieSupplicant");            proIP.StandardInput.WriteLine("kwifi");            proIP.StandardInput.WriteLine("exit");            proIP.Close();            toolStripStatusLabel1.Text = "锐捷重启完成";            NetStatus = "锐捷重启完成";            Write("Record.txt", NetStatus);

3、日志文件记录

public void Write(string path, string record)        {            FileInfo finfo = new FileInfo(path);            using (FileStream fs = finfo.OpenWrite())            {                //根据上面创建的文件流创建写数据流                 StreamWriter w = new StreamWriter(fs);                //设置写数据流的起始位置为文件流的末尾                 w.BaseStream.Seek(0, SeekOrigin.End);                w.Write("{0}\t{1}\t{2}\n", DateTime.Now.ToString("yyyy-MM-dd"), DateTime.Now.ToLongTimeString(), record);                //清空缓冲区内容,并把缓冲区内容写入基础流                 w.Flush();                //关闭写数据流                 w.Close();            }        }

三、示例

程序
日志

参考程序:校园网防掉线.,2017.4.2

锐捷防掉线(更新版),需要配置环境变量,可通用,2017.4.4

0 0