我正在构建一个UDP聊天应用程序.是否安全地通过c套接字发送C结构并在另一端发送memset接收数据?struct中的所有数据都使用memset进行空值,因此我假设结构的大小始终是常量.我可能遇到什么问题?
更有经验的程序员如何接近这个?
小智 6
是的,它是安全的但我们应该首先注意这一点.如果您在不同的平台之间传递它,那么您可能会遇到问题,然后您需要担心字节排序/打包(可能还有许多其他问题).话虽如此,如果您不知道如何做到这一点,那么假设您将struct按照您发送的顺序可靠地接收它是不安全的.
无论你如何做,都要对它进行单元测试.编译器和平台在这些方面变化很大,所以不要盲目地假设它是一致的.
编译器可能会随心所欲地改变结构对齐(例如,出于性能原因).要求一些限制通常是编译器特定的,尽管MSVC和gcc(通过扩展)支持这一限制
#pragma pack(push, 1)
struct Foo {
// ..
};
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)
这迫使它在1字节边界上对齐,因此没有布尔值.
如果您想完全符合要求,请自行序列化每个字段.这真的不是那么多工作.
如其他人所提到的,你还必须处理字节序.
| 归档时间: |
|
| 查看次数: |
1360 次 |
| 最近记录: |