Как получить задержку от команды ping в Java

#java

#java

Вопрос:

с помощью этого кода я получаю задержку с сервера, но я не могу защитить ее в переменной.

Я уже пробовал это, но, к сожалению, я новичок в Java и не могу решить эту проблему. Как я могу получить среднюю задержку в переменной в миллисекундах (мс)?

Спасибо за помощь!

Редактировать: мне нужна средняя задержка, поэтому мне просто нужно значение «Mittelwert» — в этом примере значение «25» в переменной. Итак, я добавил код из J.Doe в свой код и изменил «time» на «Mittelwert» и изменил

«String timeWithValue = s.split(» = «)[2];»

«Строковое значение = timeWithValue.split(«ms»)[0]»

Итак, этот код необходимо вставить в код, тогда средняя задержка в виде «Mittelwert» будет сохранена в переменной «latency».

Но теперь выходные данные не возвращают «среднюю задержку: 25». Средняя задержка вообще не возвращается. Кто-нибудь знает, почему это происходит?

  System.out.println("here is the average latency :n");
double latency = 0.0;
while ((s = stdInput.readLine()) != null)
{
    if (s.contains("Mittelwert")) {
        String timeWithValue = s.split(" = ")[2];
        String value = timeWithValue.split("ms")[0];
        latency = Double.parseDouble(value);
        System.out.println("latency "   latency);
    }
}

Output: 
Here is the standard output of the command:


Ping wird ausgef?hrt f?r 74.125.236.73 [2a00:1f78:fffd:9::d435:9868] mit 32 Bytes Daten:
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=26ms 
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=25ms 
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=25ms 
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=29ms 

Ping-Statistik f?r 2a00:1f78:fffd:9::d435:9868:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
    (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 25ms, Maximum = 29ms, Mittelwert = 26ms
Here is the standard error of the command (if any):

here is the average latency :










import java.io.*;
import java.util.*;

public class JavaPingExampleProgram
{

  public static void main(String args[]) 
  throws IOException
  {
    // create the ping command as a list of strings
    JavaPingExampleProgram ping = new JavaPingExampleProgram();
    List<String> commands = new ArrayList<String>();
    commands.add("ping");
    //commands.add("-c");
    //commands.add("5");
    commands.add("74.125.236.73");
    ping.doCommand(commands);
  }

  public void doCommand(List<String> command) 
  throws IOException
  {
    String s = null;

    ProcessBuilder pb = new ProcessBuilder(command);
    Process process = pb.start();

    BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
    BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
    
    // read the output from the command
    System.out.println("Here is the standard output of the command:n");
    while ((s = stdInput.readLine()) != null)
    {
      System.out.println(s);
    }

    // read any errors from the attempted command
    System.out.println("Here is the standard error of the command (if any):n");
    while ((s = stdError.readLine()) != null)
    {
      System.out.println(s);
    }
  }

}



Output:
Here is the standard output of the command:


Ping wird ausgef?hrt f?r 74.125.236.73 [2a00:1f78:fffd:9::d435:9868] mit 32 Bytes Daten:
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=26ms 
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=25ms 
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=24ms 
Antwort von 2a00:1f78:fffd:9::d435:9868: Zeit=25ms 

Ping-Statistik f?r 2a00:1f78:fffd:9::d435:9868:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
    (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 24ms, Maximum = 26ms, Mittelwert = 25ms
Here is the standard error of the command (if any):
  

Комментарии:

1. Знаете ли вы, где String передаются файлы, содержащие задержку?

2. У вас есть текстовые данные, поступающие через ваш вызов stdInput.readLine(). Вместо того, чтобы печатать это, вы могли бы применить к нему регулярное выражение, чтобы извлечь значение задержки, а затем вы могли бы преобразовать эту строку в значение с плавающей запятой. — Можете ли вы показать нам результат, который вы получаете? (укажите это в вопросе, а не в комментарии, пожалуйста)

Ответ №1:

если ваш вывод похож

 PING google.de (216.58.208.35): 56 data bytes
64 bytes from 216.58.208.35: icmp_seq=0 ttl=118 time=22.126 ms
64 bytes from 216.58.208.35: icmp_seq=1 ttl=118 time=27.877 ms
64 bytes from 216.58.208.35: icmp_seq=2 ttl=118 time=18.077 ms
64 bytes from 216.58.208.35: icmp_seq=3 ttl=118 time=33.099 ms
  

попробуйте это:

 while ((s = stdInput.readLine()) != null)
        {
            if (s.contains("time")) {
                String timeWithValue = s.split(" ")[6];
                String value = timeWithValue.split("=")[1];
                double latency = Double.parseDouble(value);
                System.out.println(latency);
            }

        }
  

Комментарии:

1. Я думаю, вам нужно изменить индекс массива первого разделения с 6 на 3. Какой из них вы пробовали?

2. Ах, и я вижу, вам также придется извлечь число из единицы после второго разделения: 24 мс

3.Я думаю, вы получаете IndexOutOfBounds, потому что ваш более поздний ввод также содержит дух времени Ca. Zeitangaben