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

时间:2013-01-09 20:56:02

标签: c++ struct udp winsock

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

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

但是,我甚至不知道它是否正常工作,因为我不知道如何编码接收程序来接收结构并将它接收的数据传递给本地结构进行操作。

以下是我用来发送的代码,如果它可以帮助任何

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. 如何在接收程序中接收结构,以便我可以使用其中的数据。

2 个答案:

答案 0 :(得分:1)

  1. 它不发送,你只声明一个缓冲区。要发送它你需要填写它。另外你使用sizeof的方式是错误的,它可能不会返回所有字段的正确大小,你应该计算它们。

  2. 当您收到所有相反的内容时,您会分配一个结构并使用ofsets填充它

  3. 如果您需要示例,请询问。但是学习正在进行研究,所以我认为正确的方向是推动。 (这里有一千个例子。)

    Ps:你可以使用指针+偏移量,因为结构的内存是彼此相邻的。它是内存块,就像一个数组。

    EDIT;此链接是您所需要的:Passing a structure through Sockets in 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%肯定它编译/工作。

答案 1 :(得分:0)

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

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