2016-08-06 56 views
2

Ich habe Mühe, einige Werte über UDP im Moment zu senden.Senden von vielen Werten in einem charArray

Das Hauptproblem ist, dass ich viele Werte habe. Wenn ich jeden Wert sende, funktioniert es gut.

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); 

und das sind die sendenden Anrufe.

Gibt es eine Möglichkeit, sie zu einem sendenden Anruf zusammenzuführen?

Ich habe bereits versucht mit strcat, aber meine char Puffer gerade überläuft und die Schleife beendet.

Wenn jemand die Lösung weiß, würde ich mich sehr freuen, wenn Sie es mit mir

teilen konnte

ein schönes Wochenende =)

+0

Besser, den Code zu zeigen, der nicht funktioniert. Sie haben unvollständigen Code geschrieben, der, wie Sie sagen, funktioniert. –

Antwort

1

wie 16 Anordnungen von 16 Bytes Sieht aus je so einen Puffer der Größe erklären 256 und dann memcpy die Arrays in den Puffer:

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); 

dann können Sie den Puffer mit einem einzigen sendto, und verwenden Sie einen ähnlichen Code auf der Empfangsseite senden, um den Puffer zu entpacken.