2013-07-02 30 views
0

我嘗試在我的應用程序上實現PING命令。我這樣做的方式是創建一個進程然後執行命令。當PING命令完成時,我解析控制檯的結果。運行ping命令使用進程與shell有不同的結果

該方法工作正常。我的問題是當我嘗試更改PING命令的間隔時間值時。 PING可以將一個值作爲參數,該值定義了2個數據包發送之間的間隔。當我從我的應用程序執行該方法時,結果與使用終端仿真器執行的方法有所不同。

間隔值強調以更少再寄一次發送多個分組的裝置已在間隔值設定爲0.1毫秒和已檢查了兩種情況下的結果。該設備與終端仿真器一起工作,並有1-2%的損失。使用我的應用程序,結果顯示70-80%的損失。

對於1毫秒的時間間隔的結果是相同的。 (設備不調出)

從我已經做了我意識到,設備丟失的數據包時PING方式是我的應用程序中調用不同的測試。

這怎麼可能?我認爲在一個進程中執行一個命令與從一個終端模擬器執行它有相同的結果。任何想法?

我使用的代碼從這裏Run shell commands from android program

我知道,蘇不需要....

public void runAsRoot(String[] cmds) throws Exception { 
     Process p = Runtime.getRuntime().exec("su"); 
     DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
     InputStream is = p.getInputStream(); 
     for (String tmpCmd : cmds) { 
      os.writeBytes(tmpCmd+"\n"); 
      int readed = 0; 
      byte[] buff = new byte[4096]; 
      boolean cmdRequiresAnOutput = true; 
      if (cmdRequiresAnOutput) { 
       while(is.available() <= 0) { 
        try { Thread.sleep(5000); } catch(Exception ex) {} 
       } 

       while(is.available() > 0) { 
        readed = is.read(buff); 
        if (readed <= 0) break; 
        String seg = new String(buff,0,readed); 
        result=seg; //result is a string to show in textview 
       } 
      } 
     }   
     os.writeBytes("exit\n"); 
     os.flush(); 
+0

你是什麼意思,「在一個過程中」?過程在哪裏?你的臺式電腦?你的設備? –

+0

我添加了額外的代碼。我在我的應用程序中創建一個進程並執行命令。我知道su是不需要的,但我也使用這個方法來處理其他事情 –

回答

0

從我的理解,從亞行外殼執行命令並不像具有相同應用程序調用像Process p = Runtime.getRuntime().exec(" A COMMAND ");

一個處理的一個例子,這是dumpsys命令,如果你programmaticaly執行它不返回結果。 (需要root或定製內核)...

類似的這樣當我打電話ping -c 1000 -i 0.1 www.google.com由亞洲開發銀行和語法必須發生example

東西。

相關問題