【问题标题】:Exception thrown by BeginWaitForConnection when reusing a NamedPipeServerStream in .NET 4 after client disconnects客户端断开连接后在 .NET 4 中重用 NamedPipeServerStream 时 BeginWaitForConnection 引发的异常
【发布时间】:2011-05-18 13:43:45
【问题描述】:

我正在尝试使用 NamedPipeServerStream 在 .Net 4 中创建命名管道服务器。我正在使用 BeginWaitForConnection 等待连接,以便在服务器关闭时中止等待下来。

对于第一个客户端来说一切正常 --- 连接被确认,数据被接收,响应被发送 OK。但是,在客户端断开连接后,一切都会中断。我再次打电话给BeginWaitForConnection 以等待新的连接,但这是抛出一个IOException 说“管道坏了”。

如何在同一管道上等待第二个客户端?

【问题讨论】:

    标签: .net named-pipes


    【解决方案1】:

    创建一个NamedPipeServerStream 的新实例,指定相同的管道,然后调用BeginWaitForConnection

    即不要尝试为不同的客户端重用 NamedPipeServerStream 对象:一个实例应该服务于一个客户端连接/对话,然后被释放。

    另见Multithreaded NamePipeServer in C#

    【讨论】:

      【解决方案2】:

      使用单个客户端/服务器配置时的另一种方法是在客户端断开连接以清理管道时Disconnect 管道流。这允许重复使用管道。当您再次调用BeginWaitForConnection 时,它将开始接受连接。

      while (true) 
      {
          pipe.BeginWaitForConnection();
          // read and write to pipe
          // catch exception when client disconnects
          pipe.Disconnect();
      }
      

      【讨论】:

      • 您还必须小心不要处置/关闭与命名管道流一起使用的流读取器/写入器,因为它们将关闭基础流,然后就无法重用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 2022-10-06
      • 2012-03-19
      • 2023-03-30
      相关资源
      最近更新 更多