使用 UDP 发送和接收结构(WinSock & C++)?

Sending and receiving structs using UDP (WinSock & C++)?

本文关键字:WinSock C++ 结构 UDP 使用      更新时间:2023-10-16

我有两个程序。我需要其中一个发送数据,另一个接收数据。

我有一些代码是希望通过网络发送一个结构体。

然而,我甚至不知道它是否正常工作,因为我不知道如何编写接收程序来接收结构体并将接收到的数据传递到要操作的局部结构体中。

这是我用来发送的代码,如果它有助于任何

gamePacket.PplayerX = userSprite.x;
gamePacket.PplayerY = userSprite.y;
gamePacket.Plives = lives;
gamePacket.Pstate = state;
for(int z=0;z<8;z++)
{
    gamePacket.PenemyX[z] = enemySprite[z].x;
    gamePacket.PenemyY[z] = enemySprite[z].y;
}   
char Buffer[sizeof(gamePacket)];
UDPSocket.Send(Buffer);

结构体叫做Packet, gamePacket是它的一个实例。我被困住的是:

  1. 是我张贴的代码,甚至发送结构
  2. 如何在接收程序中接收结构体,以便使用其中的数据。
  1. 它不是发送,你只是声明了一个缓冲区。要寄出去,你需要填满它。此外,你使用sizeof的方式是错误的,它可能不会返回所有字段的正确大小,你应该计算它们。

  2. 当你收到所有你做相反的,你分配一个结构体并填充它使用偏移

如果你需要例子就问。但是学习就是做研究,所以我认为朝着正确的方向推动就足够了。(这方面有上千个例子)

Ps:你可以使用指针+偏移量,因为结构体的内存是挨个排列的。它是内存块,就像数组一样。

编辑;这个链接就是你需要的:通过C中的套接字传递一个结构编辑:使用指针的例子:编辑:这是c#还是C/c++ ?我很抱歉,如果是这样,把例子改为C/c++;)'

struct StructExample
{
    int x;
    int y;
};
int GetBytes(struct* Struct, void* buf)
{
        //Access the memory location and store
        *(int*)(buf + 0) = Struct->x;
        *(int*)(buf + sizeof(int)) = Struct->y;
    return sizeof(Struct->x) + sizeof(Struct->y)
}

Ps:我用手机打的,我不能100%肯定它能编译/工作。

在c和c++中可以使用以下代码:

struct StructExample
{
    int x;
    int y;
};
struct StructExample a;
a->x = 1;
a->y = 2;
send(FSocket, &a, sizeof(a), 0);