2017-05-08 33 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

現在我覺得很蠢。謝謝! –

相關問題