客户端历史查询模块
int do_history(int sockfd, MSG *msg)
{
msg->type = H;
send(sockfd, msg, sizeof(MSG), 0);
// 接受服务器,传递回来的历史记录信息
while(1)
{
recv(sockfd, msg, sizeof(MSG), 0);
if(msg->data[0] == '\0')
break;
//输出历史记录信息
printf("%s\n", msg->data);
}
return 0;
}
服务器历史查询模块
// 得到查询结果,并且需要将历史记录发送给客户端
int history_callback(void* arg,int f_num,char** f_value,char** f_name)
{
// record , name , date , word
int acceptfd;
MSG msg;
acceptfd = *((int *)arg);
sprintf(msg.data, "%s , %s", f_value[1], f_value[2]);
send(acceptfd, &msg, sizeof(MSG), 0);
return 0;
}
int do_history(int acceptfd, MSG *msg, sqlite3 *db)
{
char sql[128] = {};
char *errmsg;
sprintf(sql, "select * from record where name = '%s'", msg->name);
//查询数据库
if(sqlite3_exec(db, sql, history_callback,(void *)&acceptfd, &errmsg)!= SQLITE_OK)
{
printf("%s\n", errmsg);
}
else
{
printf("Query record done.\n");
}
// 所有的记录查询发送完毕之后,给客户端发出一个结束信息
msg->data[0] = '\0';
send(acceptfd, msg, sizeof(MSG), 0);
return 0;
}
功能测试