6

我在通过套接字发送整数数组时遇到了麻烦。代码看起来像这样

程序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
我做错了什么?

4

2 回答 2

9

当您将bmp_info_buff数组作为 char 数组发送时,大小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);
于 2013-01-04T14:01:13.997 回答
8

send()and的大小参数以recv()字节为单位,而不是ints。您发送/接收的数据太少。

你需要:

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().
于 2013-01-04T14:00:51.327 回答