3


0

こんにちは私は名前付きパイプの使用についていくつか質問があります。

まず、パイプサーバーをセットアップしようとすると、以下のコードを使用すると気付きました。 最初のクライアント接続が終了すると、サーバーは使用できなくなります。その間、全体をwhile(true)ブロックで囲みます。 私はこれを正しくしましたか? それとも、各サーバーは一度だけアクティブにしてから死ぬことになっていますか?

using(NamedPipeServerStream pipeServerStream = new NamedPipeServerStream(pipeName、PipeDirection.In、1、transmissionMode)){pipeServerStream.WaitForConnection();

using(StreamReader sr = new StreamReader(pipeServerStream)){string message = null;

do {message = sr.ReadLine();} OnPipeCommunicationHandler(new IPCData(){Data = message}); while(message!= null); }}

第二に、私も独自のスレッドでサーバーからスピンオフしなければなりませんでした - 私がこれをしないなら私のアプリケーションは利用可能にならないでしょう。 これは正常ですか? 私はこれを正しくしましたか? 私はどこかで、その中でnamedpipeserverstreamがそれ自身のためにそれ自身のスレッドを作成することを読んだと思ったが、私はそれが事実であるとは思わない..

ありがとうございます。

1 Answer


3


はい、名前付きパイプの場合は、次のクライアントが接続できるようにするためにサーバーの新しいインスタンスを作成する必要があります。 (少なくとも同期プログラミングでは)通常行われることは、接続を待ってから新しいスレッドを生成してクライアントを処理し、元のスレッドをループバックして新しいサーバーを作成することです。

スレッド化に関しては、たとえオブジェクトが舞台裏でスレッドを作成したとしても(私は疑っています)、それはあなたが書いたコードが同期的であるという事実を回避しないので、とにかくそれ自身のスレッドにある必要があります。