用技術解決困惑:解決校園網掉線時自動重啟問題
阿新 • • 發佈:2018-12-31
解決校園網掉線時自動重啟問題
在學校常常會遇到校園網狗血般經常性斷網,斷網原因多種多樣,有些是校園網技術落後,負載太多時故障性掉線,有些則是檢測到開啟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();
}
}
三、示例