У меня проблемы с отправкой массива целых через сокет.
код выглядит так
Программа 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
Что я делаю не так?
Когда вы отправляете 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);
Размер аргумента для 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 *
,recv()
не должно быть NULL
как в вашем коде, это целое число флагов, как и в send()
,