如何在C#中正确使用命名管道 - 多个连接,服务器娱乐等

问题描述 投票:7回答:1

我需要在C#应用程序之间实现进程间通信。我决定使用命名管道并编写以下代码:

服务器

while (true)
{
    using (var server = new NamedPipeServerStream("some_pipe"))
    {
        server.WaitForConnection();
        using (var reader = new StreamReader(server))
        {
            string line = reader.ReadLine();
            MessageBox.Show(line);
        }
    }
}

客户

using (var client = new NamedPipeClientStream("some_pipe"))
{
    client.Connect();

    using (var writer = new StreamWriter(client))
    {
        writer.AutoFlush = true;
        writer.WriteLine(path);
        client.WaitForPipeDrain();
    }
}

我有以下问题:

  • 这个解决方案是否正确?您是否已经看到任何问题或错误?
  • 如果第二个客户端将尝试连接到此服务器,会发生什么?是否会等待第一个客户端完成或只是将其消息与另一个客户端的实例一起发送导致垃圾?
  • 我真的应该每次都创建另一个NamedPipeServerStream类的实例吗?如果我从while (true)循环移动它的结构,它给我一个例外“无法访问封闭的管道”。我怎么能避免呢?如果我无法避免它并且每次都应该重新创建这个对象,那么当客户端尝试连接它时,如果没有NamedPipeServerStream会发生什么?
c# named-pipes interprocess
1个回答
3
投票

这不行。连接到一个NamedPipeServerStream的多个客户端是不可用的功能。其名称为“... ServerStream”具有误导性。管道是1对1连接。对于许多客户端,您必须为多个服务器实例提供相同的管道。 This Code Project shows how to implement a Server Pipes and may help you

© www.soinside.com 2019 - 2024. All rights reserved.