通过socket,c,c ++发送int

时间:2013-01-04 13:58:56

标签: c++ c qnx-neutrino

我在插槽上发送一组int有麻烦。 代码看起来像这样

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

2 个答案:

答案 0 :(得分:8)

当您将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);

答案 1 :(得分: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()中一样。