使用 UDP 发送和接收结构(WinSock & C++)?
Sending and receiving structs using UDP (WinSock & C++)?
我有两个程序。我需要其中一个发送数据,另一个接收数据。
我有一些代码是希望通过网络发送一个结构体。
然而,我甚至不知道它是否正常工作,因为我不知道如何编写接收程序来接收结构体并将接收到的数据传递到要操作的局部结构体中。
这是我用来发送的代码,如果它有助于任何
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是它的一个实例。我被困住的是:
- 是我张贴的代码,甚至发送结构
- 如何在接收程序中接收结构体,以便使用其中的数据。
-
它不是发送,你只是声明了一个缓冲区。要寄出去,你需要填满它。此外,你使用sizeof的方式是错误的,它可能不会返回所有字段的正确大小,你应该计算它们。
-
当你收到所有你做相反的,你分配一个结构体并填充它使用偏移
如果你需要例子就问。但是学习就是做研究,所以我认为朝着正确的方向推动就足够了。(这方面有上千个例子)
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);
相关文章:
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- WinSock Non-Blocking I/O
- 使用 winsock 接收 http 请求
- 如何查找 winsock.h 在 Visual Studio 中的包含位置
- 在Linux上交叉编译Windows应用程序时如何链接到Winsock?
- C++低吞吐量 winsock TCP 测试应用程序
- Winsock 数据不是从 IP 检索的,而是从普通 URL 检索的
- 错误:10035 Winsock发送
- 如何使用c++在winsock中从客户端向服务器发送大字符串
- 如何使用winsock在c++应用程序中实现安全套接字通信
- 如何为winsock的send()函数构造constchar*缓冲区
- C++WinSock选择本地接口进行连接
- 使用全局 IP 地址时,C++ winsock 2 应用程序中的代码是否必须更改?
- 使用 WinSock 处理多个用户
- Winsock本地客户服务器基准测试
- WinSock c++ inet_ntop始终显示 204.204.204.204(并且 accept() 没有失败)
- Winsock错误10022在听
- 致命错误:Winsock:没有这样的文件或目录
- 如何通过TCP/IP Winsock发送双型数据
- Winsock 400 错误请求,开放性