通过服务器和客户端之间的网络传递原始结构

时间:2014-04-21 05:47:37

标签: c

服务器和客户端软件都使用GCC编译,并在Linux上运行。但是,它们运行在不同的平台上。

如果已经处理了endianess,如果我们为每个成员使用固定大小的stdint类型,那么传递结构raw是否安全?没有特别注意对齐/填充的意思。

编辑: 我们控制服务器和客户端软件。它们是由我们使用相同的gcc版本编译的,即服务器和客户端之间没有不同的包属性。

3 个答案:

答案 0 :(得分:4)

没有。即使您使用固定大小的整数类型,服务器和客户端上的不同版本的GCC仍然可能不同意相邻结构成员之间的填充,并且可能是整个结构的对齐。例如。服务器上的GCC使用单字节填充,而客户端上的GCC不使用。

答案 1 :(得分:2)

这就是XDR的发明。或者,如果数据量很小,请使用XML或JSON。

在生产系统中,即使用于网络传输的机器/ OS /语言/补丁级特定字节流是使用当今技术实现目标的唯一可能方式,您必须< / strong>对数据流编码有正式定义。而且你必须在系统的整个生命周期中使用它。 特别是如果用于网络传输的机器/ OS- /语言/补丁级特定字节流是用当今技术实现目标的唯一可能方式,那么必须对数据流编码有正式定义。

请记住,“过早优化是万恶之源。”

答案 2 :(得分:2)

正如@EricZ建议的那样,很多极端情况下您的数据都已损坏。我建议使用一个库打包/解包数据,例如Protobuf