C# コンソール アプリケーション: 名前付きパイプを使用したプロセス間通信
名前付きパイプは、プロセス間通信 (IPC) のための堅牢かつ効率的な方法を提供します。この例では、名前付きパイプを使用して 2 つのプロセス間でメッセージを交換する C# コンソール アプリケーションを示します。
アプリケーション構造
アプリケーション A とアプリケーション B の 2 つのコンソール アプリケーションを構築します。アプリケーション A は通信を開始し、アプリケーション B にメッセージを送信します。アプリケーション B はそれに応じて応答します。
サーバー (アプリケーション B)
NamedPipeServerStream
を使用して作成されます。WaitForConnection
を使用してクライアント接続を待機します。StreamReader
と StreamWriter
は、メッセージの読み取りと書き込みのための通信チャネルを確立します。サーバーコード例:
<code class="language-csharp">Task.Factory.StartNew(() => { using (var server = new NamedPipeServerStream("MyPipe")) { server.WaitForConnection(); using (var reader = new StreamReader(server)) using (var writer = new StreamWriter(server)) { while (true) { string message = reader.ReadLine(); if (string.IsNullOrEmpty(message)) break; //Handle potential termination string reversedMessage = new string(message.Reverse().ToArray()); writer.WriteLine(reversedMessage); writer.Flush(); } } } });</code>
クライアント (アプリケーション A)
NamedPipeClientStream
を使用して作成されます。クライアント コード例:
<code class="language-csharp">using (var client = new NamedPipeClientStream(".", "MyPipe", PipeDirection.InOut)) { client.Connect(); using (var reader = new StreamReader(client)) using (var writer = new StreamWriter(client)) { while (true) { Console.WriteLine("Enter message (or leave blank to exit):"); string input = Console.ReadLine(); if (string.IsNullOrEmpty(input)) break; writer.WriteLine(input); writer.Flush(); Console.WriteLine($"Received: {reader.ReadLine()}"); } } }</code>
コミュニケーションプロセス
アプリケーション A は、アプリケーション B によって開始された名前付きパイプ サーバーに接続します。メッセージはそれぞれのチャネルを通じて交換されます。 たとえば、アプリケーション A が「Hello World」を送信すると、アプリケーション B はそれを「dlroW olleH」に反転して送り返します。 アプリケーション A では、この逆のメッセージが表示されます。 このループは、アプリケーション A が空のメッセージを送信して終了を通知するまで続きます。
以上が名前付きパイプを使用すると、C# コンソール アプリケーションのプロセス間通信をどのように促進できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。