2016-05-15 4 views
1

Я пытаюсь узнать, как работают именованные каналы, поэтому я могу подключить два приложения C#.C# namedpipes server/client

Я написал два базовых приложения C# для тестирования, но он не работает.

Когда я запустил соединение, первое приложение замерзает, ожидая ввода, и после того, как я отправил ввод из приложения 2, он размораживает, а кнопка 1 показывает. Но ничего не появляется в текстовом поле, какие-то идеи почему?

Application1:

private void button1_Click(object sender, EventArgs e) 
    { 
     button1.Hide(); 

     NamedPipeServerStream pipeServer = new NamedPipeServerStream("testpipe"); 
     pipeServer.WaitForConnection(); 

     StreamReader s = new StreamReader(pipeServer); 
     textBox1.Text = s.ReadToEnd(); 

     pipeServer.Close(); 

     button1.Show(); 
    } 

Применение 2:

private void button1_Click(object sender, EventArgs e) 
    { 

     NamedPipeClientStream pipeClient = new NamedPipeClientStream("testpipe"); 
     if (pipeClient.IsConnected != true) pipeClient.Connect(); 
     StreamWriter sw = new StreamWriter(pipeClient); 
     sw.WriteLine("%s", textBox1.Text); 

     pipeClient.Close(); 

    } 

ответ

0

Вы закрытия NamedPipeClientStream перед StreamWriter уже покраснел любые данные. Поэтому, когда вы читаете данные из потока сервера, нет данных для чтения до закрытия соединения, поэтому вы получаете пустую строку.

Вы можете исправить это правильно выбрасывании StreamWriter, как это:

private void button1_Click(object sender, EventArgs e) 
{ 
    using (var pipeClient = new NamedPipeClientStream("testpipe")) 
    { 
     if (pipeClient.IsConnected != true) pipeClient.Connect(); 
     using (var sw = new StreamWriter(pipeClient)) 
     { 
      sw.WriteLine("%s", textBox1.Text); 
     } 
    } 
} 

В качестве альтернативы, вы можете установить AutoFlush в true на StreamWriter.

+0

Я заменил свой код вашим вторым приложением, но теперь первые приложения перестают отвечать после отправки текста. все, что я должен там изменить? – Awesome

+0

У меня было неправильное название трубы в коде выше ('' test pipe ''versus' 'testpipe" '). Теперь попробуйте ввести правильное имя. – yaakov

+0

это сработало спасибо :) – Awesome

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

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