.net 命名管道的用法。多个客户端、一台服务器、多个并行请求

.net 命名管道的用法。多个客户端、一台服务器、多个并行请求,.net,named-pipes,.net,Named Pipes,我正在尝试在.NET中实现一个命名管道服务器。客户端将是C++。发送的数据的性质与问题无关 我的第一个朴素实现看起来像: using (NamedPipeServerStream stream = new NamedPipeServerStream(PipeName, PipeDirection.InOut,

我正在尝试在.NET中实现一个命名管道服务器。客户端将是C++。发送的数据的性质与问题无关

我的第一个朴素实现看起来像:

using (NamedPipeServerStream stream = 
                new NamedPipeServerStream(PipeName,
                                          PipeDirection.InOut, 
                                          numberOfListeners,
                                          PipeTransmissionMode.Message))
{
     while (true)
     {
          try
          {
              stream.WaitForConnection();

              var request = ReadRequest(stream);

              var reply = Process(request);
              WriteReply(stream, reply);
              stream.WaitForPipeDrain();
          }
          catch (Exception ex)
          {
              //TO DO: log
          }
     }
 }
我接近这一点了吗

当两个客户端同时打开一个连接时会发生什么情况

它们是否共享同一个流,数据是否会混合

我怎样才能避免这种情况


关于这方面的任何想法或资源都会有所帮助。我对这个主题很陌生。

您希望服务器能够处理并发的客户端连接,并且每个客户端都在不同的管道实例上连接到服务器,而不是像目前的代码那样在一个管道实例上做任何事。客户端完成后,您希望释放与该客户端对话时使用的管道实例,而不是重用它

给出了实现此目的的一种方法的伪代码概要

还请注意,在消息模式下,您需要在循环中读取管道,直到
IsMessageComplete
属性变为
true
。这是保证你得到每一条完整信息的唯一方法。还要注意,消息模式中的“消息”是指发送方在对管道的一次
Write
调用中写入的字节流


客户端流不能相互混淆:管道实例只有两个端,客户端和服务器。

由于没有其他人对此做出响应,而且您的回答对我来说已经足够好了,我将接受正确的答案。谢谢我设法以正确的方式实现了我的服务器。