我正在研究使用命名管道的MSDN示例:
服务器很容易检测客户端何时断开连接,并创建命名管道的实例。但是,我不知道服务器是如何知道客户端在发送来自客户端的任何数据之前连接到管道的。
服务器可以在客户端发送任何数据?之前检测连接的客户端。
如果服务器在客户端断开连接之前调用DisconnectNamedPipe,客户端也会断开连接吗?服务器可以在不与客户端协商的情况下将客户端从管道中断开?
发布于 2010-06-23 20:14:29
我不确定我是否明白挂电话的事。服务器调用ConnectNamedPipe以等待客户端连接。不需要发送数据。也不能发送它,在连接客户端之前,您不能发出ReadFile。请注意,SDK示例也使用此方法。
如果服务器不正常地断开连接(没有用某种消息通知客户端以便关闭管道末端),那么客户机将得到一个错误,ERROR_PIPE_NOTCONNECTED (我认为)。对于正常的关机,几乎没有理由这样做,当管道服务器进程意外崩溃和烧毁时,您需要做一些合理的事情。
注意,由于管道的异步特性,管道很难得到正确的处理。获取实际上不是问题的错误是很常见的,您需要处理它。我的管道代码处理以下错误:
发布于 2012-07-05 16:19:02
当客户端在WaitNamedPipe()或/和CreateFile()调用期间获得WaitNamedPipe()错误时,服务器无法正常工作。此错误代码意味着服务器上没有指定名称的管道。您应该在ConnectNamedPipe()调用之后立即在服务器上创建新管道,以避免出现此问题。
https://stackoverflow.com/questions/3104838
复制相似问题