gpt4 book ai didi

c++ - C 套接字发送/接收缓冲区类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:09 25 4
gpt4 key购买 nike

我正在使用 unix 套接字,当我的缓冲区是 char 类型(即发送和接收字符串)时,我可以 send() 和 recv() 数据。我使用了 Beej 的套接字指南,所使用的示例用于发送/接收字符串。

现在我想在一条消息中发送/接收不同类型的数据。
例如,假设在一条消息中我想发送一个整数、一个字符串、一个 double 和一个 float 。我应该怎么做呢?更具体地说,我的消息“缓冲区”应该是什么类型?

发送和接收的原型(prototype):

int recv (int socket, void *buffer, size_t size, int flags)
int send (int socket, void *buffer, size_t size, int flags)

我对 C/C++ 和指针没有太多经验,所以这可能是一个菜鸟问题。

如果有人能指导我正确的方向,我将不胜感激。谢谢

最佳答案

除非您计划发送大量数据(数千字节)并且经常发送(每秒几个数据包),否则我建议您将数据转换为字符串(也称为“序列化数据”)并以这种方式传递。它有几个好处:

  1. 它是可移植的 - 无论 intfloatdouble 的大小如何 - 或者结构中字段之间的填充是什么,它都可以工作.
  2. 调试方便(看数据说对不对)
  3. 发送/接收机器的字节顺序是什么并不重要。

另一方面,发送二进制数据很复杂,因为您需要担心数据字段的各个大小及其内部表示(字节顺序,double 如何以二进制表示,填充结构中的数据字段,不能传递指针等)。唯一的好处是二进制数据更加紧凑。但这仅在您有很多千字节和/或每秒发送大量数据包时才重要。

关于c++ - C 套接字发送/接收缓冲区类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15168829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com