当前位置: 首页 > news >正文

网站建设公司主营业务传奇网页游戏破解版

网站建设公司主营业务,传奇网页游戏破解版,android studio官网下载,电脑优化大师下载安装一、项目要求 登录注册功能#xff0c;不能重复登录#xff0c;重复注册单词查询功能历史记录功能#xff0c;存储单词#xff0c;意思#xff0c;以及查询时间基于TCP#xff0c;支持多客户端连接采用数据库保存用户信息与历史记录将dict.txt的数据导入到数据库中保存。…一、项目要求 登录注册功能不能重复登录重复注册单词查询功能历史记录功能存储单词意思以及查询时间基于TCP支持多客户端连接采用数据库保存用户信息与历史记录将dict.txt的数据导入到数据库中保存。按下ctrlc退出客户端后注销该客户端的登录信息 二、主要实现功能  注册登录查询单词查询历史记录退出登录 三、框架设计 3.1 服务器  3.2 客户端 四、功能实现 4.1 服务器实现功能代码 4.1.1 导入词典 主要流程 创建并打开数据库创建数据表打开词典所在目录文件逐行读取并插入到数据表中关闭文件描述符关闭数据库 //导入词典 int import_dict(sqlite3 *db) {if(sqlite3_open(./dict.db,db) ! SQLITE_OK){fprintf(stderr,sqlite3_open: %s __%d__\n,sqlite3_errmsg(db),__LINE__);return -1;}//创建一个表char sql[128] create table if not exists dict (word char,mean char);;char *errmsg NULL;if(sqlite3_exec(db,sql,NULL,NULL,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}//打开文件FILE* fp fopen(./dict.txt, r);if(NULL fp){perror(fopen);return -1;}//循环读取文件中的数据一行一行的读取char buf[256] ;char word[32] ;char mean[200] ;int count 1;int i 0;char* ptr NULL;printf(importing dictionary...\n);while(1){if(fgets(buf, sizeof(buf), fp) NULL)break;buf[strlen(buf)-1] 0;//分离单词和意思bzero(word, sizeof(word));bzero(mean, sizeof(mean));//获取 子串在buf中的地址ptr strstr(buf, );if(NULL ptr){printf(没有找到对应子串\n);break;}strncpy(word, buf, ptr-buf); // 子串前面是单词strcpy(mean, ptr3); // 子串后面是意思 //插入到数据库中sprintf(sql,insert into dict values (\%s\, \%s\);, word, mean);if(sqlite3_exec(db, sql, NULL, NULL, errmsg) ! SQLITE_OK){printf(sqlite3_exec failed:%s __%d__\n, errmsg, __LINE__);return -1;}}//关闭文件fclose(fp);//关闭数据库释放对应的内存空间if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}printf(dictionary import completed...\n);return 0; } 4.1.2 注册 主要流程 创建并打开数据库创建数据表匹配来自客户端的用户名若存在则回复用户名已存在若不存在则将用户名与密码插入数据表中关闭数据库 //匹配用户名是否存在 int do_select_user(sqlite3 *db,char *name) {char sql[128] select name from user;;char **pres NULL;int row,column;char *errmsg NULL;if(sqlite3_get_table(db,sql,pres,row,column,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}for(int i1;i(row1)*column;i){if(strcmp(pres[i],name) 0){fprintf(stderr,sqlite3_exec: name already existss\n);return 1;}}return 0; } //实现注册功能 int Register(sqlite3 *db,char *buf) {//打开数据库if(sqlite3_open(./dict.db,db) ! SQLITE_OK){fprintf(stderr,sqlite3_open: %s __%d__\n,sqlite3_errmsg(db),__LINE__);return -1;}//创建一个表char sql[128] create table if not exists user (name char,passwd char);;char *errmsg NULL;if(sqlite3_exec(db,sql,NULL,NULL,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}char *name buf2;char *passwd buf2strlen(buf2)1;if(do_select_user(db,name) 1){return 1;}sprintf(sql,insert into user values (%s,%s);,name,passwd);if(sqlite3_exec(db,sql,NULL,NULL,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}printf(register success...\n);//关闭数据库释放对应的内存空间if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}return 0; } 4.1.3 登录 主要流程 创建并打开数据库创建数据表匹配来自客户端的用户名和密码若用户名和密码与数据库中的数据相匹配则登录成功否则登录失败关闭数据库 //实现登录功能 int Login(sqlite3 *db,char *buf) {//打开数据库if(sqlite3_open(./dict.db,db) ! SQLITE_OK){fprintf(stderr,sqlite3_open: %s __%d__\n,sqlite3_errmsg(db),__LINE__);return -1;}char sql[128] create table if not exists user (name char,passwd char);;char *errmsg NULL;if(sqlite3_exec(db,sql,NULL,NULL,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}strcpy(sql,select * from user;);char **pres NULL;int row,column;if(sqlite3_get_table(db,sql,pres,row,column,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}char *name buf2;char *passwd buf2strlen(buf2)1;for(int i2;i(row1)*column;i){if(strcmp(pres[i],name) 0 strcmp(pres[i1],passwd) 0){printf(login success...\n);if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}return 2;}}//关闭数据库释放对应的内存空间if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}return 3; } 4.1.4 查找单词 主要流程 创建并打开数据库创建数据表匹配来自客户端的单词若存在则返回查询结果并将查询记录插入到数据表中若不存在则查询失败关闭数据库 //插入记录 int Insert(sqlite3 *db,char *words,char *mean,char *save_buf) {//获取当前时间time_t t;struct tm *infoNULL;char mytime[128] ;t time(NULL);info localtime(t);sprintf(mytime,%d-%02d-%02d %02d:%02d:%02d,info-tm_year1900,info-tm_mon1,info-tm_mday,info-tm_hour,info-tm_min,info-tm_sec);//打开数据库if(sqlite3_open(./dict.db,db) ! SQLITE_OK){fprintf(stderr,sqlite3_open: %s __%d__\n,sqlite3_errmsg(db),__LINE__);return -1;}//创建一个表char sql[128] create table if not exists history (name char,word char,mean char,time char);;char *errmsg NULL;char *name save_buf;if(sqlite3_exec(db,sql,NULL,NULL,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}//插入记录sprintf(sql,insert into history values (\%s\,\%s\, \%s\,\%s\);,name,words, mean,mytime);if(sqlite3_exec(db, sql, NULL, NULL, errmsg) ! SQLITE_OK){printf(sqlite3_exec failed:%s __%d__\n, errmsg, __LINE__);return -1;}printf(Insert success...\n); }//查询单词 int Search(sqlite3 *db,char *buf,char *save_buf) {//打开数据库if(sqlite3_open(./dict.db,db) ! SQLITE_OK){fprintf(stderr,sqlite3_open: %s __%d__\n,sqlite3_errmsg(db),__LINE__);return -1;}char sql[128] select * from dict;;char **pres NULL;int row,column;char *errmsg NULL;if(sqlite3_get_table(db,sql,pres,row,column,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_get_table: %s __%d__\n,errmsg,__LINE__);return -1;}char *words buf2;for(int i0;i(row1)*column;i){if(strcmp(pres[i],words) 0){//若查询成功则将该单词插入记录Insert(db,words,pres[i1],save_buf);bzero(buf, sizeof(buf));sprintf(buf,\t%s\t\t%s\t,pres[i],pres[i1]);if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}return 4;}}//关闭数据库释放对应的内存空间if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}return 5; } 4.1.5 查找历史记录 主要流程 创建并打开数据库创建数据表匹配当前登录的用户名若存在记录则返回记录信息若不存在则查找失败关闭数据库 //查询记录 int Search_res(sqlite3 *db,char *buf,char *save_buf) {//打开数据库if(sqlite3_open(./dict.db,db) ! SQLITE_OK){fprintf(stderr,sqlite3_open: %s __%d__\n,sqlite3_errmsg(db),__LINE__);return -1;}char sql[128] create table if not exists history (name char,word char,mean char,time char);;char *errmsg NULL;if(sqlite3_exec(db,sql,NULL,NULL,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}char msg[128] ;strcpy(sql,select * from history;);char **pres NULL;int row,column;if(sqlite3_get_table(db,sql,pres,row,column,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_get_table: %s __%d__\n,errmsg,__LINE__);return -1;}bzero(buf,sizeof(buf));for(int i4;i(row1)*column;i){if(i%40 strcmp(save_buf,pres[i]) 0){sprintf(msg,%s\t%s\t%s\t%s\n,pres[i],pres[i1],pres[i2],pres[i3]);strcat(buf,msg);}}if(strlen(buf)!0)*(bufstrlen(buf)-1) 0;//关闭数据库释放对应的内存空间if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}if(strlen(buf) 0)return 7;return 6; } 4.2 客户端实现功能代码 #include head.h int main(int argc, const char *argv[]) {sqlite3 *db NULL;//创建流式套接字int cfd socket(AF_INET,SOCK_STREAM,0);if(cfd 0){perror(socket);fprintf(stderr,socket failed __%d__\n,__LINE__);return -1;}printf(socket success...\n);//设置允许端口号复用int reuse 1;if(setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, reuse, sizeof(reuse)) 0) {perror(setsockopt);return -1;}//填充地址信息结构体真是的地址信息结构体根据地址族制定struct sockaddr_in sin;sin.sin_family AF_INET;sin.sin_port htons(PORT);sin.sin_addr.s_addr inet_addr(IP);//连接服务器if(connect(cfd,(struct sockaddr *)sin,sizeof(sin)) 0){perror(connetc);return -1;}printf(connect success...\n);ssize_t res 0;char buf[128] ;char save_buf[128] ;while(1){system(clear);printf(--------------------------\n);printf(--------1.REGISTER--------\n);printf(--------2.LOGIN-----------\n);printf(--------3.EXIE------------\n);printf(--------------------------\n);bzero(buf,sizeof(buf));printf(please enter);fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] 0;char name[20] ;char passwd[20] ;if(strcmp(buf,1) 0){printf(please enter name);scanf(%s,name);getchar();printf(please enter passwd);scanf(%s,passwd);getchar();sprintf(buf,%s%c%s%c%s,1,0,name,0,passwd);}else if(strcmp(buf,2) 0){printf(please enter name);scanf(%s,name);getchar();printf(please enter passwd);scanf(%s,passwd);getchar();sprintf(buf,%s%c%s%c%s,2,0,name,0,passwd);}else if(strcmp(buf,3) 0)break;//发送数据if(send(cfd,buf,sizeof(buf),0) 0){perror(send);return -1;}//接受数据bzero(buf,sizeof(buf));res recv(cfd,buf,sizeof(buf),0);if(res 0){perror(recv);return -1;}else if(0 res){printf([%s : %d] server offline\n,IP,PORT);break;}printf(%s\n,buf);//另存bufstrcpy(save_buf,buf);while(strcmp(save_buf,[login success!]) 0){system(clear);printf(--------------------------\n);printf(-------1.SEARCH WORDS-----\n);printf(-------2.HISTORICAL ------\n);printf(-------3.EXIE LOGIN-------\n);printf(--------------------------\n);bzero(buf,sizeof(buf));printf(please enter);fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] 0;char words[20] ;if(strcmp(buf,1) 0){while(1){bzero(buf,sizeof(buf));printf(please enter word(enter \quit\ finished));scanf(%s,words);getchar();if(strcmp(words,quit#) 0)break;sprintf(buf,%s%c%s%c,3,0,words,0);//发送数据if(send(cfd,buf,sizeof(buf),0) 0){perror(send);return -1;}//接收查询单词结果bzero(buf,sizeof(buf));res recv(cfd,buf,sizeof(buf),0);if(res 0){perror(recv);return -1;}else if(0 res){printf([%s : %d] server offline\n,IP,PORT);// break;goto END;}printf(%s\n,buf);}}else if(strcmp(buf,2) 0){sprintf(buf,%s%c,4,0);//发送数据if(send(cfd,buf,sizeof(buf),0) 0){perror(send);return -1;}//接受查询单词结果bzero(buf,sizeof(buf));res recv(cfd,buf,sizeof(buf),0);if(res 0){perror(recv);return -1;}else if(0 res){printf([%s : %d] server offline\n,IP,PORT);goto END;// break;}printf(%s\n,buf);}else if(strcmp(buf,3) 0)break;printf(enter any character to clear);while(getchar()!10);}printf(enter any character to clear);while(getchar()!10);} END://关闭所有文件描述符close(cfd);return 0; } 五、完整代码 5.1 头文件 #ifndef __HEAD_H__ #define __HEAD_H__#include stdio.h #include sqlite3.h #include string.h #include sys/types.h #include sys/socket.h #include netinet/in.h #include arpa/inet.h #include stdlib.h #include unistd.h #include signal.h #include sys/wait.h #include time.h#define PORT 8808 //#define IP 192.168.122.92 #define IP 10.102.144.7 #define ERR_MSG(msg) { fprintf(stderr,__%d__,__LINE__); perror(msg); }int import_dict(sqlite3 *db); int Register(sqlite3 *db,char *buf); int Login(sqlite3 *db,char *buf); int Search(sqlite3 *db,char *buf,char *save_buf); int Insert(sqlite3 *db,char *words,char *mean,char *save_buf); int do_select_user(sqlite3 *db,char *name); void handler(int sig); int deal_cli_msg(int newfd,struct sockaddr_in cin,sqlite3 *db); int Search_res(sqlite3 *db,char *buf,char *save_buf);#endif 5.2 功能函数 #include head.h//导入词典 int import_dict(sqlite3 *db) {if(sqlite3_open(./dict.db,db) ! SQLITE_OK){fprintf(stderr,sqlite3_open: %s __%d__\n,sqlite3_errmsg(db),__LINE__);return -1;}//创建一个表char sql[128] create table if not exists dict (word char,mean char);;char *errmsg NULL;if(sqlite3_exec(db,sql,NULL,NULL,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}//打开文件FILE* fp fopen(./dict.txt, r);if(NULL fp){perror(fopen);return -1;}//循环读取文件中的数据一行一行的读取char buf[256] ;char word[32] ;char mean[200] ;int count 1;int i 0;char* ptr NULL;printf(importing dictionary...\n);while(1){if(fgets(buf, sizeof(buf), fp) NULL)break;buf[strlen(buf)-1] 0;//分离单词和意思bzero(word, sizeof(word));bzero(mean, sizeof(mean));//获取 子串在buf中的地址ptr strstr(buf, );if(NULL ptr){printf(没有找到对应子串\n);break;}strncpy(word, buf, ptr-buf); // 子串前面是单词strcpy(mean, ptr3); // 子串后面是意思 //插入到数据库中sprintf(sql,insert into dict values (\%s\, \%s\);, word, mean);if(sqlite3_exec(db, sql, NULL, NULL, errmsg) ! SQLITE_OK){printf(sqlite3_exec failed:%s __%d__\n, errmsg, __LINE__);return -1;}}//关闭文件fclose(fp);//关闭数据库释放对应的内存空间if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}printf(dictionary import completed...\n);return 0; }//匹配用户名是否存在 int do_select_user(sqlite3 *db,char *name) {char sql[128] select name from user;;char **pres NULL;int row,column;char *errmsg NULL;if(sqlite3_get_table(db,sql,pres,row,column,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}for(int i1;i(row1)*column;i){if(strcmp(pres[i],name) 0){fprintf(stderr,sqlite3_exec: name already existss\n);return 1;}}return 0; } //实现注册功能 int Register(sqlite3 *db,char *buf) {//打开数据库if(sqlite3_open(./dict.db,db) ! SQLITE_OK){fprintf(stderr,sqlite3_open: %s __%d__\n,sqlite3_errmsg(db),__LINE__);return -1;}//创建一个表char sql[128] create table if not exists user (name char,passwd char);;char *errmsg NULL;if(sqlite3_exec(db,sql,NULL,NULL,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}char *name buf2;char *passwd buf2strlen(buf2)1;if(do_select_user(db,name) 1){if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}return 1;}sprintf(sql,insert into user values (%s,%s);,name,passwd);if(sqlite3_exec(db,sql,NULL,NULL,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}printf(register success...\n);//关闭数据库释放对应的内存空间if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}return 0; } //实现登录功能 int Login(sqlite3 *db,char *buf) {//打开数据库if(sqlite3_open(./dict.db,db) ! SQLITE_OK){fprintf(stderr,sqlite3_open: %s __%d__\n,sqlite3_errmsg(db),__LINE__);return -1;}char sql[128] create table if not exists user (name char,passwd char);;char *errmsg NULL;if(sqlite3_exec(db,sql,NULL,NULL,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}strcpy(sql,select * from user;);char **pres NULL;int row,column;if(sqlite3_get_table(db,sql,pres,row,column,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}char *name buf2;char *passwd buf2strlen(buf2)1;for(int i2;i(row1)*column;i){if(strcmp(pres[i],name) 0 strcmp(pres[i1],passwd) 0){printf(login success...\n);if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}return 2;}}//关闭数据库释放对应的内存空间if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}return 3; } //插入记录 int Insert(sqlite3 *db,char *words,char *mean,char *save_buf) {//获取当前时间time_t t;struct tm *infoNULL;char mytime[128] ;t time(NULL);info localtime(t);sprintf(mytime,%d-%02d-%02d %02d:%02d:%02d,info-tm_year1900,info-tm_mon1,info-tm_mday,info-tm_hour,info-tm_min,info-tm_sec);//打开数据库if(sqlite3_open(./dict.db,db) ! SQLITE_OK){fprintf(stderr,sqlite3_open: %s __%d__\n,sqlite3_errmsg(db),__LINE__);return -1;}//创建一个表char sql[128] create table if not exists history (name char,word char,mean char,time char);;char *errmsg NULL;char *name save_buf;if(sqlite3_exec(db,sql,NULL,NULL,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}//插入记录sprintf(sql,insert into history values (\%s\,\%s\, \%s\,\%s\);,name,words, mean,mytime);if(sqlite3_exec(db, sql, NULL, NULL, errmsg) ! SQLITE_OK){printf(sqlite3_exec failed:%s __%d__\n, errmsg, __LINE__);return -1;}printf(Insert success...\n); }//查询单词 int Search(sqlite3 *db,char *buf,char *save_buf) {//打开数据库if(sqlite3_open(./dict.db,db) ! SQLITE_OK){fprintf(stderr,sqlite3_open: %s __%d__\n,sqlite3_errmsg(db),__LINE__);return -1;}char sql[128] select * from dict;;char **pres NULL;int row,column;char *errmsg NULL;if(sqlite3_get_table(db,sql,pres,row,column,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_get_table: %s __%d__\n,errmsg,__LINE__);return -1;}char *words buf2;for(int i0;i(row1)*column;i){if(strcmp(pres[i],words) 0){//若查询成功则将该单词插入记录Insert(db,words,pres[i1],save_buf);bzero(buf, sizeof(buf));sprintf(buf,\t%s\t\t%s\t,pres[i],pres[i1]);if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}return 4;}}//关闭数据库释放对应的内存空间if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}return 5; }//查询记录 int Search_res(sqlite3 *db,char *buf,char *save_buf) {//打开数据库if(sqlite3_open(./dict.db,db) ! SQLITE_OK){fprintf(stderr,sqlite3_open: %s __%d__\n,sqlite3_errmsg(db),__LINE__);return -1;}char sql[128] create table if not exists history (name char,word char,mean char,time char);;char *errmsg NULL;if(sqlite3_exec(db,sql,NULL,NULL,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_exec: %s __%d__\n,errmsg,__LINE__);return -1;}char msg[128] ;strcpy(sql,select * from history;);char **pres NULL;int row,column;if(sqlite3_get_table(db,sql,pres,row,column,errmsg) ! SQLITE_OK){fprintf(stderr,sqlite3_get_table: %s __%d__\n,errmsg,__LINE__);return -1;}bzero(buf,sizeof(buf));for(int i4;i(row1)*column;i){if(i%40 strcmp(save_buf,pres[i]) 0){sprintf(msg,%s\t%s\t%s\t%s\n,pres[i],pres[i1],pres[i2],pres[i3]);strcat(buf,msg);}}if(strlen(buf)!0)*(bufstrlen(buf)-1) 0;//关闭数据库释放对应的内存空间if(sqlite3_close(db) ! SQLITE_OK){printf(sqlite3_close failed:%s __%d__\n, sqlite3_errmsg(db), __LINE__);return -1;}if(strlen(buf) 0)return 7;return 6; } //服务器子进程处理客户端信息 int deal_cli_msg(int newfd,struct sockaddr_in cin,sqlite3 *db) {int flag 0; char buf[128] ;char save_buf[128] ;ssize_t res 0;int f_res -1;while(1){bzero(buf, sizeof(buf));//接收数据res recv(newfd, buf, sizeof(buf), 0);if(res 0){ERR_MSG(recv);return -1;}else if(0 res){printf([%s : %d] client offline\n,inet_ntoa(cin.sin_addr), ntohs(cin.sin_port)); break;}//调用功能函数if(strcmp(buf,1) 0)f_res Register(db,buf); //注册else if(strcmp(buf,2) 0){f_res Login(db,buf); //登录strcpy(save_buf,buf2); //将用户名另存}else if(strcmp(buf,3) 0){f_res Search(db,buf,save_buf); //查询单词}else if(strcmp(buf,4) 0)f_res Search_res(db,buf,save_buf); //查询记录//发送数据if(0 f_res){bzero(buf, sizeof(buf));strcpy(buf,[register success!]);}else if(1 f_res){ bzero(buf, sizeof(buf));strcpy(buf,[register failed,name already exists!]);}else if(2 f_res){bzero(buf, sizeof(buf));strcpy(buf,[login success!]);}else if(3 f_res){bzero(buf, sizeof(buf));strcpy(buf,[login failed,name/passwd does not exists!]);}else if(4 f_res){}else if(5 f_res){bzero(buf, sizeof(buf));strcpy(buf,[words not find!]);}else if(6 f_res){}else if(7 f_res){bzero(buf, sizeof(buf));strcpy(buf,[not find history!]);}if(send(newfd, buf, sizeof(buf), 0) 0){ERR_MSG(send);return -1;}}close(newfd);return 0; } //捕获信号 void handler(int sig) {while(waitpid(-1, NULL, WNOHANG) 0); } 5.3 服务器 #include head.h int main(int argc, const char *argv[]) {sqlite3 *db NULL;if(signal(17, handler) SIG_ERR){ERR_MSG(signal);return -1;}//导入词典import_dict(db);//创建流式套接字int sfd socket(AF_INET,SOCK_STREAM,0);if(sfd 0){ERR_MSG(socket);return -1;}//设置允许端口号复用int reuse 1;if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, reuse, sizeof(reuse)) 0) { perror(setsockopt);return -1;}//绑定服务器IP和端口号struct sockaddr_in sin;sin.sin_family AF_INET;sin.sin_port htons(PORT);sin.sin_addr.s_addr inet_addr(IP);if(bind(sfd,(struct sockaddr *)sin,sizeof(sin)) 0){ERR_MSG(bind);return -1;}//将套接字设置为被动监听状态if(listen(sfd,10) 0){ERR_MSG(listen);return -1;}int newfd -1;struct sockaddr_in cin;socklen_t addrlen sizeof(cin);//从已完成连接的队列中获取一个客户端信息生成一个新的文件描述符while(1){newfd accept(sfd,(struct sockaddr *)cin,addrlen);if(newfd 0){ERR_MSG(accept);return -1;}printf([%s : %d] connect success...\n,inet_ntoa(cin.sin_addr), ntohs(cin.sin_port));if(0 fork()){close(sfd);deal_cli_msg(newfd,cin,db);exit(0);}close(newfd);}close(sfd);return 0; } 5.4 客户端  #include head.h int main(int argc, const char *argv[]) {sqlite3 *db NULL;//创建流式套接字int cfd socket(AF_INET,SOCK_STREAM,0);if(cfd 0){perror(socket);fprintf(stderr,socket failed __%d__\n,__LINE__);return -1;}printf(socket success...\n);//设置允许端口号复用int reuse 1;if(setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, reuse, sizeof(reuse)) 0) {perror(setsockopt);return -1;}//填充地址信息结构体真是的地址信息结构体根据地址族制定struct sockaddr_in sin;sin.sin_family AF_INET;sin.sin_port htons(PORT);sin.sin_addr.s_addr inet_addr(IP);//连接服务器if(connect(cfd,(struct sockaddr *)sin,sizeof(sin)) 0){perror(connetc);return -1;}printf(connect success...\n);ssize_t res 0;char buf[128] ;char save_buf[128] ;while(1){system(clear);printf(--------------------------\n);printf(--------1.REGISTER--------\n);printf(--------2.LOGIN-----------\n);printf(--------3.EXIE------------\n);printf(--------------------------\n);bzero(buf,sizeof(buf));printf(please enter);fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] 0;char name[20] ;char passwd[20] ;if(strcmp(buf,1) 0){printf(please enter name);scanf(%s,name);getchar();printf(please enter passwd);scanf(%s,passwd);getchar();sprintf(buf,%s%c%s%c%s,1,0,name,0,passwd);}else if(strcmp(buf,2) 0){printf(please enter name);scanf(%s,name);getchar();printf(please enter passwd);scanf(%s,passwd);getchar();sprintf(buf,%s%c%s%c%s,2,0,name,0,passwd);}else if(strcmp(buf,3) 0)break;//发送数据if(send(cfd,buf,sizeof(buf),0) 0){perror(send);return -1;}//接受数据bzero(buf,sizeof(buf));res recv(cfd,buf,sizeof(buf),0);if(res 0){perror(recv);return -1;}else if(0 res){printf([%s : %d] server offline\n,IP,PORT);break;}printf(%s\n,buf);//另存bufstrcpy(save_buf,buf);while(strcmp(save_buf,[login success!]) 0){system(clear);printf(--------------------------\n);printf(-------1.SEARCH WORDS-----\n);printf(-------2.HISTORICAL ------\n);printf(-------3.EXIE LOGIN-------\n);printf(--------------------------\n);bzero(buf,sizeof(buf));printf(please enter);fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] 0;char words[20] ;if(strcmp(buf,1) 0){while(1){bzero(buf,sizeof(buf));printf(please enter word(enter \quit\ finished));scanf(%s,words);getchar();if(strcmp(words,quit) 0)break;sprintf(buf,%s%c%s%c,3,0,words,0);//发送数据if(send(cfd,buf,sizeof(buf),0) 0){perror(send);return -1;}//接收查询单词结果bzero(buf,sizeof(buf));res recv(cfd,buf,sizeof(buf),0);if(res 0){perror(recv);return -1;}else if(0 res){printf([%s : %d] server offline\n,IP,PORT);// break;goto END;}printf(%s\n,buf);}}else if(strcmp(buf,2) 0){sprintf(buf,%s%c,4,0);//发送数据if(send(cfd,buf,sizeof(buf),0) 0){perror(send);return -1;}//接受查询单词结果bzero(buf,sizeof(buf));res recv(cfd,buf,sizeof(buf),0);if(res 0){perror(recv);return -1;}else if(0 res){printf([%s : %d] server offline\n,IP,PORT);goto END;// break;}printf(%s\n,buf);}else if(strcmp(buf,3) 0)break;printf(enter any character to clear);while(getchar()!10);}printf(enter any character to clear);while(getchar()!10);} END://关闭所有文件描述符close(cfd);return 0; }
http://www.dnsts.com.cn/news/106156.html

相关文章:

  • 网站品牌推广设计建设一个网站平台要多少钱
  • 山西响应式网站建设设计做什么推广最赚钱
  • 网站建设营销的公司免费咨询法律律师在线12348
  • 如何做一个简单的网站公司注册地址是什么
  • 做商务网站公司专业网站运营制作
  • 创建一个个人网站需要多少钱树莓派可以用wordpress
  • 赤峰网站制作公司乐清市住房和城乡规划建设局网站
  • 富阳营销型网站建设wordpress推荐插件
  • 合作行业网站建设cms建设网站
  • 要想浏览国外网站 应该怎么做南昌有哪些推广平台
  • 大理网站制作公司太原网页设计师
  • 宁夏固原住房和建设局网站百度官网首页登录入口
  • wap网站制作开发公司网站改版活动
  • 秦皇岛市教育局长春优化所
  • 沂源网站建设yx718win10系统优化软件
  • 建设一个网站是不必须备案欧美风格英文网站设计
  • 建设电商网站报价永久8x的最新域名
  • 住房和城乡建设部贰级建造师网站asp网站开发招聘
  • thinkphp 网站开发手机网页怎么缩小比例
  • 建设银行宁波分行 招聘网站如何做好互联网营销
  • 在线观看视频的免费网站wordpress后台优化
  • 怎么给制作网站谷歌地图网站动效怎么做的
  • 用vs2013做网站网站快照回档
  • 怎么建立自己的站点wordpress主題
  • 无锡华士镇网站建设建设网站人员名单
  • 公司建网站公司下载网站开发
  • 辽宁住房和城乡建设部网站网站建设 公司 常州
  • 深圳网站的建设昆山设计公司
  • 全国开发一个网站需要多少钱龙岩建设局网站罗小波
  • 宁波怎么做外贸公司网站seo网站培训