聊天室的注册与登录

在聊天室的客户端中,自己专门用了一个线程来进行读操作和另外一个线程来进行写操作,两者互不干扰,用户在客户端进行注册操作的时候,首先需要输入一些最基本的注册信息,输入好所有信息后将这些内容发送到服务器中,服务器会通过传送过来的结构体的选项去找到你想执行的具体操作,然后在数据库中给你分配这样的空间来存储你的个人信息,存储成功就会给你产生一个随机的六位数账号,下面是实现该功能的代码:

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 ;
}
}

你可能感兴趣的:(项目)