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 + "");
        }
    }
}

国际惯例

附上源码与可执行文件
http://pan.baidu.com/s/1geJdPw3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值