通过网络连接发送向量

时间:2013-12-27 23:45:37

标签: c++ vector enet

我遇到了通过enet连接发送向量的问题,因为向量似乎用他们自己的数据表示,可能指向向量内部数据实际存储的位置,我无法弄清楚如何访问它。 / p>

客户端和服务器都有这种数据结构:

typedef struct {
    unsigned int type;
    vector<int> content;
} packetFormat;

数据正在发送到服务器,如下所示:

packetFormat var;
var.type = 5; //sizeof is 4 bytes
var.content = {1, 3, 5, 20, 10, 50, 10, 10}; //sizeof is 16 bytes regardless of data
//total 20 bytes, 21 counting \0 character
ENetPacket* packet = enet_packet_create((char*)&var, sizeof(var) + 1, ENET_PACKET_FLAG_RELIABLE);
enet_host_broadcast(client, 0, packet);

然后,服务器接收数据并将其转换为相同的结构:

//receives 21 bytes, which is correct
packetFormat* var = (packetFormat*)(event.packet->data);

然后检查变量,var-&gt; type等于5,这是正确的但是当我尝试检查size()或向量的任何内容时,它会崩溃服务器或提供垃圾数据。正如我之前所说,我认为这是因为结构中的向量实际上是一个指针,但有没有人知道如何传输和重新组装原始数据?感谢。

1 个答案:

答案 0 :(得分:1)

如果理解你的代码正在做什么,那就简单地序列化struct,好像它没有间接性,比如固定宽度数据。

向量内部有一个指向它的数据的指针,因此序列化结构中的vector只发送指针的值,而不是它指向的实际数据。

此外,绝对没有任何保证,sizeofvector的布局在主机和客户端大小上是相同的。

如果你想发送vector,我会考虑使用一个理解向量的C ++网络库,例如Boost.Asio。