基于TCP的在线英文词典(使用了sqlite3数据库)
生活随笔
收集整理的這篇文章主要介紹了
基于TCP的在线英文词典(使用了sqlite3数据库)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一,框架搭建
(建議使用代碼比較器軟件對比著來看)
客戶端:
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h>#define N 32#define R 1 #define L 2 #define Q 3 #define H 4typedef struct {int type;char name[N];char data[256]; }MSG;MSG msg; int n;void do_register(int sockfd,MSG *msg) {printf("register ok\n"); }int do_login(int sockfd,MSG *msg) {printf("login ok\n");return 1; }int do_query(int sockfd,MSG *msg) {printf("login ok\n");return 1; }int do_history(int sockfd,MSG *msg) {printf("login ok\n");return 0; }int main(int argc, char const *argv[]) {/* code */if(argc != 3){printf("argc err\n");return -1;}int sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd < 0){perror("sockfd err");return -1 ;}//struct sockaddr_in serveraddr;bzero(&serveraddr,sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr(argv[1]);serveraddr.sin_port = htons(atoi(argv[2]));//if(connect(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr))<0){perror("connect err");return -1;}//while(1){printf("**************************************\n");printf("****1,register*****2,login*****3,quit****\n");printf("******************************************\n");printf("please choose\n");scanf("%d",&n);getchar();switch (n){case 1:do_register(sockfd,&msg);break;case 2:if(do_login(sockfd,&msg)==1){goto next;}break;case 3:close(sockfd);exit(0);break;default:printf("num err\n");}}next:while (1){/* code */printf("****************************************\n");printf("1,query_word******2,history_record****3,quit\n");printf("****************************************\n");printf("please choose:\n");scanf("%d",&n);getchar();switch (n){case 1:do_query(sockfd,&msg);break;default:break;}}return 0; }服務器:
//gcc 電子詞典服務器.c -lsqlite3 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h> #include <sqlite3.h> #include <signal.h>#define N 32#define R 1 #define L 2 #define Q 3 #define H 4#define DATABASE "my_db"typedef struct {int type;char name[N];char data[256]; }MSG; // // // MSG msg; int n; sqlite3 *db; pid_t pid; int acceptfd; // // // int do_client(int acceptfd,sqlite3 *db); // // // void do_register(int sockfd,MSG *msg,sqlite3 *db) {printf("register ok\n"); } // // // int do_login(int sockfd,MSG *msg,sqlite3 *db) {printf("login ok\n");return 1; } // // // int do_query(int sockfd,MSG *msg,sqlite3 *db) {printf("login ok\n");return 1; } // // // int do_history(int sockfd,MSG *msg,sqlite3 *db) {printf("login ok\n");return 0; } // // // int main(int argc, char const *argv[]) {/* code */if(argc != 3){printf("argc err\n");return -1;}//if(sqlite3_open(DATABASE,&db) != SQLITE_OK){printf("%s\n",sqlite3_errmsg(db));return -1;}else{printf("open database success\n");}int sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd < 0){perror("sockfd err");return -1 ;}//struct sockaddr_in serveraddr;bzero(&serveraddr,sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr(argv[1]);serveraddr.sin_port = htons(atoi(argv[2]));//if(bind(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr))<0){perror("bind err");return -1;}//if(listen(sockfd,5)<0){printf("listen err\n");return -1;}//////signal(SIGCHLD,SIG_IGN);//處理僵尸進程////while (1){/* code */if((acceptfd = accept(sockfd,NULL,NULL))< 0){perror("acceptfd err");return -1;}//////if((pid == fork())<0){perror("fork err");return -1;}else if(pid == 0){close(sockfd);do_client(acceptfd,db);}else{close(acceptfd);}//////}//////return 0; } // // // int do_client(int acceptfd,sqlite3 *db) {while (recv(acceptfd,&msg,sizeof(msg),0)>0){/* code */switch (msg.type){case R:do_register(acceptfd,&msg,db);break;case L:do_login(acceptfd,&msg,db);break;case Q:do_query(acceptfd,&msg,db);break;case H:do_history(acceptfd,&msg,db);break;default:printf("msg.type err\n");}}//////close(acceptfd);exit(0);return 0; }二,添加“注冊”功能
客戶端:
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h>#define N 32#define R 1 #define L 2 #define Q 3 #define H 4typedef struct {int type;char name[N];char data[256]; }MSG;MSG msg; int n;void do_register(int sockfd,MSG *msg) {msg->type = R;printf("name:\n");scanf("%s",msg->name);getchar();printf("passwd:\n");scanf("%s",msg->data);if((send(sockfd,msg,sizeof(MSG),0))<0){printf("send err\n");//return -1;exit(1);}//////if((recv(sockfd,msg,sizeof(MSG),0))<0){printf("recv err\n");//return -1;exit(1);}//////printf("%s\n",msg->data);}int do_login(int sockfd,MSG *msg) {printf("login ok\n");return 1; }int do_query(int sockfd,MSG *msg) {printf("login ok\n");return 1; }int do_history(int sockfd,MSG *msg) {printf("login ok\n");return 0; }int main(int argc, char const *argv[]) {/* code */if(argc != 3){printf("argc err\n");return -1;}int sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd < 0){perror("sockfd err");return -1 ;}//struct sockaddr_in serveraddr;bzero(&serveraddr,sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr(argv[1]);serveraddr.sin_port = htons(atoi(argv[2]));//if(connect(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr))<0){perror("connect err");return -1;}//while(1){printf("**************************************\n");printf("****1,register*****2,login*****3,quit****\n");printf("******************************************\n");printf("please choose\n");scanf("%d",&n);getchar();switch (n){case 1:do_register(sockfd,&msg);break;case 2:if(do_login(sockfd,&msg)==1){goto next;}break;case 3:close(sockfd);exit(0);break;default:printf("num err\n");}}next:while (1){/* code */printf("****************************************\n");printf("1,query_word******2,history_record****3,quit\n");printf("****************************************\n");printf("please choose:\n");scanf("%d",&n);getchar();switch (n){case 1:do_query(sockfd,&msg);break;default:break;}}return 0; }服務器:
//gcc 電子詞典服務器.c -lsqlite3 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h> #include <sqlite3.h> #include <signal.h>#define N 32#define R 1 #define L 2 #define Q 3 #define H 4#define DATABASE "my_db"typedef struct {int type;char name[N];char data[256]; }MSG; // // // MSG msg; int n; sqlite3 *db; pid_t pid; int acceptfd; // // // int do_client(int acceptfd,sqlite3 *db); // // // void do_register(int acceptfd,MSG *msg,sqlite3 *db) {//char *errmsg;char sql[111];sprintf(sql,"insert into user values('%s',%s);",msg->name,msg->data);printf("%s\n",sql);if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){printf("%s\n",errmsg);strcpy(msg->data,"user name is already existing.");}else{/* code */printf("client register ok!\n");strcpy(msg->data,"ok");}//////if(send(acceptfd,msg,sizeof(MSG),0) < 0){perror("send err");return -1;} } // // // int do_login(int acceptfd,MSG *msg,sqlite3 *db) {printf("login ok\n");return 1; } // // // int do_query(int acceptfd,MSG *msg,sqlite3 *db) {printf("login ok\n");return 1; } // // // int do_history(int acceptfd,MSG *msg,sqlite3 *db) {printf("login ok\n");return 0; } // // // int main(int argc, char const *argv[]) {/* code */if(argc != 3){printf("argc err\n");return -1;}//if(sqlite3_open(DATABASE,&db) != SQLITE_OK){printf("%s\n",sqlite3_errmsg(db));return -1;}else{printf("open database success\n");}int sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd < 0){perror("sockfd err");return -1 ;}//struct sockaddr_in serveraddr;bzero(&serveraddr,sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr(argv[1]);serveraddr.sin_port = htons(atoi(argv[2]));//if(bind(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr))<0){perror("bind err");return -1;}//if(listen(sockfd,5)<0){printf("listen err\n");return -1;}//////signal(SIGCHLD,SIG_IGN);//處理僵尸進程////while (1){/* code */if((acceptfd = accept(sockfd,NULL,NULL))< 0){perror("acceptfd err");return -1;}//////if((pid == fork())<0){perror("fork err");return -1;}else if(pid == 0){close(sockfd);do_client(acceptfd,db);}else{close(acceptfd);}//////}//////return 0; } // // // int do_client(int acceptfd,sqlite3 *db) {while (recv(acceptfd,&msg,sizeof(msg),0)>0){/* code */printf("msg->type = %d\n",msg.type);switch (msg.type){case R:do_register(acceptfd,&msg,db);break;case L:do_login(acceptfd,&msg,db);break;case Q:do_query(acceptfd,&msg,db);break;case H:do_history(acceptfd,&msg,db);break;default:printf("msg.type err\n");}}//////close(acceptfd);exit(0);return 0; }三,添加”查詢“功能
客戶端:
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h>#define N 32#define R 1 #define L 2 #define Q 3 #define H 4typedef struct {int type;char name[N];char data[256]; }MSG;MSG msg; int n;void do_register(int sockfd,MSG *msg) {msg->type = R;printf("name:\n");scanf("%s",msg->name);getchar();printf("passwd:\n");scanf("%s",msg->data);if((send(sockfd,msg,sizeof(MSG),0))<0){printf("send err\n");//return -1;exit(1);}//////if((recv(sockfd,msg,sizeof(MSG),0))<0){printf("recv err\n");//return -1;exit(1);}//////printf("%s\n",msg->data);}int do_login(int sockfd,MSG *msg) {printf("login ok\n");return 1; }int do_query(int sockfd,MSG *msg) {//////msg->type = Q;puts("-------------------------");//////while (1){/* code */printf("please input word\n");scanf("%s",msg->data);if(strncmp(msg->data,"#",1) == 0)break;if(send(sockfd,msg,sizeof(MSG),0)<0){printf("send err\n");return -1;}if(recv(sockfd,msg,sizeof(MSG),0)<0){printf("recv err\n");return -1;} printf("%s\n",msg->data);}}int do_history(int sockfd,MSG *msg) {printf("login ok\n");return 0; }int main(int argc, char const *argv[]) {/* code */if(argc != 3){printf("argc err\n");return -1;}int sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd < 0){perror("sockfd err");return -1 ;}//struct sockaddr_in serveraddr;bzero(&serveraddr,sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr(argv[1]);serveraddr.sin_port = htons(atoi(argv[2]));//if(connect(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr))<0){perror("connect err");return -1;}//while(1){printf("**************************************\n");printf("****1,register*****2,login*****3,quit****\n");printf("******************************************\n");printf("please choose\n");scanf("%d",&n);getchar();switch (n){case 1:do_register(sockfd,&msg);break;case 2:if(do_login(sockfd,&msg)==1){goto next;}break;case 3:close(sockfd);exit(0);break;default:printf("num err\n");}}next:while (1){/* code */printf("****************************************\n");printf("1,query_word******2,history_record****3,quit\n");printf("****************************************\n");printf("please choose:\n");scanf("%d",&n);getchar();switch (n){case 1:do_query(sockfd,&msg);break;default:break;}}return 0; }服務器:
//gcc 電子詞典服務器.c -lsqlite3 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h> #include <sqlite3.h> #include <signal.h> #include <time.h>#define N 32#define R 1 #define L 2 #define Q 3 #define H 4#define DATABASE "my_db"typedef struct {int type;char name[N];char data[256]; }MSG; // // // MSG msg; int n; sqlite3 *db; pid_t pid; int acceptfd; // // // int do_client(int acceptfd,sqlite3 *db); // // // void do_register(int acceptfd,MSG *msg,sqlite3 *db) {//char *errmsg;char sql[111];sprintf(sql,"insert into user values('%s',%s);",msg->name,msg->data);printf("%s\n",sql);if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){printf("%s\n",errmsg);strcpy(msg->data,"user name is already existing.");}else{/* code */printf("client register ok!\n");strcpy(msg->data,"ok");}//////if(send(acceptfd,msg,sizeof(MSG),0) < 0){perror("send err");//return -1;} } // // // int do_login(int acceptfd,MSG *msg,sqlite3 *db) {printf("login ok\n");return 1; } // // int do_searchword(int acceptfd,MSG *msg,char word[]) {////int len = 0; //要查詢的單詞的長度////char temp[512] ={}; //用來讀文件,查詢單詞int result; //查詢單詞的比較結果////char *p; //查詢單詞所用////FILE *fp; //使用標準IO打開單詞表文件if((fp = fopen("./dictionary.txt","r")) == NULL){perror("fopen ./dictionary.txt err");strcpy(msg->data,"fopen ./dictionary.txt err");send(acceptfd,msg,sizeof(MSG),0);return -1;}//////計算單詞的長度len = strlen(word);printf("%s , len= %d\n",word,len);////while (fgets(temp,512,fp) != NULL){/* code */result = strncmp(temp,word,len);if(result > 0 ) //沒找到單詞就繼續找{continue;}if(result <0 || temp[len] != ' ') //找到了單詞{break;}////p = temp +len; //跳過空格,移動指針到單詞的解釋while (*p == ' '){/* code */p++;}////strcpy(msg->data,p);////fclose(fp);return 1;}} // // int get_shijian(char *shijian) {////time_t t;struct tm *tp;time(&t);localtime(&t);sprintf(shijian,"%d-%d-%d-%d:%d:%d",tp->tm_year + 1900,tp->tm_mon+1,tp->tm_mday,tp->tm_hour,tp->tm_min ,tp->tm_sec);return 0 ;} // // int do_query(int acceptfd,MSG *msg,sqlite3 *db) {////char word[64];int found = 0;char shijian[128];char sql[128] = {};char *errmsg;////strcpy(word,msg->data);found = do_searchword(acceptfd,msg,word);////if(found == 1){////get_shijian(shijian);////sprintf(sql,"insert into record values('%s','%s','%s')",msg->name,shijian,word);printf("%s\n",sql);////if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){printf("%s\n",errmsg);return -1;}}else{////strcpy(msg->data,"not found!");}send(acceptfd,msg,sizeof(MSG),0);return 0;} // // // int do_history(int acceptfd,MSG *msg,sqlite3 *db) {printf("login ok\n");return 0; } // // // int main(int argc, char const *argv[]) {/* code */if(argc != 3){printf("argc err\n");return -1;}//if(sqlite3_open(DATABASE,&db) != SQLITE_OK){printf("%s\n",sqlite3_errmsg(db));return -1;}else{printf("open database success\n");}int sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd < 0){perror("sockfd err");return -1 ;}//struct sockaddr_in serveraddr;bzero(&serveraddr,sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr(argv[1]);serveraddr.sin_port = htons(atoi(argv[2]));//if(bind(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr))<0){perror("bind err");return -1;}//if(listen(sockfd,5)<0){printf("listen err\n");return -1;}//////signal(SIGCHLD,SIG_IGN);//處理僵尸進程////while (1){/* code */if((acceptfd = accept(sockfd,NULL,NULL))< 0){perror("acceptfd err");return -1;}//////if((pid == fork())<0){perror("fork err");return -1;}else if(pid == 0){close(sockfd);do_client(acceptfd,db);}else{close(acceptfd);}//////}//////return 0; } // // // int do_client(int acceptfd,sqlite3 *db) {while (recv(acceptfd,&msg,sizeof(msg),0)>0){/* code */printf("msg->type = %d\n",msg.type);switch (msg.type){case R:do_register(acceptfd,&msg,db);break;case L:do_login(acceptfd,&msg,db);break;case Q:do_query(acceptfd,&msg,db);break;case H:do_history(acceptfd,&msg,db);break;default:printf("msg.type err\n");}}//////close(acceptfd);exit(0);return 0; }四,添加”歷史記錄“功能
客戶端:
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h>#define N 32#define R 1 #define L 2 #define Q 3 #define H 4typedef struct {int type;char name[N];char data[256]; }MSG;MSG msg; int n;void do_register(int sockfd,MSG *msg) {msg->type = R;printf("name:\n");scanf("%s",msg->name);getchar();printf("passwd:\n");scanf("%s",msg->data);if((send(sockfd,msg,sizeof(MSG),0))<0){printf("send err\n");//return -1;exit(1);}//////if((recv(sockfd,msg,sizeof(MSG),0))<0){printf("recv err\n");//return -1;exit(1);}//////printf("%s\n",msg->data);}int do_login(int sockfd,MSG *msg) {printf("login ok\n");return 1; }int do_query(int sockfd,MSG *msg) {//////msg->type = Q;puts("-------------------------");//////while (1){/* code */printf("please input word\n");scanf("%s",msg->data);if(strncmp(msg->data,"#",1) == 0)break;if(send(sockfd,msg,sizeof(MSG),0)<0){printf("send err\n");return -1;}if(recv(sockfd,msg,sizeof(MSG),0)<0){printf("recv err\n");return -1;} printf("%s\n",msg->data);}}int do_history(int sockfd,MSG *msg) {////msg->type = H; send(sockfd,msg,sizeof(MSG),0);while(1){recv(sockfd,msg,sizeof(MSG),0);if(msg->data[0] == '\0'){break;}printf("%s\n",msg->data);}return 0; }int main(int argc, char const *argv[]) {/* code */if(argc != 3){printf("argc err\n");return -1;}int sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd < 0){perror("sockfd err");return -1 ;}//struct sockaddr_in serveraddr;bzero(&serveraddr,sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr(argv[1]);serveraddr.sin_port = htons(atoi(argv[2]));//if(connect(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr))<0){perror("connect err");return -1;}//while(1){printf("**************************************\n");printf("****1,register*****2,login*****3,quit****\n");printf("******************************************\n");printf("please choose\n");scanf("%d",&n);getchar();switch (n){case 1:do_register(sockfd,&msg);break;case 2:if(do_login(sockfd,&msg)==1){goto next;}break;case 3:close(sockfd);exit(0);break;default:printf("num err\n");}}next:while (1){/* code */printf("****************************************\n");printf("1,query_word******2,history_record****3,quit\n");printf("****************************************\n");printf("please choose:\n");scanf("%d",&n);getchar();switch (n){case 1:do_query(sockfd,&msg);break;default:break;}}return 0; }服務器:
//gcc 電子詞典服務器.c -lsqlite3 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h> #include <sqlite3.h> #include <signal.h> #include <time.h>#define N 32#define R 1 #define L 2 #define Q 3 #define H 4#define DATABASE "my_db"typedef struct {int type;char name[N];char data[256]; }MSG; // // MSG msg; int n; sqlite3 *db; pid_t pid; int acceptfd; // // int history_callback(void *arg,int f_num,char** f_value,char **f_name); // int do_client(int acceptfd,sqlite3 *db); // int do_searchword(int acceptfd,MSG *msg,char word[]); // int get_shijian(char *shijian); // // void do_register(int acceptfd,MSG *msg,sqlite3 *db) {//char *errmsg;char sql[111];sprintf(sql,"insert into user values('%s',%s);",msg->name,msg->data);printf("%s\n",sql);if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){printf("%s\n",errmsg);strcpy(msg->data,"user name is already existing.");}else{/* code */printf("client register ok!\n");strcpy(msg->data,"ok");}//////if(send(acceptfd,msg,sizeof(MSG),0) < 0){perror("send err");//return -1;} } // // // int do_login(int acceptfd,MSG *msg,sqlite3 *db) {printf("login ok\n");return 1; } // // int do_searchword(int acceptfd,MSG *msg,char word[]) {////int len = 0; //要查詢的單詞的長度////char temp[512] ={}; //用來讀文件,查詢單詞int result; //查詢單詞的比較結果////char *p; //查詢單詞所用////FILE *fp; //使用標準IO打開單詞表文件if((fp = fopen("./dictionary.txt","r")) == NULL){perror("fopen ./dictionary.txt err");strcpy(msg->data,"fopen ./dictionary.txt err");send(acceptfd,msg,sizeof(MSG),0);return -1;}//////計算單詞的長度len = strlen(word);printf("%s , len= %d\n",word,len);////while (fgets(temp,512,fp) != NULL){/* code */result = strncmp(temp,word,len);if(result > 0 ) //沒找到單詞就繼續找{continue;}if(result <0 || temp[len] != ' ') //找到了單詞{break;}////p = temp +len; //跳過空格,移動指針到單詞的解釋while (*p == ' '){/* code */p++;}////strcpy(msg->data,p);////fclose(fp);return 1;}} // // int get_shijian(char *shijian) {////time_t t;struct tm *tp;time(&t);localtime(&t);sprintf(shijian,"%d-%d-%d-%d:%d:%d",tp->tm_year + 1900,tp->tm_mon+1,tp->tm_mday,tp->tm_hour,tp->tm_min ,tp->tm_sec);return 0 ;} // // int do_query(int acceptfd,MSG *msg,sqlite3 *db) {////char word[64];int found = 0;char shijian[128];char sql[128] = {};char *errmsg;////strcpy(word,msg->data);found = do_searchword(acceptfd,msg,word);////if(found == 1){////get_shijian(shijian);////sprintf(sql,"insert into record values('%s','%s','%s')",msg->name,shijian,word);printf("%s\n",sql);////if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){printf("%s\n",errmsg);return -1;}}else{////strcpy(msg->data,"not found!");}send(acceptfd,msg,sizeof(MSG),0);return 0;} // // int history_callback(void *arg,int f_num,char** f_value,char **f_name) {////int acceptfd;MSG msg;////acceptfd = *((int *)arg);////sprintf(msg.data,"%s,%s",f_value[1],f_value[2]);send(acceptfd,&msg,sizeof(MSG),0);return 0; } // // int do_history(int acceptfd,MSG *msg,sqlite3 *db) {////char sql[128]={};char *errmsg;////sprintf(sql,"select * from record where name = '%s'",msg->name);////if(sqlite3_exec(db,sql,history_callback,(void *)&acceptfd,&errmsg) != SQLITE_OK){printf("%s\n",errmsg);}else{printf("ok\n");}////msg->data[0] = '\0';send(acceptfd,msg,sizeof(MSG),0);////return 0;} // // // int main(int argc, char const *argv[]) {/* code */if(argc != 3){printf("argc err\n");return -1;}//if(sqlite3_open(DATABASE,&db) != SQLITE_OK){printf("%s\n",sqlite3_errmsg(db));return -1;}else{printf("open database success\n");}int sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd < 0){perror("sockfd err");return -1 ;}//struct sockaddr_in serveraddr;bzero(&serveraddr,sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr(argv[1]);serveraddr.sin_port = htons(atoi(argv[2]));//if(bind(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr))<0){perror("bind err");return -1;}//if(listen(sockfd,5)<0){printf("listen err\n");return -1;}//////signal(SIGCHLD,SIG_IGN);//處理僵尸進程////while (1){/* code */if((acceptfd = accept(sockfd,NULL,NULL))< 0){perror("acceptfd err");return -1;}//////if((pid == fork())<0){perror("fork err");return -1;}else if(pid == 0){close(sockfd);do_client(acceptfd,db);}else{close(acceptfd);}//////}//////return 0; } // // // int do_client(int acceptfd,sqlite3 *db) {while (recv(acceptfd,&msg,sizeof(msg),0)>0){/* code */printf("msg->type = %d\n",msg.type);switch (msg.type){case R:do_register(acceptfd,&msg,db);break;case L:do_login(acceptfd,&msg,db);break;case Q:do_query(acceptfd,&msg,db);break;case H:do_history(acceptfd,&msg,db);break;default:printf("msg.type err\n");}}//////close(acceptfd);exit(0);return 0; }總結
以上是生活随笔為你收集整理的基于TCP的在线英文词典(使用了sqlite3数据库)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记DL003:神经网络第二、三次浪
- 下一篇: MySQLClient instal e