今天在通讯录中加入了用户身份验证以及注册功能
客户端client代码:
界面程序usr_menu():
void usr_menu()
{
system("clear");
printf("\t\t----1.用户登录----\n");
printf("\t\t----2.用户注册----\n");
printf("\t\t----3.退出登录----\n");
printf("请选择\n");
}
主程序:
usr_menu();
char choice[32] = {0};
scanf("%s",choice);
switch(choice[0])
{
case '1':
log_on(fd);
break;
case '2':
add_usr(fd);
log_on(fd);
break;
case '3':
exit(1);
}
用户注册以及身份验证代码:
//身份验证
void log_on(int fd)
{
char usr[32];
char pwd[32];
int i = 1;
Chat a;
a.cmd = USRPROVE;
int ret = send(fd,&a,sizeof(a),0);
if(-1 == ret)
{
perror("send");
}
printf("输入用户名:\n");
scanf("%s",usr);
while(1)//循环接收信息
{
memset(&a,0,sizeof(a));
ret = recv(fd,&a,sizeof(a),0);
if(-1 == ret)
{
perror("recv");
}
if(strcmp(a.name,usr) != 0)
{
continue;
}
while(1)
{
printf("输入密码:\n");
scanf("%s",pwd);
if(strcmp(a.tel,pwd) == 0)
break;
else
{
if(i == 3)
{
exit(1);
}
printf("密码错误!还有%d次机会\n",3-i);
i++;
}
}
break;
}
printf("登入成功>_<\n");
sleep(1);
}
//用户注册
void add_usr(int fd)
{
Chat c;
printf("输入用户名和密码:\n");
scanf("%s%s",c.name,c.tel);
c.cmd = ADDUSR;
int ret = send(fd,&c,sizeof(c),0);
if(-1 == ret)
{
perror("send");
}
printf("用户注册成功!\n");
sleep(1);
}
服务器端server代码:
void log_on(int fd)
{
sqlite3 *ppdb;
int ret = sqlite3_open("address.db",&ppdb);
if(ret != SQLITE_OK)
{
printf("sqlite3_open:%s\n",sqlite3_errmsg(ppdb));
exit(1);
}
char sql[128] = {0};
sprintf(sql,"select * from usr;");
ret = sqlite3_exec(ppdb,sql,sendinfo,&fd,NULL);
if(ret != SQLITE_OK)
{
printf("sqlite3_exec:%s\n",sqlite3_errmsg(ppdb));
exit(1);
}
sqlite3_close(ppdb);
}
void add_usr(Chat *c)
{
sqlite3 *ppdb;
int ret = sqlite3_open("address.db",&ppdb);
if(ret != SQLITE_OK)
{
printf("sqlite3_open:%s\n",sqlite3_errmsg(ppdb));
exit(1);
}
char sql[128] = {0};
sprintf(sql,"insert into usr values ('%s','%s');",c->name,c->tel);
ret = sqlite3_exec(ppdb,sql,NULL,NULL,NULL);
if(ret != SQLITE_OK)
{
printf("sqlite3_exec:%s\n",sqlite3_errmsg(ppdb));
}
sqlite3_close(ppdb);
}
容错率问题还没解决>-<!