enviar int sobre socket, c, c ++

Tengo problemas con el envío de una serie de entradas a través de un socket. el código se ve así

Progtwig 1 (ejecutándose en windows)

int bmp_info_buff[3]; /* connecting and others */ /* Send informations about bitmap */ send(my_socket, (char*)bmp_info_buff, 3, 0); 

Progtwig 2 (funcionando en neutrino)

 /*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]); 

Debe imprimir Tamaño de bitmap: 64
ancho: 8
altura: 8

Tamaño del bitmap: 64
ancho: 6
altura: 4096
¿Qué hago mal?

Cuando envía la matriz bmp_info_buff como matriz char, el tamaño de bmp_info_buff no es 3 sino que es 3 * sizeof(int)

Lo mismo para recv

Reemplazar

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

por

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

El argumento de tamaño para send() y recv() está en bytes, no en int s. Estás enviando / recibiendo muy poca información.

Necesitas:

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

y

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

También tenga en cuenta:

  • Esto hace que su código sea sensible a los problemas de byte endianness.
  • El tamaño de int no es el mismo en todas las plataformas, debe considerar esto también.
  • No hay necesidad de lanzar el argumento puntero, es void * .
  • También debe agregar código para verificar los valores de retorno, ¡la E / S puede fallar!
  • El último argumento de recv() no debería ser NULL como en su código, es un entero de banderas igual que en send() .