虽然我已经阅读了here文件,但它对我来说仍然没有意义:
数据作为流从管道中读取 消息。此模式只能是 如果PIPE_TYPE_MESSAGE也是 指定。
答案 0 :(得分:5)
在BYTE模式下,您需要确定数据的分离,以便在接收端对其进行解码。在MESSAGE模式下,API将为您执行此操作。当您阅读另一侧的消息时,您将拥有整个数据块(消息)。
在这两种情况下,如果要混合通过管道发送的数据类型,您仍然需要一些标题数据来包装您的消息/数据以了解它是什么。
编辑:文档指出了一个非常明确的使用此API的客户端/服务器示例以及两者之间的MESSAGE模式。
http://msdn.microsoft.com/en-us/library/aa365592%28v=VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/aa365588%28v=VS.85%29.aspx
答案 1 :(得分:1)
http://msdn.microsoft.com/en-us/library/aa365605.aspx上解释了PIPE_TYPE_BYTE
和PIPE_TYPE_MESSAGE
类型模式之间的差异:
类型模式
管道的类型模式决定了如何 数据被写入命名管道。数据 可以通过命名传输 管道作为字节流或作为 消息流。管道服务器 调用时指定管道类型 CreateNamedPipe用于创建实例 一个命名管道。类型模式必须 对于a的所有实例都是相同的 管。
要创建字节类型的管道,请指定 PIPE_TYPE_BYTE或使用默认值 值。数据将写入管道 作为字节流和系统 没有区分 用不同的写入写的字节 操作
要创建消息类型管道,请指定 PIPE_TYPE_MESSAGE。系统对待 每次写入时写入的字节数 作为消息操作管道 单元。系统始终执行写入 对消息类型管道的操作就好像 已启用直写模式。
如果要编写与管道相关的数据流,则应使用PIPE_TYPE_BYTE
类型模式。然后,您可以在WriteFile
中写入管道缓冲区中的任何数据,并在另一侧读取ReadFile
。数据的确切发送方式对您来说并不重要。某些WriteFile
操作的数据可以作为一个数据块传输。
如果使用PIPE_TYPE_MESSAGE
类型模式,则每次写入操作都会跟随数据传输,因为管道中的写入将被解释为发送消息。有一个特殊函数TransactNamedPipe
,它允许您向指定的命名管道写入消息并将消息读入单一网络操作。