`

java实现动态切换上网IP (ADSL拨号上网)

    博客分类:
  • bat
阅读更多

 

动态切换IP的实现主是也由Windows的rasdial命令提供的,其实不是java的功劳,java只是调用一下bat脚本而已:

rasdial命令:

 

拨号

语法: rasdial  连接名称 username password
实例: rasdial 我的宽带 hzhz1234567890 dfdfdfdfdf

断网

语法:rasdial  连接名称 /disconnect  
实例: rasdial 宽带  /disconnect  
 


java程序调用rasdial命令:

package com.sesame.network;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ConnectNetWork {

    /**
     * 执行CMD命令,并返回String字符串
     */
    public static String executeCmd(String strCmd) throws Exception {
        Process p = Runtime.getRuntime().exec("cmd /c " + strCmd);
        StringBuilder sbCmd = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader(p
                .getInputStream()));
        String line;
        while ((line = br.readLine()) != null) {
            sbCmd.append(line + "\n");
        }
        return sbCmd.toString();
    }

    /**
     * 连接ADSL
     */
    public static boolean connAdsl(String adslTitle, String adslName, String adslPass) throws Exception {
        System.out.println("正在建立连接.");
        String adslCmd = "rasdial " + adslTitle + " " + adslName + " "
                + adslPass;
        String tempCmd = executeCmd(adslCmd);
        // 判断是否连接成功
        if (tempCmd.indexOf("已连接") > 0) {
            System.out.println("已成功建立连接.");
            return true;
        } else {
            System.err.println(tempCmd);
            System.err.println("建立连接失败");
            return false;
        }
    }

    /**
     * 断开ADSL
     */
    public static boolean cutAdsl(String adslTitle) throws Exception {
        String cutAdsl = "rasdial " + adslTitle + " /disconnect";
        String result = executeCmd(cutAdsl);
       
        if (result.indexOf("没有连接")!=-1){
            System.err.println(adslTitle + "连接不存在!");
            return false;
        } else {
            System.out.println("连接已断开");
            return true;
        }
    }
   
    public static void main(String[] args) throws Exception {
        connAdsl("宽带","hzhz**********","******");
        Thread.sleep(1000);
        cutAdsl("宽带");
        Thread.sleep(1000);
        //再连,分配一个新的IP
        connAdsl("宽带","hzhz**********","******");
    }
}
 


执行结果:

正在建立连接.
已成功建立连接.
连接已断开
正在建立连接.
已成功建立连接.
 


小结:
实现这个功能的最主要在于bat命令能支持这个功能,和以前写过的自动设置ip功能类似,这些功能实现java其实是很不方便的,看来要优雅的实现和windows操作系统相关的行为,学习windows编程才行。

4
0
分享到:
评论
3 楼 dutaibai 2013-05-11  
真实神啊。谢谢大哥的代码。收下了哦。。。  
java实现动态切换上网IP (ADSL拨号上网)  一定要 一下。必须的哦。
2 楼 sesame 2009-07-29  
kqy929 写道
LZ,你这没有重拨机制啦,这可不能确保每次都能成功连接上。
也许即使反复的重拨也未能连上,不知LZ是否碰到过。


我的代码只是展示功能。 如果你要重连功能的话,这样就可以了:

while(!connAdsl("宽带","hzhz**********","******")){
              Thread.sleep(1000);
}

1 楼 kqy929 2009-07-29  
LZ,你这没有重拨机制啦,这可不能确保每次都能成功连接上。
也许即使反复的重拨也未能连上,不知LZ是否碰到过。

相关推荐

Global site tag (gtag.js) - Google Analytics