在聊天室的客户端中,自己专门用了一个线程来进行读操作和另外一个线程来进行写操作,两者互不干扰,用户在客户端进行注册操作的时候,首先需要输入一些最基本的注册信息,输入好所有信息后将这些内容发送到服务器中,服务器会通过传送过来的结构体的选项去找到你想执行的具体操作,然后在数据库中给你分配这样的空间来存储你的个人信息,存储成功就会给你产生一个随机的六位数账号,下面是实现该功能的代码:
srand(time(NULL)) ;
data->id = 99999 ;
while(data->id <100000 )
{
data->id =(rand()%10)*100000+(rand()%10)*10000+(rand()%10)*1000+(rand()%10)*100+(rand()%10)*10+(rand()%10);
}
系统给你分配好一个号码后就会根据你的socket再传给你 ,这样你就成功注册了一个账号,接下来就是登录,根据提示输入账号和密码,客户端将信息发送给服务器,服务器从数据库中调出信息遍历,倘若找到与你的账号和密码就会给客户端发送一个消息,这歌时候可以在读线程里专门设置一个标志位,同时这个标志位会堵塞在你成功进入聊天室的界面的前面,标志位符合要求则进入下一个个人界面反之直接break再次回到登录主界面,可以进行重登或者忘记密码的操作,下面是如何利用标志位堵塞和读线程收到两种提示的代码:
case 'A' ://登录
{
zizuan = 0 ;
int ac;
char b2[20] ;
system("clear") ;
printf("\t\t请输入您的账号:") ;
scanf("%d",&ac) ;
data.id = ac ;
printf("\n") ;
printf("\t\t请输入您的密码:") ;
int i = 0;
int jj = 0;
while(i < 20)
{
b2[i] = mygetch();
if(b2[i] == 10)
{
if(jj == 0) 防止输入账号的最后一个回车影响
{
jj++;
continue;
}
break;
}
printf("*");
i++;
}
b2[i] = '\0';
strcpy(data.password,b2) ;
data.written = 0 ;
write(mysockfd,&data,sizeof(data)) ;
printf("\n\n\n");
printf("\t\t\t正在登陆验证中......\n");
run = 0 ;
while(run == 0)
{
NULL;
}
if(run == 1)
if(retu.kind == success1)//登陆成功 { memset(&data,0,sizeof(struct Servercaozuo)); strcpy(data.user,retu.user); strcpy(mingzi,data.user) ; run = 1 ; }
if(retu.kind == fail)
{
biaozhifu = 2 ;
while (biaozhifu == 2)
{
system("clear") ;
printf("%s",retu.information) ;
printf("\n\n") ;
printf("按任意键返回主界面:");
char c6[20] ;
scanf("%s",c6) ;
biaozhifu = 1 ;
run = 2 ;
}
}
版权声明:本文为perfectguyipeng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。