2016-05-15 1 views
1

名前付きパイプの仕組みを学びたいので、2つのC#アプリケーションを接続できます。C#namedpipes server/client

私は2つの基本的なC#アプリケーションをテスト用に記述しましたが、動作しません。

私が接続を開始すると、最初のアプリケーションは入力を待機してフリーズし、アプリケーション2からの入力を受け取った後、それが破棄され、button1が表示されます。しかし、テキストボックスには何も表示されません。

アプリケーション1:

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

あなたがそれに任意のデータをフラッシュしているStreamWriterNamedPipeClientStreamを閉じています。したがって、サーバー・ストリームからデータを読み取ると、接続がクローズされる前に読み取るデータがないため、空の文字列を取得します。あなたが適切になるように、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); 
     } 
    } 
} 

、あなたはStreamWritertrueAutoFlushを設定することができます。

+0

2番目のアプリケーションで自分のコードを自分のコードに置き換えましたが、テキストを送信すると最初のアプリケーションが応答しなくなりました。何か私はそこに変更すべきですか? – Awesome

+0

上記のコード( ''テストパイプ ''と ''テストパイプ '')の間にパイプの名前が間違っていました。今すぐ正しい名前で試してください。 – yaakov

+0

ありがとうございました:) – Awesome