我正在使用unix套接字,当我的缓冲区是char类型时(即发送和接收字符串),我可以发送()和recv()数据。我使用了 Beej 的套接字指南,所使用的示例用于发送/接收字符串。
现在我想在一条消息中发送/接收不同类型的数据。
例如,假设在一条消息中我想发送一个整数、一个字符串、一个双精度值和一个浮点值。
我该怎么做呢?更具体地说,我的消息“缓冲区”应该是什么类型?
发送和接收的原型:
int recv (int socket, void *buffer, size_t size, int flags)
int send (int socket, void *buffer, size_t size, int flags)
我对 C/C++ 和指针没有太多经验,所以这可能是一个菜鸟问题。
如果有人能引导我走向正确的方向,我将非常感激。
谢谢
除非您计划发送大量数据(数千字节)并且经常发送(每秒几个数据包),否则我建议您将数据转换为字符串(也称为“序列化数据”)并以这种方式传递。它有几个好处:
- 它是便携式的 - 无论尺寸如何,都可以使用
int
or float
or double
是 - 或者结构中字段之间的填充是什么。
- 调试起来很方便(看数据就知道对错了)
- 发送/接收机器的字节顺序并不重要。
另一方面,发送二进制数据很复杂,因为您需要担心数据字段的各个大小及其内部表示(字节顺序、如何double
以二进制表示,结构内数据字段的填充,不能传递指针等)。唯一的好处是二进制数据更加紧凑。但只有当您有很多千字节和/或每秒发送大量数据包时,这才重要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)