2015-02-16 5 views
1

Я пытаюсь написать оболочку C# для сервера Iperf. После того как клиент Iperf будет выполнен с отправкой пакетов, серверное приложение C# должно выгрузить выходные данные в текстовый файл. Проблема заключается в том, что этот процесс (сервер) никогда не выходит, поэтому он не сбрасывает никаких данных в txt-файл. Однако, когда я вручную закрываю окно cmd, на котором запущен сервер iperf, текстовый файл записывается с данными (выходы процесса). Но это явно не то решение, которое я ищу. Любые предложения, как я могу записать данные непосредственно в файл, без необходимости вручную закрыть окно cmd iperf server?C# Iperf Server

Это мой код:

private void button1_Click(object sender, EventArgs e) 
{  
    string commandline_server = " -s -u -i 1"; 

    try 
    {   
     process = new Process(); 
     process.StartInfo.FileName = "iperf.exe"; 
     process.StartInfo.UseShellExecute = false; 
     process.StartInfo.RedirectStandardOutput = true; 
     //process.StartInfo.RedirectStandardError = true; 

     process.StartInfo.Arguments = commandline_server; 
     process.StartInfo.CreateNoWindow = false; 

     process.EnableRaisingEvents = true; 
     process.Exited += new EventHandler(process_Exited); 

     process.Start();    
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.ToString()); 
    } 
} 

void process_Exited(object sender, EventArgs e) 
{ 
    //throw new NotImplementedException(); 
    string outfile = process.StandardOutput.ReadToEnd(); 
    System.IO.File.WriteAllText("test.txt", outfile); 
} 
+0

Возможный дубликат [Как асинхронно читать стандартный поток вывода и стандартный поток ошибок сразу) (http://stackoverflow.com/questions/12566166/how-to-asynchronously-read-the-standard-output-stream -and-standard-error-stream) –

+0

Спасибо за вашу ссылку, но это не очень помогает мне. Кажется, что процесс (сервер Iperf) на самом деле никогда не завершается, поэтому он никогда не вызывает событие. Мне интересно, есть ли способ читать вывод непрерывно, не дожидаясь завершения процесса? Благодарю. – stani

+0

Он поднимает события все в порядке. Я вставил код из принятого ответа в VS verbaitm, изменил путь к файлу и в командной строке, добавил текстовое поле и кнопку в форму и подключил кнопку к методу StartProcess и добавил новую строку после каждой строки в 'Display'. Я сразу получил [это] (http://i.stack.imgur.com/78yAL.png). –

ответ

0

Вместо того, чтобы обстреливать на терминал, вы рассматривали использование их API? iperf3 представил «libiperf».

В исходном коде есть примеры C-программ.

 Смежные вопросы

  • Нет связанных вопросов^_^