简易聊天室五 用户登录
来源:互联网 发布:天音淘宝复制大师3.03 编辑:程序博客网 时间:2024/04/29 22:53
简易聊天室五 用户登录
半个月过去了,断断续续也把聊天室更新到了第五节,前几节,我们搭建了框架,创建了注册数据库,完成了用户的注册。今天,我们来让已经注册的用户完成登录,成为聊天室的一员。
其实大家仔细想想,用户登录也就是要完成下面几个步骤:
1.采集到用户输入的登录信息。
2.将登录信息发送到server进行验证
3.是否有次id
4.id正确,密码是否正确
5.所有的都正确后,是否存在已登陆
6.登录完成后,将此用户标志为已登陆用户
下面,我们就这几个步骤,逐一用代码实现。
一.采集用户输入的登录信息.
int Log(int clientfd,chat_t *client_struct){//write(clientfd,"Log",3);log:client_struct->action = LOG;//write(clientfd,client_struct,sizeof(chat_t));printf("请输入您的id:\n");scanf("%d",&client_struct->logId);getchar();printf("请输入您的密码:\n");scanf("%s",client_struct->logPassword);write(clientfd,client_struct,sizeof(chat_t));read(clientfd,client_struct,sizeof(chat_t));if(client_struct->ack1 == OK&& client_struct->ack == OK){printf("验证信息正确,登录成功\n");return 0;}else if(client_struct->ack1 == OK && client_struct->ack == NO){printf("该用户已登陆\n");memset(client_struct,0,sizeof(chat_t));goto log;}else if(client_struct->ack == OK && client_struct->ack1 == NO){printf("密码错误,请重新登录\n");memset(client_struct,0,sizeof(chat_t));goto log;}else{printf("id不存在\n");goto log;}}
我们将信息放入client_struct结构体中,发送给server。采集到的返回值分为四种:“该用户已登陆” “密码错误” “id不存在” “验证信息正确,登录成功”。
二.将登录信息发送到server进行验证
客户端通过
write(clientfd,client_struct,sizeof(chat_t));
发送数据包。
server通过
while(1){memset(client_struct,0,sizeof(chat_t));read(client_fd,client_struct,sizeof(chat_t));printf("%s\n%s\n",client_struct->regName,client_struct->regPassword);printf("%d,i=%d,fd=%d\n",client_struct->action,i++,client_fd);switch(client_struct->action){case LOG:Log(client_fd,client_struct);break;case REG:reg(client_fd,client_struct);break;default:sqlite3_close(db);break;}}
接受发送过来的数据包,然后进行解析。
三.是否有次id
四.id正确,密码是否正确
五.所有的都正确后,是否存在已登陆
其实这几步骤,都是通过执行数据库callback函数进行查询,查询流程如下
int Log(int client_fd,chat_t *chat_struct){//printf("Log\n");char sql[50] = {0};char *errmsg;sqlite3_exec(db,"select * from client_tb",callback_log,chat_struct,NULL);write(client_fd,chat_struct,sizeof(chat_t));if(chat_struct->ack1 == OK && chat_struct->ack == OK){sprintf(sql,"update client_tb set online=1 where id=%d",chat_struct->logId);sqlite3_exec(db,sql,NULL,NULL,&errmsg);printf("target %s\n",errmsg);}return 0;}
int callback_log(void *arg,int n,char**result,char**name){chat_t *p = (chat_t*)arg;int i = 0;for(i = 0 ; i < n ; i++){if(strcmp(name[i],"id") == 0 ) //锁定id栏{if(p->logId == atoi(result[i])) //id相同{p->ack = OK;if(strcmp(p->logPassword,result[i+2])== 0)//密码正确{p->ack1 = OK;sprintf(p->regName,"%s",result[i+1]);if(atoi(result[i+3]) == 1) //是否已登陆{p->ack = NO;}}}}}return 0;}
正如程序中备注的,一个callback函数,完成了三个功能。通过ack和ack1配合返回,完成四种排列组合
ack=OKack1 = NO登录成功ack=OKack1 = NO已登陆ack=OKack1 = NO密码错误ack=OKack1 = NOid不存在六.登录完成后,将此用户标志为已登陆用户
使用sqlite更新数据库指令
if(chat_struct->ack1 == OK && chat_struct->ack == OK){sprintf(sql,"update client_tb set online=1 where id=%d",chat_struct->logId);sqlite3_exec(db,sql,NULL,NULL,&errmsg);printf("target %s\n",errmsg);}
就此,登录就完成了,不难把,程序还有很多不足,以后还要加入很多其他的情况考虑。
下面是下载程序的链接
欢迎大家评论
0 0
- 简易聊天室五 用户登录
- 简易聊天室四 注册用户
- 简易聊天室
- 简易的用户注册和登录系统.
- wordpress 的用户登录机制简易分析
- 简易聊天室的制作
- 简易局域网聊天室程序
- Java简易聊天室
- 简易多人聊天室
- socket简易聊天室
- ASP.net--简易聊天室
- Websocket学习--简易聊天室
- 简易网页聊天室DEMO
- 搭建简易在线聊天室
- 网络编程 简易聊天室
- JAVA--简易聊天室程序
- JSP简易聊天室
- java简易多用户聊天室
- linux服务器批量部署应用系统shell脚本(Tomcat/jetty)
- UIWindow 和 ViewController理解
- 【HDU 5316】Magician(线段树)
- 多个jquery{}在html中的执行顺序
- Hadoop学习笔记(Map-Reduce的工作、调度机制)
- 简易聊天室五 用户登录
- @property attributes 比较
- 带方向状态的搜索
- 关于初学Java注意事项一
- Socket发起post请求,并保持session的状态
- Java构造和解析Json数据的两种方法详解一
- Python之集合(set)
- 多线程入门教程一:基本概念
- java线程池中任务执行完成后再次执行