1. 程式人生 > >用技術解決困惑:解決校園網掉線時自動重啟問題

用技術解決困惑:解決校園網掉線時自動重啟問題

解決校園網掉線時自動重啟問題

在學校常常會遇到校園網狗血般經常性斷網,斷網原因多種多樣,有些是校園網技術落後,負載太多時故障性掉線,有些則是檢測到開啟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();
            }
        }

三、示例

程式
日誌