NamedPipeServerStream 和 WaitForConnection 方法

Posted

技术标签:

【中文标题】NamedPipeServerStream 和 WaitForConnection 方法【英文标题】:NamedPipeServerStream and WaitForConnection method 【发布时间】:2011-10-20 18:37:49 【问题描述】:

在使用NamedPipeServerStream 类时让我烦恼的是,对于每个传入连接,我需要创建新对象并调用它的方法WaitForConnection

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

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

但是当我这样做时,我会收到消息

流已断开连接。

有什么建议吗?

【问题讨论】:

【参考方案1】:

如果您想使用 NamedPipeServerStream,您需要使用它为您提供的编程模型,这就像因为它将底层 Windows 句柄包装到命名管道内核对象。您不能像尝试那样使用它,因为命名管道句柄不是这样工作的。

如果您真的想在单个线程上一次处理一个连接,请将您的循环翻过来:

while (true)

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

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

【讨论】:

以上是关于NamedPipeServerStream 和 WaitForConnection 方法的主要内容,如果未能解决你的问题,请参考以下文章

NamedPipeServerStream/NamedPipeClientStream 包装器

为啥我的 NamedPipeServerStream 不等待?

异步使用 NamedPipeServerStream 和 NamedPipeClientStream

NamedPipeServerStream/async 可靠断开问题

在字节模式和异步中重用 NamedPipeServerStream 的正确方法

无法通过 NamedPipeServerStream 和 NamedPipeClientStream 获取字符串数据