在不同平台上通过管道传输数据的最佳和安全方式

时间:2011-09-07 07:30:51

标签: c++ c networking pipe named-pipes

目前我遇到的问题是我将缓冲区对象从x64 arch传递到x86 arch。该对象还包含一些指针值,在x64中为8个字节,x86上的相同指针大小为4个字节。现在,当我通过管道传输对象时,它的大小比x86平台对同一对象所期望的要多一些(因为这里的指针大小较小)。我可以从这个论坛中的类似帖子中了解到我可能需要使用序列化,但我不知道我以前从未使用过序列化。序列化会解决这个问题吗?我正在使用C ++与GCC编译器。我希望该产品适用于所有拱门(ia64,x64或x86)。

3 个答案:

答案 0 :(得分:4)

指针是本地运行程序*中内存位置的地址。将它发送到另一个程序是没用的,对于在另一台机器上运行的程序更没用,如果另一台机器的架构不同则更加无用。

在上下文中使用序列化意味着发送指针指向的内容,而不是发送无意义的指针本身。

要实现跨架构数据发送,更容易使用文本进行数据传输。大多数(如果不是全部)广泛使用的跨架构协议都使用文本:HTTP,IMAP,IRC ......

*:我使用program代替process

答案 1 :(得分:2)

boost serialization专门用于:

  

在这里,我们使用术语“序列化”来表示可逆性   解构一组任意C ++数据结构到   字节序列。这样的系统可以用来重建一个   另一个程序上下文中的等效结构取决于   上下文,这可能用于实现对象持久性,远程   参数传递或其他设施。在这个系统中我们使用这个术语   “archive”表示此字节流的特定呈现。   这可以是二进制数据,文本数据,XML或其他文件   由该库的用户创建。

顺便说一下,使用POD结构,并确保使用特定类型的数据类型。为此使用预定义类型(例如,看看here

答案 2 :(得分:1)

http://code.google.com/apis/protocolbuffers/

  

协议缓冲区是Google的语言中立,平台中立,可扩展的机制,用于序列化结构化数据 - 想想XML,但更小,更快,更简单。您可以定义数据的结构化时间,然后可以使用特殊生成的源代码轻松地在各种数据流中使用各种语言(Java,C ++或Python)编写和读取结构化数据。

在x86 / 64上为我工作,手臂