发送结构槽

时间:2018-04-22 13:12:09

标签: c++ server client winsock

在此之前,我想说标题不是问题。

我的问题是为什么你不能只发送结构的所有字节,然后将其转换为结构(让你在两面都定义了结构,这是有道理的。)

谢谢!

编辑:这是我目前的结构:

    struct COMPUTER_INFO
    {
        const char* Name;
        int Brightness;
        int Volume;
    }

我在想,您可以轻松计算所有内容的大小,然后通过send()发送。

2 个答案:

答案 0 :(得分:1)

Name是一个指针(包含一个地址),只对您计算机上的程序有意义。如果您将此结构作为字节发送,则接收程序将仅接收地址而不是包含该名称的字符。收到的地址也不会指向接收计算机内存中的有效位置。

BrightnessVolume ints - ints没有固定大小,它们是计算机的“自然”字大小(标准确实施加了一些限制) )。因此,发送和接收计算机上的sizeof(int)可能不同。也可能存在编码差异,例如大与小端。请参阅:https://en.wikipedia.org/wiki/Endianness

答案 1 :(得分:0)

一般来说你是对的。当然,您可以发送原始字节流。但是,您希望接收器如何识别此字节流中结构成员的位置?特别是,示例中的char *具有可变大小,因此这是不可能的。 我建议使用Boost serialization包。您可以找到详细的教程here。该包将负责“序列化”(将对象打包成字节流)和“反序列化”(从字节流构造对象)。它几乎对所有STL容器都很方便,并且可以轻松扩展为自定义类型。