2017-05-08 31 views
-1

我有以下:为什么接收的缓冲区大小比原来通过套接字发送的大?

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而不是?

+1

假设'字符*'是4个字节,你有其中6的阵列,这将是24看起来你意'炭帧[...]' –

+0

@JamesRoot现在有道理, 谢谢! :) –

+0

只是好奇,为什么你发送'sockaddr_in'到同行?为什么翻译'server-> sin_addr.s_addr'的字节顺序,而不是'server-> sin_port'呢?对等端已经通过'getpeername()'访问发送者的'sockaddr_in'。 –

回答

2

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

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

现在我觉得很蠢。谢谢! –

相关问题