NamedPipeServerStream and WaitForConnection method

本文关键字:method WaitForConnection and NamedPipeServerStream | 更新日期: 2023-09-27 18:11:58

当使用类NamedPipeServerStream时,让我感到困扰的是,对于每个传入的连接,我需要创建新对象并调用它的方法WaitForConnection

我想做的是创建一个NamedPipeServerStream对象,然后在while循环中反复调用上述方法,如下所示:

NamedPipeServerStream s2;
using (s2 = new NamedPipeServerStream("pipe_name", PipeDirection.InOut)) {
    while(true) {
        ss2.WaitForConnection();
        //do something here
    }
}

但是当我这样做的时候,我得到消息

流已断开连接。

任何建议吗?

NamedPipeServerStream and WaitForConnection method

如果你想使用NamedPipeServerStream,你需要使用它给你的编程模型,这是因为它正在包装一个底层的Windows句柄到一个命名管道内核对象。你不能像你想的那样使用它,因为这不是命名管道句柄的工作方式。

如果你真的想在一个线程中一次处理一个连接,把你的循环从里面翻出来:

while (true)
{
  using (NamedPipeServerStream ss2 = new NamedPipeServerStream("pipe_name", PipeDirection.InOut)
  {
    ss2.WaitForConnection();
    // Stuff here
  }
}  

更可能的情况是,您需要一个多线程管道服务器来并行处理连接。如果是这样,有多种方法——搜索其他so问题会出现几种模式,例如这里或这里。