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

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

rasdial命令:



拨号
Java代码 复制代码

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

断网
Java代码 复制代码

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




java程序调用rasdial命令:
Java代码 复制代码

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




执行结果:
Java代码 复制代码

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




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


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



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

Java代码 复制代码

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

你可能感兴趣的:(java)