ベクトルは、ベクトルの内部データが実際に保存されている場所を指している可能性がある独自の種類のデータで表されているように見え、アクセス方法がわからないため、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() またはベクターの内容を確認しようとすると、サーバーがクラッシュするか、ガベージ データが返されます。前に言ったように、これは構造体のベクトルが実際にはポインターであるためだと思いますが、生データを送信して再構築する方法を知っている人はいますか? ありがとう。