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

时间:2015-08-24 08:47:28

标签: c# named-pipes interprocess

我需要在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会发生什么?

1 个答案:

答案 0 :(得分:3)

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