java實現動態切換上網IP (ADSL撥接) java 斷網重連 (原)讀取cmd訊息 亂碼解決

來源:互聯網
上載者:User

http://gezhicheng.javaeye.com/blog/764228

動態切換IP的實現主是也由Windows的rasdial命令提供的,其實不是java的功勞,java只是調用一下bat指令碼而已:

rasdial命令:

 

撥號

Java代碼 :
  1. 文法: rasdial  串連名稱 username password   
  2. 執行個體: rasdial 我的寬頻 hzhz1234567890 dfdfdfdfdf  

斷網

Java代碼 
  1. 文法:rasdial  串連名稱 /disconnect     
  2. 執行個體: rasdial 寬頻  /disconnect    

 

java程式調用rasdial命令:(其中讀取CMD返回訊息時可能會亂碼,注意紅色字型那一句的編碼設定)

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(),"GB2312"));  //這裡很重要,設定GB2312解決亂碼!!!
                             //如果程式預設編碼就是GB2312,可以不寫
                             //我NetBeans預設用UTF8
String line;
while ((line = br.readLine()) != null) {
sbCmd.append(line + "\n");
}
return sbCmd.toString();

    //如果整個過程換成這樣,就更清楚了。getInputStream是擷取最原始的位元組流,
    //cmd返回的是以GB2312雙位元組編碼的位元組流
    InputStream in = p.getInputStream();
    byte[] b = new byte[1000];
    in.read(b);
    String msg = new String(b,"GB2312");  //用GB2312解釋這堆位元組,就可以組裝成一個正常的String了
                         //如果上邊不寫GB2312,等於這裡用UTF8組裝,結果一樣
}

/**
* 串連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代碼
  1. 正在建立串連.   
  2. 已成功建立串連.   
  3. 串連已斷開   
  4. 正在建立串連.   
  5. 已成功建立串連.  

小結:
實現這個功能的最主要在於bat命令能支援這個功能,和以前寫過的自動化佈建ip功能類似,這些功能實現java其實是很不方便的,看來要優雅的實現和windows作業系統相關的行為,學習windows編程才行。

 

 

重撥機制:

 

Java代碼
  1. while(!connAdsl("寬頻","hzhz**********","******")){   
  2.               Thread.sleep(1000);   


  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.