gpt4 book ai didi

C++ UDP 在一个类中接收一个 vector

转载 作者:行者123 更新时间:2023-11-30 01:28:00 27 4
gpt4 key购买 nike

我的程序使用 UDP 在两个程序之间发送数据,效果很好,但是我在要发送的数据中添加了一个新 vector , vector 类型是另一个类,看起来像这样...

class Bullet: public Sprite
{
public:
float speed;
};

数据包...

typedef struct DataPacket
{
int ID; //Player ID
int elapsedTime; //Total elapsed player time
float x, y; //X & Y pos of player
std::vector<Bullet>* pBullets; //Vector containing all the players bullets
};

有没有办法正确发送这些数据?一旦服务器从客户端接收到数据,就无法对表达式求值,接收到的数据包中其他所有部分都是正确的。

基本上,服务器正在接收屏幕上子弹的位置数据,这些数据包含在这个 Bullet 类中以及一些其他项目中。

请注意:pBullet 从来都不是指针,但为了尝试找出问题所在,我将其更改为指针……但它从未解决问题

最佳答案

你不能这样做。 vector 是一个类,通常使用指向动态内存的内部指针实现,动态内存随着 vector 的增长而改变位置。

当您尝试通过转换整个结构来序列化 vector 时,您只是序列化指向保存 vector 内容的内存的指针,您不会获取内容本身,因为它不是该结构的一部分。

您必须逐个序列化 vector 中的所有项目,并在反序列化时逐个将它们添加回去。

请注意,您可以将项目符号的 vector 更改为结构内部的静态大小数组,然后它将在内存中连续,您可以序列化整个结构 - 您还可以将数组的最后一个元素设为一颗子弹的数组,然后为结构 size + (x-1)*sizeof(Bullet) 分配内存,允许您为添加的所有额外内存覆盖 1 的数组。这在内存中也是连续的,允许您很容易地序列化整个内存区域。

您还应该查看 htonl、ntohl、htons、ntohs 并开始对数据进行网络字节排序,如果您要通过网络发送数据以防止字节字节顺序成为其他一些问题您最终可能会使用的系统。

关于C++ UDP 在一个类中接收一个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8095950/

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