Windows宽带断线重连(C#)

时间: 2023-10-04 admin IT培训

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;}//运行cmdpublic 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 + "");}}
}

国际惯例

附上源码与可执行文件