c++ IPC 在 Windows 上通过 streambuf

Posted

技术标签:

【中文标题】c++ IPC 在 Windows 上通过 streambuf【英文标题】:c++ IPC through streambuf on Windows 【发布时间】:2011-09-10 13:41:19 【问题描述】:

我有一个消息对象序列化为二进制数据流(它可以是任何 std::streambuf),我想将它传输到另一个进程。关键是,服务器应用程序必须处理许多客户端,连接必须是异步的(因为有多个客户端)和双向的(在后台它可能由两个独立的连接实现)。消息长度可变,应该排队。我应该为此选择哪种 IPC 方法?有没有简单的方法通过应用程序传输流缓冲区?速度不是关键,但最好不要阻止应用程序太长时间。任何事情都将在 Windows 下本地完成(我的目标是 XP 和更新版本),不需要网络支持。

我还需要监听传入连接的可能性。服务器应该自动检测新连接,进行一些握手并接受,如果它是兼容的。我知道我需要自己写很多我提到的东西。反正一定是可以实现的,当然越简单越好。

【问题讨论】:

【参考方案1】:

您可以在 Windows 中使用命名管道。 请参阅 MSDN 参考:http://msdn.microsoft.com/en-us/library/aa365150%28v=vs.85%29.aspx

您还可以将其设置为全双工(双向)和异步。如果您熟悉 Windows 上的文件 I/O API,那么它应该很容易使用。

【讨论】:

没有。 std::fstream 基于 c++ 标准,而命名管道是操作系统特定的概念。您将不得不使用 MS API。如果你坚持跨平台代码,可以试试boost IPC。 我需要更具体的信息。由于我需要多个客户端,我应该为每个客户端创建一个管道吗?如何使用服务器应用程序创建“握手”? MSDN 在这里不清楚。我需要能够连接到服务器,它应该会自动检测连接请求并将其添加到客户端池中。

以上是关于c++ IPC 在 Windows 上通过 streambuf的主要内容,如果未能解决你的问题,请参考以下文章

ONVIF协议网络摄像机(IPC)客户端程序开发使用ONVIF框架代码(C++)生成静态库04-->Windows

Thrift IPC over 管道传输 (Windows)

哪种 Windows IPC 方法更适合短命令?

2017-2018-1 20155317 IPC

如何在 Windows 10 上使用 IPC::Run 捕获超时异常?

IPC 机制