我创建了一个带有以下标志的命名管道:
从服务器端我正在调用ConnectNamedPipe并等待客户端连接。
从客户端我调用CallNamedPipe连接到服务器并写入长度为N的数据。
在服务器端:
问题:
我想过引入自定义标头来指示消息本身的缓冲区长度,但这听起来很多变化。
有没有更好更可靠的方法来获取从管道中读取数据的长度?
答案 0 :(得分:6)
命名管道可以获得大量的竞争条件。您必须在代码中处理它们。可能性:
答案 1 :(得分:1)
听起来你想要Aynschronous I / O.只需让Windows在数据可用时通知您,然后查看当天。
答案 2 :(得分:0)
在任何情况下,在头中都有一个数据包大小是一个好主意,使协议更少依赖于传输层。 或者,如果客户端发送数据并关闭管道,则可以使用ReadFile累积到缓冲区中,直到EOF。