在socket通信中当用recv接收两种不同类型的结构体,怎么在接收到后区分是哪种结构体呢

在socket通信中当用recv接收两种不同类型的结构体,如何在接收到后区分是哪种结构体呢?
struct   playinfo//玩家信息
{
char   name[20];//玩家姓名
int     score;//玩家分数
int     m_win;//玩家赢的局数
int     m_lost;//玩家输的局数
char   grade[20];//玩家级别
};
/*playinfo   中的type成员
  *当为1,   表示和大家聊天
  *当为0,表示用户进入    
  *当为2,表示用户离开        
  */

struct   sendinfo//聊天信息
{
int   type;
char   msg[100];//玩家聊天消息
char   name[20];//玩家姓名
playinfo   m_info;//玩家信息
};

struct   gameinfo//游戏信息
{
int   m_x;
int   m_y;
int   m_turn;
};
用recv函数来接收gameinfo结构体和sendinfo结构体,如何来区分接收到的是哪个结构体类型的数据呢?求高手赐教!


------解决方案--------------------
在每个结构体前面加一个类型判断, int cmd; 收到后先读出cmd判断,比如cmd=1表示玩家信息, cmd=2表示聊天信息等等。根据不同类型分类。
------解决方案--------------------
struct packet {

char type;
union {
struct playinfo//玩家信息
{
char name[20];//玩家姓名
int score;//玩家分数
int m_win;//玩家赢的局数
int m_lost;//玩家输的局数
char grade[20];//玩家级别
}info1 ;

/*playinfo 中的type成员
*当为1, 表示和大家聊天
*当为0,表示用户进入
*当为2,表示用户离开
*/

struct sendinfo//聊天信息
{
int type;
char msg[100];//玩家聊天消息
char name[20];//玩家姓名
playinfo m_info;//玩家信息
}info2;

struct gameinfo//游戏信息
{
int m_x;
int m_y;
int m_turn;
}info3;
}ucontent;
}