2013-01-04 248 views
4

我在通過套接字發送int數組時遇到麻煩。 的代碼看起來是這樣通過套接字發送int,c,C++

程序1(運行在Windows)

int bmp_info_buff[3]; 

/* connecting and others */ 

/* Send informations about bitmap */ 
send(my_socket, (char*)bmp_info_buff, 3, 0); 

計劃2(上中微子運行)

/*buff to store bitmap information size, with, length */ 
int bmp_info_buff[3]; 

/* stuff */ 

/* Read informations about bitmap */ 
recv(my_connection, bmp_info_buff, 3, NULL); 
printf("Size of bitmap: %d\nwidth: %d\nheight: %d\n", bmp_info_buff[0], bmp_info_buff[1], bmp_info_buff[2]); 

應該打印 位圖的大小:64
寬度:8
身高:8

位圖大小:64
寬度:6
高度:4096
我該怎麼做?

回答

7

當您發送bmp_info_buff數組作爲字符數組的bmp_info_buff大小不是3,而是3 * sizeof(int)

同爲recv

通過

更換

send(my_socket, (char*)bmp_info_buff, 3, 0); 
recv(my_connection, bmp_info_buff, 3, NULL); 

send(my_socket, (char*)bmp_info_buff, 3*sizeof(int), 0); 
recv(my_connection, bmp_info_buff, 3*sizeof(int), NULL); 
+0

感謝它的工作。 – Lukasz

6

send()recv()的大小參數以字節爲單位,而不是int s。您發送/接收的數據太少。

您需要:

send(my_socket, bmp_info_buff, sizeof bmp_info_buff, 0); 

recv(my_connection, bmp_info_buff, sizeof bmp_info_buff, 0); 

還要注意:

  • 這使得以字節排列順序問題你的代碼是敏感的。
  • int的大小在所有平臺上都不相同,您也需要考慮這一點。
  • 無需轉換指針參數,它是void *
  • 您還應該添加代碼來檢查返回值,I/O可能會失敗!
  • recv()的最後一個參數不應該是NULL,因爲在您的代碼中,它是一個標記整數,就像在send()中一樣。
+0

+1。但是,大家不知道'sizeof'關鍵字或什麼? – 2013-01-04 14:02:01

+0

+1字節字節順序的東西! –

+0

以網絡順序發送內容也是一個好主意。 –

相關問題