我从没写过这东西,摸着石头过河 大家指点下//Client
typedef struct
{
char type;//type=a登陆 //服务器回应:type=b登陆成功,type=c账号或者密码错误,type=d账号已经登陆
char user[20];
char password[20];
}login,*plogin;typedef struct
{
char type;//type=e注册 //服务器回应:type=f账号已经被注册 type=g注册成功
char name[20];
char user[20];
char password[20];
}userInfo,*puserInfo;typedef struct
{
char type;//type=h普通消息
char msg[8000];
}message,*pmessage;//type=i请求用户列表
//type=j发送和回应心跳包
///////////////////////////////////////////////////////
//Server
typedef struct
{
char type;//type=k用户列表
char msg[8000];//格式是张三/李四/……
}userlist,*puserlist;
typedef struct
{
char type;//type=a登陆 //服务器回应:type=b登陆成功,type=c账号或者密码错误,type=d账号已经登陆
char user[20];
char password[20];
}login,*plogin;typedef struct
{
char type;//type=e注册 //服务器回应:type=f账号已经被注册 type=g注册成功
char name[20];
char user[20];
char password[20];
}userInfo,*puserInfo;typedef struct
{
char type;//type=h普通消息
char msg[8000];
}message,*pmessage;//type=i请求用户列表
//type=j发送和回应心跳包
///////////////////////////////////////////////////////
//Server
typedef struct
{
char type;//type=k用户列表
char msg[8000];//格式是张三/李四/……
}userlist,*puserlist;
2.如果你这些结构在C和S端均有声明,且一致,可以不用再声明长度,但是在传输你所定义的msg这种文本时,因为建议你不要采用定长的方式,所以需要添加声明长度。
3.可以考虑采用包头定义和包体定义分开的方式,不同报文的包头格式均一致,包体不定长。
4.在包头中最好添加标志字段,以避免小概率事件。
非常感谢,受益匪浅你好人帮到低了^^如何做到你说的那种不定长喃?
就以那个msg为例typedef struct
{
char type;
unsigned short len;
char *p;
}这样搞可以吗?再次谢谢
{
char gcHead[2];
unsigned char ucType;
unsigned short usLength;
} MH, * PMH;typedef struct _MSG_SEND_ALL_
{
MH mh;
char * p;
} MSA, * PMSA;
发送时,申请一个MSA,发送MSA.mh,再按照MSA.mh.usLength发送MSA.p
接收时,先判断是否接收长度大于sizeof(MH),再将前面的sizeof(MH)个字节memcpy给一个MH,并按照MH.usLength判断长度是否满足要求。