C++ 为什么接收到的缓冲区大小大于最初通过套接字发送的缓冲区大小?

C++ 为什么接收到的缓冲区大小大于最初通过套接字发送的缓冲区大小?,c++,winapi,networking,C++,Winapi,Networking,我有以下资料: struct sockaddr_in* server = (struct sockaddr_in*)sockAddr; ULONG addr = htonl(server->sin_addr.s_addr); USHORT port = server->sin_port; char* frame[sizeof(USHORT) + sizeof(ULONG)]; memcpy(frame, &port, sizeof(USHORT)); memcpy(&a

我有以下资料:

struct sockaddr_in* server = (struct sockaddr_in*)sockAddr;

ULONG addr = htonl(server->sin_addr.s_addr);
USHORT port = server->sin_port;

char* frame[sizeof(USHORT) + sizeof(ULONG)];

memcpy(frame, &port, sizeof(USHORT));
memcpy(&frame[2], &addr, sizeof(ULONG));


int result = send(s, (const char*)frame, sizeof(frame), 0);

USHORT
的大小是2个字节,而
ULONG
4,为什么在接收字节的总结果时改为24个字节?

frame
是一个字符指针数组,我假设系统上的字符指针是4个字节。这就是为什么
sizeof(frame)
是24字节。您可能需要一个字符数组

// array of char, not char *
char frame[sizeof(USHORT) + sizeof(ULONG)];

假设
char*
是4个字节,并且您有一个包含6个字节的数组,那么它将是24个字节。看起来你的意思是
char frame[…]
@JamesRoot现在有意义了,谢谢!)只是好奇,你为什么要在中将一个
sockaddr\u发送给对等方?为什么还要翻译
server->sin\u addr.s\u addr
的字节顺序,而不是
server->sin\u port
的字节顺序?对等方已经可以通过
getpeername()
@RemyLebeau-Hey访问发送方的
sockaddr\u了!因为sinu端口已经被转换了。原因是,这是客户端之后必须连接到的服务器的目标,它基本上是代理服务器。原版->本地主机->服务器。我现在觉得自己很愚蠢。非常感谢。