在C/ c++中通过套接字发送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: %dnwidth: %dnheight: %dn", bmp_info_buff[0], bmp_info_buff[1], bmp_info_buff[2]);

应该打印出来位图大小:64
宽度:8
高度:8

位图大小:64
宽度:6
身高:4096
我做错了什么?

发送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);

send()recv()的size参数以字节为单位,而不是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()一样。

最新更新