两个C#软件通过IPC管道通信

发布于:2024-04-26 ⋅ 阅读:(27) ⋅ 点赞:(0)

Server端

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

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            Task serverTask = Task.Run(() =>
            {
                using (NamedPipeServerStream serverPipe = new NamedPipeServerStream("mypipe", PipeDirection.InOut))
                {
                    Console.WriteLine("Server: Waiting for connection...");
                    serverPipe.WaitForConnection();
                    Console.WriteLine("Server: Client connected.");

                    using (var reader = new StreamReader(serverPipe))
                    {
                        while (true)
                        {
                            string message = reader.ReadLine();
                            if (message == "exit")
                                break;

                            Console.WriteLine($"Server received: {message}");
                        }
                    }
                }
            });

            Task.WaitAll(serverTask);
        }
    }
}

Client端

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

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            Task clientTask = Task.Run(() =>
            {
                using (NamedPipeClientStream clientPipe = new NamedPipeClientStream(".", "mypipe", PipeDirection.InOut))
                {
                    Console.WriteLine("Client: Connecting to server...");
                    clientPipe.Connect();
                    Console.WriteLine("Client: Connected.");

                    using (var writer = new StreamWriter(clientPipe))
                    {
                        writer.AutoFlush = true;

                        for (int i = 0; i < 5; i++)
                        {
                            string message = $"Message {i}";
                            Console.WriteLine($"Client sending: {message}");
                            writer.WriteLine(message);
                            Task.Delay(1000).Wait();
                        }

                        // Signal the server that we're done
                        writer.WriteLine("exit");
                    }
                }
            });

            Task.WaitAll(clientTask);
        }
    }
}