最近我正在编写一个c/s结构的程序,大致功能如下:
1、客户端发送用户名和密码到服务器端
2、服务器端验证用户名和密码,如果正确,发送字符串“success”到客户端,否则发送字符串“shibai”到客户端
3、客户端登录成功后,填写表单,将表单内容发送到服务器端
4、服务器端保存客户端传过来的表单到数据库
也就是说,客户端要传送各种不同结构的类型到服务器端,而服务器端对接收到的不同的数据又有不同的处理方式。于是我在客户端和服务器端建立了一个这样的结构来发送和接收数据:
typedef struct
{
unsigned short int DataFlag;
DataType data;
} DataPackage;
其中DataFlag用来代表用户传来的是什么结构,比如说,DataFlag等于0,证明用户传过来的是用户名和密码要求服务器端验证;DataFlag等于1,证明用户传过来的是表单记录,要求服务器写入数据库等等。而服务器收到客户端传过来的数据后,看到DataFlag的值为0,就知道了客户端是要求自己验证密码,看到DataFlag的值为1呢,就知道客户端是提交的记录,要求自己将数据写入到数据库。
/* 用户结构定义 */
typedef struct
{
char name[12];
char password[16];
} User;
/* 表单记录结构定义 */
typedef struct
{
char ID[19]; /* 身份证号 */
char name[12]; /* 姓名 */
char add[]; /* 地址 */
} Personal;
/* 将User结构定义为DataPackage结构中的DataType */
typedef User DataType;
/* 说明:发送用户名和密码到服务器端验证的函数
第一个参数是和服务器通信的并建立了连接的套接字
第二个参数是要发送到服务器端的数据 */
void send_logininfo_to_server (int sd, DataPackage userinfo)
{
userinfo.DataFlag = 0;
strcpy (userinfo.data.name, "luojiafeng" );
strcpy (userinfo.data.password, "chenggong" );
write (sd, (char *)&userinfo, sizeof(userinfo) );
}
/* 发送表单记录到服务器端的函数
第一个参数是和服务器通信的并建立了连接的套接字
第二个参数是要发送到服务器端的数据 */
void send_custominfo_to_server (int sd, DataPackage personalinfo)
{
/* 将Personal结构定义为DataPackage结构中的DataType */
typedef Personal DataType;
personalinfo.DataFlag = 1;
strcpy (personalinfo.data.ID, "429006198411231518");
strcpy (personalinfo.data.name, "luojiafeng");
strcpy (personalinfo.data.addr, "beijing");
write (sd, (char *)&personalinfo, sizeof(personalinfo));
}
____________________________________________________________
大概思路就是上面那样的,但是今天早上我编译的时候,发现函数体里面的
“ typedef Personal DataType; ”有错误,到底是什么原因呢?
还有没有更好的解决方案呢?希望各位英雄指点一二,不胜感激!
阅读(1803) | 评论(5) | 转发(0) |