0

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

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

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

这是我用来发送的代码,如果它有帮助的话

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

2 回答 2

1
  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% 确定它可以编译/工作。

于 2013-01-09T21:06:16.483 回答
0

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

struct StructExample
{
    int x;
    int y;
};
struct StructExample a;
a->x = 1;
a->y = 2;
send(FSocket, &a, sizeof(a), 0);
于 2014-04-13T19:36:13.057 回答