您的位置:首页 > 其它

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

2017-04-02 20:36 651 查看

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

在学校常常会遇到校园网狗血般经常性断网,断网原因多种多样,有些是校园网技术落后,负载太多时故障性掉线,有些则是检测到开启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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  winform