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

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

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

===============>>#1 票数:4

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

===============>>#2 票数:2

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

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

请记住,“过早优化是所有邪恶的根源。”

===============>>#3 票数:2

正如@EricZ建议的那样,在你的数据被破坏的情况下存在很多极端情况。 我建议使用库来打包/解包数据,例如Protobuf

  ask by wei translate from so

未解决问题?本站智能推荐: