2016-08-06 10 views
2

我努力通過UDP目前發送一些值。發送大量值在一個charArray

主要問題是我有很多值。 如果我自己發送每個值,它工作得很好。

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

這些是發送呼叫。

有沒有可能將它們「合併」爲一個發送呼叫?

我已經嘗試過使用strcat但我的char緩衝區剛剛溢出,循環終止。

如果有人知道的解決方案,我將非常高興,如果你能和我

有一個愉快的週末分享=)

+0

更好地顯示不起作用的代碼。你發佈了一些不完整的代碼,你說,工作。 –

回答

1

貌似每個16個字節的16個陣列,因此聲明大小的緩衝區256,然後memcpy陣列到緩衝:

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

然後就可以用單個sendto發送緩衝器中,並使用類似的代碼在接收側進行解包緩衝器。