问题
最近电脑宽带总是自动掉线,蛋疼啊。
在网络上下载了工具,实现自动重连,但是都带广告着啊,不能忍
不能忍。
思路
用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 + "");
}
}
}
国际惯例
附上源码与可执行文件
http://pan.baidu.com/s/1geJdPw3