1. 程式人生 > >Windows寬頻斷線重連(C#)

Windows寬頻斷線重連(C#)

問題

最近電腦寬頻總是自動掉線,蛋疼啊。
在網路上下載了工具,實現自動重連,但是都帶廣告著啊,不能忍
不能忍。

思路

用C#操作寬頻連線,包括Java或者其他語言操作寬頻連線,一個很簡單的方法是使用在程式碼中執行cmd命令,通過該程序的輸出內容判斷執行結果。

網路是否已連線

已連線

C:\Users\MrSeng>rasdial
已連線
寬頻連線
命令已完成。

未連線

C:\Users\MrSeng>rasdial
沒有連線
命令已完成。

連線寬頻

C:\Users\MrSeng>rasdial 寬頻連線 13233053569 yz2000
正在連線到 寬頻連線...
正在驗證使用者名稱及密碼...
正在網路上註冊你的計算機...
已連線 寬頻連線。
命令已完成。

程式碼

class Manager
{
    private static bool isRunning = false; //是否自動重連
    public static void setIsRunning(bool b)
    {
        isRunning = b;
    }
    private string adslTitle, adslName, adslPwd;
    private int wait;
    public Manager(string adslTitle,string adslName,string adslPwd,bool isAuto,int
wait){ this.adslTitle = adslTitle; this.adslName = adslName; this.adslPwd = adslPwd; this.wait = wait; isRunning = isAuto; } //執行cmd public static string exeCmd(string cmd) { cmd = cmd.Trim().TrimEnd('&') + "&exit";//說明:不管命令是否成功均執行exit命令,否則當呼叫ReadToEnd()方法時,會處於假死狀態
using (Process p = new Process()) { p.StartInfo.FileName = "cmd.exe"; p.StartInfo.UseShellExecute = false; //是否使用作業系統shell啟動 p.StartInfo.RedirectStandardInput = true; //接受來自呼叫程式的輸入資訊 p.StartInfo.RedirectStandardOutput = true; //由呼叫程式獲取輸出資訊 p.StartInfo.RedirectStandardError = true; //重定向標準錯誤輸出 p.StartInfo.CreateNoWindow = true; //不顯示程式視窗 p.Start();//啟動程式 //向cmd視窗寫入命令 p.StandardInput.WriteLine(cmd); p.StandardInput.AutoFlush = true; //獲取cmd視窗的輸出資訊 string output = p.StandardOutput.ReadToEnd(); p.WaitForExit();//等待程式執行完退出程序 p.Close(); return output; } } //判斷是否已連線 public static bool isConned() { string cmd = "rasdial"; string result = exeCmd(cmd); return result.Contains("已連線"); } //連線寬頻 public bool conn() { if (!isConned()) { string cmd = "rasdial " + adslTitle + " " + adslName + " " + adslPwd; string result = exeCmd(cmd); return result.Contains("已連線"); } return true; } //斷開 public bool cutConn() { if (isConned()) { string cmd = "rasdial " + adslTitle + " /disconnect"; return !exeCmd(cmd).Contains("沒有"); } return true; } private void taskMethod(Object wait ) { int delay = int.Parse(wait as string); while (isRunning) { if (!isConned()) { conn(); } Thread.Sleep(delay); } } public void connNet() { if (isRunning) { conn(); } else { ThreadPool.QueueUserWorkItem(taskMethod, wait * 1000 + ""); } } }

國際慣例