我需要通过C ++中的UDP连接发送数据包。我需要发送的第一条消息由两个32位整数和一个64位整数构成。将多个变量类型组合成一个准备好通过UDP连接发送的数据块的最佳方法是什么?
答案 0 :(得分:1)
这取决于您的网络要求。你关心字节序吗?如果你这样做,你不应该使用任何序列化,而应该使用关于字节序的安全序列。
通常,通过网络发送的每个类/结构都应该有特殊的方法或重载的运算符来流入和流出它们。最终你必须使用像hton / ntoh这样的宏/函数来传输基本类型,例如int,int64,float,double等。
更新:如果您的网络端点应用程序在不同的平台/编译器上运行,您可能有不同的int,long,short等大小。因此,在序列化时,您必须将整数转换为某些预定义类型并保证大小在所有支持的平台上都是一样的。
答案 1 :(得分:1)
我在C中手工编写了一个DNS解析器,结构确实是我做的方式。使用位字段指定每个部分的大小。有关位字段的更多信息:http://msdn.microsoft.com/en-us/library/ewwyfdbe.aspx
确保使用hton / ntoh来处理字节顺序。更多信息在这里; http://www.beej.us/guide/bgnet/output/html/multipage/htonsman.html
事实上,仔细阅读beej的指南 - 那里有很多有用的信息!