2012-08-22 61 views
4

我知道這個問題已經以不同的方式接近了,但是我檢查了stackoverflow,並且我沒有找到我正在尋找的答案。在java中的Ping值

爲了使簡單:有沒有辦法讓在的Windows時間ping值到IP服務器?

我知道如何檢查一些服務器是否可以訪問,但我想要精確的值,就像我們可以在終端上讀取一樣。

謝謝爲您的幫助和理解。

+0

什麼「價值」你在找完了嗎? ping會返回許多值。 – user1329572

回答

5

你可以做這樣的事情:

//The command to execute 
String pingCmd = "ping " + ip + " -t"; 

//get the runtime to execute the command 
Runtime runtime = Runtime.getRuntime(); 
Process process = runtime.exec(pingCmd);  

//Gets the inputstream to read the output of the command 
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); 

//reads the outputs 
String inputLine = in.readLine(); 
while ((inputLine != null)) { 
    if (inputLine.length() > 0) { 
     ........ 
    } 
    inputLine = in.readLine(); 
} 

reference

UPDATE:根據自己的需要

public class PingDemo {  
    public static void main(String[] args) { 
     String ip = "localhost"; 
     String time = ""; 

     //The command to execute 
     String pingCmd = "ping " + ip; 

     //get the runtime to execute the command 
     Runtime runtime = Runtime.getRuntime(); 
     try { 
      Process process = runtime.exec(pingCmd); 

      //Gets the inputstream to read the output of the command 
      BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); 

      //reads the outputs 
      String inputLine = in.readLine(); 
      while ((inputLine != null)) { 
       if (inputLine.length() > 0 && inputLine.contains("time")) { 
        time = inputLine.substring(inputLine.indexOf("time")); 
        break;       
       } 
       inputLine = in.readLine(); 
      }  
      System.out.println("time --> " + time);  
     } catch (Exception ex) { 
      System.out.println(ex); 
     } 
    } 
} 

寫在小操之過急。

+0

同樣在第一個答案中: String pingCmd =「ping」+ ip +「-t」 它應該是「ping -t」+ number + ip –

1

您可以調用ping命令並讀取輸出(如前面的答案中所述),或者如果您需要較低的控制桿訪問權限(就像您可以使用RAW套接字一樣),您可以查看jpcap java庫。

1

如圖所示here,您需要使用Runtime類來提取ping。所有需要你的是解析輸入流(可能使用正則表達式來獲得時間ping值)。

0
public static void main(String[] args) { 

    System.out.println("Enter the host to be pinged : "); 
    Scanner sc = new Scanner(in); 
    String str = sc.next(); 
    System.out.println("Enter the no. of packets to be sent : "); 
    int packets = sc.nextByte(); 
    String pingResult; 
    int count=0; 
    try{ 
     String command = "ping -c "+ packets +" -w 10 " + str; 
     Process process = Runtime.getRuntime().exec(command); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
     String inputLine; 
     while ((inputLine = reader.readLine()) != null) { 
      if(count==packets+4) { 
       pingResult = (inputLine.substring(inputLine.indexOf("="))); 
       pingResult = (pingResult.substring 
         (pingResult.indexOf("/")+1,pingResult.indexOf("/")+7)); 
       System.out.println(pingResult + " ms"); 
      } 
      count++; 
     } 
     in.close(); 
     if(count==0)System.out.println("Wrong host entered."); 
    }catch(Exception e){ 
     System.out.println("Exception caught: " + e.toString()); 
    } 
} 

}

輸出: 輸入主機被ping: 8.8.8.8 輸入no。數據包被髮送: 31.406毫秒

進程退出代碼爲0

+0

歡迎來到Stack Overflow!感謝您的代碼片段,它可能會提供一些即時的幫助。通過展示*爲什麼*這是一個很好的解決方案,對未來的讀者會有更好的解決方案,這將爲它的教育價值提供一個合適的解釋[//大大提高](// meta.stackexchange.com/q/114762)但不完全相同的問題。請編輯您的答案以添加解釋,並指出適用的限制和假設。 –

+0

這是查找平均時間來ping主機。 –