Как захватить результаты iperf непрерывно, используя exec() в Java?

Я хочу захватить результаты программы IPerf3 и отправить их в графический интерфейс JAVA swing, и представить их в виде диаграммы.

Но я воспринял это как серьезную проблему.

Есть фрагмент кода, который я когда-либо использовал.

process = Runtime.getRuntime().exec(command);

// read in the output from Iperf
input = new BufferedReader(new InputStreamReader(process.getInputStream()));
errors = new BufferedReader(new InputStreamReader(process.getErrorStream()));

Thread t = new Thread(){
    public synchronized void run(){
         String input_line = null;
           try{
              while (input != null && (input_line = input.readLine()) != null  && !input_line.equals(""))
            {
                    //  System.out.println("getting msg now ...");
                    parseLine(input_line);
                    frame.logMessage(input_line);
            }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
};
t.start();

И вот пример команды: "iperf3 -f M -i 1 -c iperf.he.net -p 5201 -P 1 -t 10".

Как вы знаете, этот сервис iperf3 отправляет данные клиенту (или серверу) по временному интервалу (здесь, одна секунда), поэтому, когда я получаю один результат в секунду, я хочу отправить в GUI (здесь parseLine() делает это) как только я получу результат.

Но parseLine() внутри оператора while из Thread.run() выполняется, когда получены все 10 результатов, другими словами, когда служба iperf3 закончила работу.

У меня есть сомнения, что есть проблема в использовании

BufferedReader

для ввода строки.

Теперь у меня возникла проблема с этим вопросом, и я хочу, чтобы разработчики, которые имеют богатый опыт работы с java и iperf, действительно помогли мне.

Заранее спасибо.

1 ответ

Не забывайте принудительный сброс. Не могу говорить с остальным кодом.

боб

Другие вопросы по тегам