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