Send int over socket in C/C++
19,868
Solution 1
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);
Solution 2
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()
.
Author by
Lukasz
Updated on June 09, 2022Comments
-
Lukasz almost 2 years
I have troubles with sending an array of ints over a socket. the code looks like this
Program 1: (running on windows)
int bmp_info_buff[3]; /* connecting and others */ /* Send informations about bitmap */ send(my_socket, (char*)bmp_info_buff, 3, 0);
Program 2: (running on 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]);
It should print Size of bitmap: 64
width: 8
height: 8Size of bitmap: 64
width: 6
height: 4096
What do I do wrong?