2021.10.02超详细实现过程-Linux 环境下的简易聊天室,采用CS模型,实现多客户端之间的稳定数据传输。(添加好友,删除好友、屏蔽好友、查看好友列表(针对数据库的操作))
生活随笔
收集整理的這篇文章主要介紹了
2021.10.02超详细实现过程-Linux 环境下的简易聊天室,采用CS模型,实现多客户端之间的稳定数据传输。(添加好友,删除好友、屏蔽好友、查看好友列表(针对数据库的操作))
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這次主要對加好友、刪除好友、屏蔽好友、查看好友列表功能(單純的基于數據庫操作),并且也對之前的代碼做了部分的改動,為中間涉及全局變量問題。
對之前的改動(主要):
其中對結構體進行了改動和結構體全局變量的定義
typedef struct {char name[21];char account[11];char password[17]; }Usr,pUsr; Usr USR={.name={0},.account={0},.password={0} }; //對USR成員賦值后立即求其長度 int len_nm=0; int len_ac=0; int len_ps=0;對數據庫操作定義幾個全局變量
MYSQL mysql; MYSQL *pmysql=NULL; MYSQL_RES *res=NULL; MYSQL_ROW fetchrow=NULL;//這個變量為mysql_fetch_row設定 int row=0;//這個變量為mysq_num_rows()設定 unsigned int num_fields=0;//這個變量為mysql_num_fields設定 char slc[1024]=""; //全局變量用來存放查詢語句的字符串對登錄函數 int Login()的改動
int Login() {char ac[11]={0};char ps[17]={0};char tmpac[11]={0};char slc[1024]="select * from usr where(account='";printf("你已進入登陸系統\n");printf("請輸入你的賬號\n");scanf("%s",ac);strncpy(tmpac,ac,strlen(ac));strncat(slc,tmpac,strlen(tmpac));printf("請輸入你的密碼\n");scanf("%s",ps);strcat(slc,"' AND password='");strncat(slc,ps,strlen(ps));strcat(slc,"')");int ret=mysql_real_query(&mysql,slc,strlen(slc));printf("%s\n",slc);res=mysql_store_result(&mysql);int row=mysql_num_rows(res);mysql_free_result(res);if(row==1){unsigned long *lenths=0;unsigned int i=0;//num_fields = mysql_num_fields(result);fetchrow=mysql_fetch_row(res);len_nm=strlen(fetchrow[0]);len_ac=strlen(fetchrow[1]);len_ps=strlen(fetchrow[2]);strncpy(USR.name,fetchrow[0],strlen(fetchrow[0])); //修改當前程序用戶信息,以便后續使用strncpy(USR.account,fetchrow[1],strlen(fetchrow[1]));//printf("USR.account:%s\n",USR.account);strncpy(USR.password,fetchrow[2],strlen(fetchrow[2]));Loggingstatus=1;printf("登陸成功\n");return 0; }else{printf("登陸失敗\n");}}接下來就是新增功能的具體函數了
添加好友功能
int AddFriend() {char ac[11]={0};char slc1[1024]="select account from usr where account='";//printf("%s\n",slc1);printf("你已進入添加好友功能\n請輸入你要添加好友的賬號:\n");//printf("%s\n",slc1);scanf("%s",ac);strncat(slc1,ac,strlen(ac));//printf("%s\n",slc1);strcat(slc1,"'");//printf("%s\n",slc1);int ret=mysql_real_query(&mysql,slc1,strlen(slc1));//查看數據庫用戶列表有沒有這個用戶的賬號res=mysql_store_result(&mysql);row=mysql_num_rows(res);mysql_free_result(res);if(row==1)//如果查詢出來一行,說明有這個用戶,{ char slc2[1024]="select friends from ";strncat(slc2,USR.name,len_nm);strncat(slc2,USR.account,len_ac);strcat(slc2," where friends='");strncat(slc2,ac,strlen(ac));strcat(slc2,"'");//printf("%s\n",slc2);ret=mysql_real_query(&mysql,slc2,strlen(slc2));//繼續查看是否已經是自己的好友if(ret==0){res=mysql_store_result(&mysql);printf("sdasdads\n");row=mysql_num_rows(res);mysql_free_result(res);}if(row==0)//如果不是自己的好友{char slc3[1024]="insert into ";strncat(slc3,USR.name,len_nm);strncat(slc3,USR.account,len_ac);strcat(slc3,"(friends) values('");strncat(slc3,ac,strlen(ac));strcat(slc3,"')");ret=mysql_real_query(&mysql,slc3,strlen(slc3));//將該用戶添加到(單向)好友列表中res=mysql_store_result(&mysql);printf("saaa\n");//row=mysql_num_rows(res);mysql_free_result(res);printf("%s\n",slc3);if(ret!=0){perror("mysql_real_query");return -1;}if(ret==0){printf("添加好友成功\n");return 1;}}else if(row>0)//如果說自己的好友則提示已經是自己的(單向)好友,不用繼續添加{printf("已存在該好友,不可繼續添加\n");return 0;}else{printf("插入如失敗\n");return -1;}}else{printf("不存在該用戶賬號\n");return -1;}}屏蔽好友功能
int ShieldFrd()//屏蔽好友,與添加好友類似,將需要被屏蔽的人添加到自己的屏蔽列表中 {printf("你已進入設置添加屏蔽好友功能\n,請輸入好友賬號\n");char ac[11]={0};scanf("%s",ac);char slc[1024]="select friends from ";strncat(slc,USR.name,len_nm);strncat(slc,USR.account,len_ac);strcat(slc," where friends='");strncat(slc,ac,strlen(ac));strcat(slc,"'");int ret=mysql_real_query(&mysql,slc,strlen(slc));//繼續查看是否已經是自己的好友res=mysql_store_result(&mysql);row=mysql_num_rows(res);mysql_free_result(res);if((ret==0)&&(row>0))//如果是自己的好友就可以進入屏蔽操作{char slc3[1024]="update ";strncat(slc3,USR.name,len_nm);strncat(slc3,USR.account,len_ac);strcat(slc3," set shieldfriends='");strncat(slc3,ac,strlen(ac));strcat(slc3,"' where friends='");strncat(slc3,ac,strlen(ac));strcat(slc3,"'");ret=mysql_real_query(&mysql,slc3,strlen(slc3));//將該用戶添加到屏蔽好友列表中res=mysql_store_result(&mysql);//row=mysql_num_rows(res);mysql_free_result(res);if(ret!=0){perror("mysql_real_query");return -1;}if(ret==0){printf("屏蔽好友成功\n");return 1;}}else if((ret==0)&&(row==0))//如果不是自己好友列表中不存在{printf("該賬號不是自己好友或者不存在,無法屏蔽\n");return 0;}else{printf("屏蔽失敗\n");return -1;}}刪除好友功能
int DeleteFrd()//刪除好友, {printf("你已進入刪除好友功能\n,請輸入好友賬號\n");char ac[11]={0};scanf("%s",ac);char slc[1024]="select friends from ";strncat(slc,USR.name,len_nm);strncat(slc,USR.account,len_ac);strcat(slc," where friends='");strncat(slc,ac,strlen(ac));strcat(slc,"'");int ret=mysql_real_query(&mysql,slc,strlen(slc));//查看是否已經是自己的好友res=mysql_store_result(&mysql);row=mysql_num_rows(res);mysql_free_result(res);if((ret==0)&&(row>0))//如果是自己的好友就可以進入刪除操作{char slc3[1024]="delete from ";strncat(slc3,USR.name,len_nm);strncat(slc3,USR.account,len_ac);strcat(slc3," where friends='");strncat(slc3,ac,strlen(ac));strcat(slc3,"'");printf("%s\n",slc3);ret=mysql_real_query(&mysql,slc3,strlen(slc3));//將被刪除用戶信息從登陸用戶中全部刪除res=mysql_store_result(&mysql);mysql_free_result(res);if(ret!=0){perror("mysql_real_query");return -1;}if(ret==0){printf("刪除好友成功\n");return 1;}}else if((ret==0)&&(row==0))//如果好友列表不存在該好友{printf("該賬號不是自己好友或者不存在,無法刪除\n");return 0;}else{printf("刪除失敗\n");return -1;}}展示好友列表
int ShowFriends() {printf("以下為好友列表和屏蔽好友列表的的賬號信息:\n");char slc[1024]="select friends,shieldfriends from ";strncat(slc,USR.name,len_nm);strncat(slc,USR.account,len_ac);mysql_real_query(&mysql,slc,strlen(slc));res=mysql_store_result(&mysql);row=mysql_num_rows(res);//num_fields=mysql_num_fields(res);while((fetchrow =mysql_fetch_row(res))){unsigned long *lengths;lengths=mysql_fetch_lengths(res);for(int i=0;i<2;i++)//只需要打印前兩列friends和shieldfriends{printf("%-20s",fetchrow[i]? fetchrow[i] : "NULL");}printf("\n");}}總結
以上是生活随笔為你收集整理的2021.10.02超详细实现过程-Linux 环境下的简易聊天室,采用CS模型,实现多客户端之间的稳定数据传输。(添加好友,删除好友、屏蔽好友、查看好友列表(针对数据库的操作))的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个简单的canvas射击小游戏
- 下一篇: Linux定时器crontab用法