Я предполагаю, что возможны различные типы данных (иначе как сервер может их обработать).Затем вы можете использовать объединение, например что-то вроде:
union dataU{
struct datatype1S datatype1;
struct datatype2S datatype2;
...
}
struct messageS {
int typeId;
union dataU data;
}
Затем используйте typeId, чтобы определить, на какого члена объединения нужно смотреть.