聊天室的註冊與登入
阿新 • • 發佈:2019-02-18
在聊天室的客戶端中,自己專門用了一個執行緒來進行讀操作和另外一個執行緒來進行寫操作,兩者互不干擾,使用者在客戶端進行註冊操作的時候,首先需要輸入一些最基本的註冊資訊,輸入好所有資訊後將這些內容傳送到伺服器中,伺服器會通過傳送過來的結構體的選項去找到你想執行的具體操作,然後在資料庫中給你分配這樣的空間來儲存你的個人資訊,儲存成功就會給你產生一個隨機的六位數賬號,下面是實現該功能的程式碼:
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 ;
}
}