2011-03-23 61 views
1

我正在爲sipp命令行程序編寫Java接口。我目前的代碼是:從java運行sipp

ProcessBuilder builder = new ProcessBuilder("sipp", "-sn uac", 
       "127.0.0.1"); 
     Map<String, String> environment = builder.environment(); 
     Process javap = builder.start(); 
     InputStreamReader tempReader = new InputStreamReader(new BufferedInputStream(javap.getInputStream())); 
     BufferedReader reader = new BufferedReader(tempReader); 
     while (true){ 
      String line = reader.readLine(); 
      if (line == null) 
       break; 
      System.out.println(line); 
      } 

這對我不適用想,我有sipp環境變量集,所以這不是問題。標準輸出是sipp的幫助信息。我究竟做錯了什麼?另外我想知道,一旦我運行了sipp,是否可以將參數傳遞給與之關聯的processBuilder對象,以便我可以更改調用率?即sipp讓用戶通過按+, - ,*來更改通話費率,這可能嗎?

回答

1

嘗試打破了-snuac參數:

ProcessBuilder builder = new ProcessBuilder("sipp", "-sn", "uac", "127.0.0.1"); 

我也想知道,一旦我得到 SIPP的運行是有可能通過 參數與之相關聯,因此的ProcessBuilder對象 我可以更改 通話費率?

如果sipp是從標準期待輸入,則應該能夠抓住一個輸出流(javap.getOutputStream())至處理和寫入命令給它。但我不知道sipp的任何信息,可以告訴你它是如何工作的。

+0

非常感謝你做了這個訣竅的答案,這些命令的類型是「q」「+」e.t.c.所以如果我從進程中獲取outputStream然後執行「String test =」q「; javap.getOutputStream()。write(test.getBytes());」這應該工作正確嗎? – maxsap 2011-03-25 13:22:53

+0

@maxsap - 假設「sipp」期望數據來自標準輸入數據,那麼應該工作得非常類似(我必須對其進行測試才能確定)。您可能還需要在每個輸出流之後調用'flush'寫。 – 2011-03-25 14:00:12

+0

是的我忘了寫flush命令,我試圖用這個命令來運行這個過程:ProcessBuilder builder = new ProcessBuilder(path.trim(),「127.0.0.1:5060」,「-sf」,「scenario。 xml「,」 - i「,」127.0.0.1「,」 - p「,」5050「,」-r「,」1「,」 - m「,」1000000「);這是一個標準命令(直接從命令行運行),但是當我嘗試運行它時,java會返回null,所以代碼退出。這真的很奇怪,因爲其他命令可以很好地工作,sipp位於/ usr/bin? – maxsap 2011-03-25 14:25:54