读书人

在socket通信中当用recv接收两种不同类

发布时间: 2012-01-22 22:38:43 作者: rapoo

在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;
}

读书人网 >VC/MFC

热点推荐