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

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

最佳答案

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

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

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

Ps:可以使用指针+偏移量,因为struct的内存是挨着布局的。它是内存块,就像数组一样。

编辑;这个链接是你需要的: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% 确定它能编译/工作。

关于c++ - 使用 UDP(WinSock 和 C++)发送和接收结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14246311/

相关文章:

java - 获取由 JNA 中的参数返回的不透明结构

c# - 修改从 C# 传递给 DLL 的结构值

c++ - 使用 MSVC++ 9 进行 C 编程的建议

c++ - c++上函数映射的问题

C++ 文件写入包括字符串的内存地址而不是内容

c - C语言如何让客户端知道服务器已经发送完数据?

security - 防火墙如何知道传输是 UDP 还是 TCP?

c++ - 无法编译包含 "if constexpr"的函数模板实例化

c++ - struct hack - 大小为零的数组

java - 为什么这两个字符串不相等?