我在通过 enet 连接发送向量时遇到问题,因为向量似乎用它们自己的数据类型表示,可能指向向量内部数据的实际存储位置,我不知道如何访问它。
客户端和服务器都有这样的数据结构:
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->type 等于 5,这是正确的,但是当我尝试检查 size() 或向量的任何内容时,它要么使服务器崩溃,要么提供垃圾数据。正如我之前所说,我认为这是因为结构中的向量实际上是一个指针,但是有人知道如何传输和重新组装原始数据吗?谢谢。