1. ホーム
  2. c#

[解決済み] 名前付きパイプの例

2022-05-11 09:53:42

質問

IPC/Named Pipes の使用方法を説明する、シンプルで動作に必要最低限のテストアプリケーションはどのように書けばよいのでしょうか。

例えば、プログラム 1 がプログラム 2 に "Hello World" と言い、プログラム 2 がメッセージを受け取ってプログラム 1 に "Roger That" と返すようなコンソールアプリケーションはどのように書けばよいのでしょうか。

どのように解決するのですか?

using System;
using System.IO;
using System.IO.Pipes;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            StartServer();
            Task.Delay(1000).Wait();


            //Client
            var client = new NamedPipeClientStream("PipesOfPiece");
            client.Connect();
            StreamReader reader = new StreamReader(client);
            StreamWriter writer = new StreamWriter(client);

            while (true)
            {
                string input = Console.ReadLine();
                if (String.IsNullOrEmpty(input)) break;
                writer.WriteLine(input);
                writer.Flush();
                Console.WriteLine(reader.ReadLine());
            }
        }

        static void StartServer()
        {
            Task.Factory.StartNew(() =>
            {
                var server = new NamedPipeServerStream("PipesOfPiece");
                server.WaitForConnection();
                StreamReader reader = new StreamReader(server);
                StreamWriter writer = new StreamWriter(server);
                while (true)
                {
                    var line = reader.ReadLine();
                    writer.WriteLine(String.Join("", line.Reverse()));
                    writer.Flush();
                }
            });
        }
    }
}