首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用重叠I/O检测到命名管道服务器的客户端连接?

如何使用重叠I/O检测到命名管道服务器的客户端连接?
EN

Stack Overflow用户
提问于 2010-06-23 19:23:59
回答 2查看 6.2K关注 0票数 2

我正在研究使用命名管道的MSDN示例:

  • 使用重叠I/O命名管道服务器
  • 命名管道客户端

服务器很容易检测客户端何时断开连接,并创建命名管道的实例。但是,我不知道服务器是如何知道客户端在发送来自客户端的任何数据之前连接到管道的。

服务器可以在客户端发送任何数据?之前检测连接的客户端。

如果服务器在客户端断开连接之前调用DisconnectNamedPipe,客户端也会断开连接吗?服务器可以在不与客户端协商的情况下将客户端从管道中断开?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-23 20:14:29

我不确定我是否明白挂电话的事。服务器调用ConnectNamedPipe以等待客户端连接。不需要发送数据。也不能发送它,在连接客户端之前,您不能发出ReadFile。请注意,SDK示例也使用此方法。

如果服务器不正常地断开连接(没有用某种消息通知客户端以便关闭管道末端),那么客户机将得到一个错误,ERROR_PIPE_NOTCONNECTED (我认为)。对于正常的关机,几乎没有理由这样做,当管道服务器进程意外崩溃和烧毁时,您需要做一些合理的事情。

注意,由于管道的异步特性,管道很难得到正确的处理。获取实际上不是问题的错误是很常见的,您需要处理它。我的管道代码处理以下错误:

  • ConnectNamedPipe:连接竞赛中的ERROR_PIPE_CONNECTED,忽略
  • FlushFileBuffers:在管道关闭时进行竞赛,忽略所有错误
  • WaitNamedPipe: ERROR_FILE_NOT_FOUND如果超时过期,则转换为WAIT_TIMEOUT
  • CreateFile: ERROR_PIPE_BUSY如果另一个客户端成功地抢占了管道,重复
票数 3
EN

Stack Overflow用户

发布于 2012-07-05 16:19:02

当客户端在WaitNamedPipe()或/和CreateFile()调用期间获得WaitNamedPipe()错误时,服务器无法正常工作。此错误代码意味着服务器上没有指定名称的管道。您应该在ConnectNamedPipe()调用之后立即在服务器上创建新管道,以避免出现此问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3104838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档