客户端登录模块
//登录,服务器返回“OK”才表示登录成功
//返回值: 1 成功; -1 失败; 0 其他
int do_login(int sockfd, MSG_T *msg){
printf("login ...\n");
memset(msg, 0, sizeof(MSG_T));
msg->type = MSGTYPE_L;
printf("input name:");scanf("%s", msg->name);getchar();
printf("input passwd:");scanf("%s", msg->name);getchar();
if(send(sockfd, msg, sizeof(MSG_T),0) < 0){
printf("fail to send login msg.\n");
return -1;
}
if(recv(sockfd, msg, sizeof(MSG_T), 0) < 0){
printf("fail to login.\n");
return -1;
}
if(strncmp(msg->data,"OK", 3) == 0){
printf("login ok!\n");
return 1;
}else{
printf("%s\n", msg->data);
}
}
服务器登录模块
//登录
int do_login(int sockfd, MSG_T *msg, sqlite3 *db){
char sql[128] = {0};
char *errmsg = NULL, **result = NULL;
int nrow, ncolumn;
sprintf(sql, "select * from user where name='%s' and pass='%s';",msg->name, msg->data);
if(sqlite3_get_table(db, sql, &result, &nrow, &ncolumn, &errmsg) != SQLITE_OK){
printf("%s\n", errmsg);
}else{
printf("sqlite3 get table ok!\n");
}
//查询成功,数据库中拥有此用户
if(nrow == 1){
printf("client user(%s) login success\n",msg->name);
memset(msg->data, 0, strlen(msg->data));
strcpy(msg->data, "OK");
}else{//密码或用户名错误
printf("client user(%s) login fail!\n",msg->name);
memset(msg->data, 0, strlen(msg->data));
strcpy(msg->data, "user or pass wrong!\n");
}
//返回应答
if(send(sockfd, msg, sizeof(MSG_T), 0) < 0){
printf("fail to send\n");
return 0;
}
return 1;
}
验证登录模块
下面进行查询模块功能的实现