Send int over socket in C/C++
When you send the bmp_info_buff
array as char array, the size of bmp_info_buff
is not 3 but is 3 * sizeof(int)
The same for recv
Replace
send(my_socket, (char*)bmp_info_buff, 3, 0);
recv(my_connection, bmp_info_buff, 3, NULL);
by
send(my_socket, (char*)bmp_info_buff, 3*sizeof(int), 0);
recv(my_connection, bmp_info_buff, 3*sizeof(int), NULL);
The size argument to send()
and recv()
is in bytes, not int
s. You're sending/receiving too little data.
You need:
send(my_socket, bmp_info_buff, sizeof bmp_info_buff, 0);
and
recv(my_connection, bmp_info_buff, sizeof bmp_info_buff, 0);
Also note:
- This makes your code sensitive to byte endianness issues.
- The size of
int
is not the same on all platforms, you need to consider this, too. - No need to cast the pointer argument, it's
void *
. - You should also add code to check the return values, I/O can fail!
- The last argument to
recv()
shouldn't beNULL
as in your code, it's a flags integer just as insend()
.