Windows寬頻斷線重連(C#)
阿新 • • 發佈:2019-01-27
問題
最近電腦寬頻總是自動掉線,蛋疼啊。
在網路上下載了工具,實現自動重連,但是都帶廣告著啊,不能忍
不能忍。
思路
用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 + "");
}
}
}