gpt4 book ai didi

c - 套接字中的填充结构

转载 作者:可可西里 更新时间:2023-11-01 02:54:40 26 4
gpt4 key购买 nike

我想在 Windows 套接字中发送结构。我使用 TCP 协议(protocol)。

例如我有这个结构:

typedef struct  headerLobby
{
unsigned nbGames;
} head;

我发送我的结构:

char buff[DEFAULT_BUFFER_LENGTH]; //DEFAULT_BUFFER_LENGTH = 512
headerLobby header;

header.nbGames = 1;
memcpy(buff, &header, sizeof(headerLobby));
send(ClientSocket, buff, sizeof(headerLobby, 0);

我收到数据:

headerLobby header;

char recvbuf[DEFAULT_BUFFER_LENGTH];
memset(recvbuf, 0, DEFAULT_BUFFER_LENGTH);
int iResult = recv(ConnectSocket, recvbuf, DEFAULT_BUFFER_LENGTH, 0);

memcpy(&header,recvbuf, sizeof(headerLobby));

但是当我打印 header.nbrGames 时,我没有得到很好的值(value)。

客户端和服务器都是windows 8 64bits,处理器是intel x64。我不明白我的代码有什么问题。

最佳答案

你能转储你正在尝试发送和正在接收的十六进制数据吗?使用 wireshark/类似工具在发送/接收端进行数据包捕获,并查看您在网络上看到的数据包数据是否符合您的预期。

一些最佳实践,

  1. 始终使您的结构保持对齐大小。如有必要,在结构的末尾使用填充。如果您不这样做,编译器将自动保持结构大小对齐,这将导致您在线上发送的数据可能与您尝试发送的数据不匹配。

  2. 在线上发送任何内容之前,请按网络字节顺序保存数据。您可以使用 htonl 进行转换。它可能不会在这里引起问题,因为拱门是相同的并且您正在处理数据等。但它可能会导致可移植代码出现问题。

关于c - 套接字中的填充结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19870469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com