Reputation: 307
I'm struggling to send some values via UDP
at the moment.
The main problem is that I have lots of values. If I send every value on its own it is working just fine.
char imu_x[16];
char imu_y[16];
char imu_z[16];
char mag_x[16];
char mag_y[16];
char mag_z[16];
char g_y[16];
char g_p[16];
char g_r[16];
char tmp[16];
char prs[16];
char ti[16];
char Motor1[16];
char Motor2[16];
char Motor3[16];
char Motor4[16];
//Timestamp
sendto(clientSocket,ti,sizeof(ti),0,(struct sockaddr *)&serverAdress,addressSize);
//acceleration data
sendto(clientSocket,imu_x,accx,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,imu_y,accy,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,imu_z,accz,0,(struct sockaddr *)&serverAdress,addressSize);
//Mag data
sendto(clientSocket,mag_x,magx,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,mag_y,magy,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,mag_z,magz,0,(struct sockaddr *)&serverAdress,addressSize);
//Gyro Data
sendto(clientSocket,g_y,gy,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,g_p,gp,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,g_r,gr,0,(struct sockaddr *)&serverAdress,addressSize);
//Temperature and Pressure
sendto(clientSocket,tmp,temp,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,prs,press,0,(struct sockaddr *)&serverAdress,addressSize);
// Motor Data
sendto(clientSocket,Motor1,m1,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,Motor2,m2,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,Motor3,m3,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,Motor4,m4,0,(struct sockaddr *)&serverAdress,addressSize);
and those are the sending calls.
Is there any possibility to "merge" them into one sending call?
I already tried using strcat
but my char
Buffer just overflows and the loop terminates.
If somebody knows the solution I would be very glad if you could share it with me
Have a nice weekend =)
Upvotes: 2
Views: 53
Reputation: 34829
Looks like 16 arrays of 16 bytes each, so declare a buffer of size 256, and then memcpy
the arrays into the buffer:
char buffer[256];
char *data[16] = { imu_x, imu_y, imu_z, mag_x, mag_y, mag_z, g_y, g_p, g_r, tmp, prs, ti, Motor1, Motor2, Motor3, Motor4 };
for ( int i = 0; i < 16; i++ )
memcpy( buffer + i*16, data[i], 16 );
Then you can send the buffer with a single sendto
, and use similar code on the receive side to unpack the buffer.
Upvotes: 1