找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3827|回复: 0
打印 上一主题 下一主题
收起左侧

在线电子词典项目C语言源码

[复制链接]
跳转到指定楼层
楼主
逻辑清晰,框架规范的在线电子词典源程序


C语言源程序如下:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <sqlite3.h>
  4. #define MAXLEN_DATA 256

  5. int main ()
  6. {
  7.     char buff[MAXLEN_DATA]={0};
  8.     FILE *fp;
  9.     int i= 0;
  10.     char word[35]="\0";
  11.     char *p;
  12.     char meaning[256];
  13.     char sql_cmd[128];
  14.     char *errmsg;
  15.     sqlite3 *db;

  16.     /*查找单词*/
  17.     if ((fp = fopen("dict.txt", "r")) == NULL)
  18.     {
  19.         perror("fail to open");
  20.         return -1;
  21.     }



  22.     if( sqlite3_open("wmk.db", &db) != SQLITE_OK)
  23.     {
  24.         printf("fail to open %s\n",sqlite3_errmsg(db));

  25.     }


  26.     while (fgets(buff, MAXLEN_DATA, fp) != NULL)
  27.     {
  28.         i= 0;
  29.         p= buff;
  30.         while (*p != ' ')
  31.         {
  32.             word[i] = *p;
  33.             i++;
  34.             p++;
  35.             continue;//跳过第一个单词
  36.         }
  37.         word[i] = '\0';
  38.         while (*(++p) == ' ')
  39.         {
  40.             continue;//跳过单词后面的空格
  41.         }
  42.         strcpy(meaning,p);
  43.         sprintf(sql_cmd,"insert into word values('%s','%s')",word,meaning);
  44.         if(sqlite3_exec(db, sql_cmd,NULL,NULL,&errmsg) != SQLITE_OK)
  45.         {
  46.             printf("fail exec\n");
  47.         }

  48.     }
  49.     if( sqlite3_close(db) != SQLITE_OK)
  50. {
  51.     printf("fail to close %s\n",sqlite3_errmsg(db));
  52.    
  53. }
  54. return 0;
  55. }
复制代码
  1. /*************************************************************************
  2. > File Name: dict_server.c
  3. > Author: WangMingkai
  4. > Created Time: Sun 22 Apr 2018 06:40:59 PM CST
  5. ************************************************************************/

  6. #include<stdio.h>
  7. #include<stdlib.h>
  8. #include<string.h>
  9. #include<sys/types.h>
  10. #include<sys/stat.h>
  11. #include<fcntl.h>
  12. #include<sys/socket.h>
  13. #include<unistd.h>
  14. #include<netinet/in.h>
  15. #include<arpa/inet.h>
  16. #include<sqlite3.h>
  17. #include<signal.h>
  18. #include<time.h>
  19. #include<pthread.h>
  20. #include<time.h>



  21. //定义用户数据结构体
  22. struct message_user
  23. {
  24.     char name[24];
  25.     char password[24];
  26.     char telephone[24];
  27.     char address[24];
  28.        
  29.     char word[18];
  30.     char meaning[256];
  31.        
  32.     char record[48][24];//存放查找结果内容的数组
  33.     char head[6][24]; //存放查找结果字段名称的数组
  34.        
  35.     int state;  //用户在线状态
  36.     int nrow;   //数据库函数执行后得到记录的数目
  37.     int ncolumn;//数据库函数执行后得到字段的数目
  38.        
  39.     int flag;   //客户端发送的命令
  40.        
  41.     int err;    //判断执行数据库函数后是否成功
  42.        
  43.     int binary; //判断查询历史记录的方式,0/姓名,1/单词
  44.        
  45.     int update; //修改个人信息选项,0/密码,1/电话,2/地址
  46. };
  47. typedef struct message_user Mess_user;

  48. char buffer1[256]={0};
  49. int fd;

  50. time_t timep;
  51. //使用多线程来实现并发服务器
  52. void *fun_pthread(void *arg)
  53. {

  54.     int  accept_sock_fd = *(int *)arg;
  55.     int addrlen;
  56.     Mess_user user;
  57.     char word[18] = {0};
  58.     char sql_cmd1[128] = {0};
  59.     char sql_cmd2[128] = {0};
  60.     time_t t;
  61.     int flag;
  62.     free(arg);
  63.     char buff[128];
  64.     char time_c[30];
  65.    
  66.     int num = 1;
  67.     int i, j, index;

  68.     char **resultp;
  69.     int nrow, ncolumn;

  70.     sqlite3 *db;
  71.     char *errmsg;

  72.     //打开sqlite3数据库
  73.     if(sqlite3_open("wmk.db", &db) != 0)
  74.     {
  75.         perror("fail open sqlite3");
  76.         exit(-1);
  77.     }

  78.     while(1)
  79.     {

  80.         if(read(accept_sock_fd, &user, sizeof(struct message_user)) == -1)
  81.         {
  82.             perror("fail recv flag");
  83.             exit(-1);
  84.         }
  85.         switch(user.flag)
  86.         {
  87.             case 1:
  88.             //向数据库中插入用户名信息
  89.             read(accept_sock_fd, &user, sizeof(struct message_user));
  90.             sprintf(sql_cmd1,"select * from user where name='%s'",user.name);
  91.             if(sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg) != 0)
  92.             {
  93.                 printf("fail exec %s\n",errmsg);
  94.                 exit(-1);
  95.             }
  96.             if(nrow != 0)
  97.             {
  98.                 user.err = 1;
  99.                 write(accept_sock_fd, &user, sizeof(struct message_user));
  100.                 break;
  101.             }
  102.             if(nrow == 0)
  103.             {
  104.                 user.err = 0;
  105.                 write(accept_sock_fd, &user, sizeof(struct message_user));

  106.                 read(accept_sock_fd, &user, sizeof(struct message_user));

  107.                 sprintf(sql_cmd2,"insert into user values ('%s','%s','%s','%s', %d)", user.name, user.password, user.telephone, user.address, user.state);
  108.                
  109.                 if(sqlite3_get_table(db, sql_cmd2, &resultp, &nrow, &ncolumn, &errmsg) != 0)
  110.                 {
  111.                     printf("fail exec %s\n",errmsg);
  112.                     exit(-1);
  113.                 }
  114.                     
  115.                 user.err = 0;
  116.                 write(accept_sock_fd, &user, sizeof(struct message_user));
  117.                 time(&timep);//参数是能返回 time_t 型对象 的指针 timer ,那里存放着当时时间。
  118.                 strcpy(time_c, ctime(&timep));
  119.                 sprintf(buff, "%s用户%s注册\n", time_c, user.name);
  120.                 write(fd, buff, strlen(buff));
  121.                
  122.             }
  123.                 break;

  124.             //用户开始登录
  125.             case 2:
  126.             
  127.             read(accept_sock_fd, &user, sizeof(struct message_user));

  128.             sprintf(sql_cmd1,"select * from user where name='%s'",user.name);
  129.             
  130.             if(sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg) != 0)
  131.             {
  132.                
  133.                 printf("fail exec %s\n",errmsg);
  134.                 exit(-1);
  135.             }
  136.             if( nrow == 0 )
  137.             {

  138.                 user.err = 1;
  139.                 write(accept_sock_fd, &user, sizeof(struct message_user));
  140.                 break;
  141.                
  142.             }
  143.             if( nrow == 1)
  144.             {

  145.                 user.err = 0;
  146.                 write(accept_sock_fd, &user, sizeof(struct message_user));
  147.                 while(num != 0)
  148.                 {
  149.                     read(accept_sock_fd, &user, sizeof(struct message_user));

  150.                     sprintf(sql_cmd2,"select password from user where name='%s'",user.name);
  151.                
  152.                     if(sqlite3_get_table(db, sql_cmd2, &resultp, &nrow, &ncolumn, &errmsg) != 0)
  153.                     {
  154.                         printf("fail exec %s\n",errmsg);
  155.                         exit(-1);
  156.                     }
  157.                     num = strcmp(user.password, resultp[ncolumn]);
  158.                     if(num == 0)
  159.                     {
  160.                         user.err = 0;//登录成功
  161.                         sprintf(sql_cmd1, "update user set state=1 where name='%s'", user.name);
  162.                         sqlite3_exec(db, sql_cmd1, NULL, NULL,&errmsg);
  163.                         time(&timep);
  164.                         strcpy(time_c, ctime(&timep));
  165.                         sprintf(buff, "%s用户%s登录\n", time_c, user.name);
  166.                         write(fd, buff, strlen(buff));
  167.                     }
  168.                     if(num != 0)
  169.                     {
  170.                         user.err = 1;//登录失败
  171.                     }
  172.                     write(accept_sock_fd, &user, sizeof(struct message_user));

  173.                 }
  174.             }
  175.                 break;

  176.             case 3:
  177.             //开始查找单词含义,在数据库中插入查找时间戳记录,并把查找结果发送给客户端
  178.             if(read(accept_sock_fd, &user, sizeof(struct message_user)) == -1)
  179.             {
  180.                 perror("fail recv word");
  181.                 exit(-1);
  182.             }
  183.             sprintf(sql_cmd1,"select meaning from word where word='%s'",user.word);
  184.                
  185.             if(sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg) != 0)
  186.             {
  187.                 printf("fail exec %s\n",errmsg);
  188.                 exit(-1);
  189.             }
  190.             if(nrow == 0)
  191.             {
  192.                 user.err = 1;   
  193.                 write(accept_sock_fd, &user,sizeof(struct message_user));
  194.                 break;
  195.             }
  196.             if(nrow != 0)
  197.             {
  198.                 strcpy(user.meaning, resultp[ncolumn]);
  199.                 user.err = 0;
  200.                 write(accept_sock_fd, &user,sizeof(struct message_user));
  201.                 sprintf(sql_cmd1, "insert into record values ('%s','%s')", user.name, user.word);
  202.                 if(sqlite3_exec(db,sql_cmd1, NULL, NULL, &errmsg) != 0)
  203.                 {
  204.                     printf("fail ecec %s\n",errmsg);
  205.                     exit(-1);
  206.                 }
  207.                 time(&timep);
  208.                 strcpy(time_c, ctime(&timep));
  209.                 sprintf(buff, "%s用户%s查找单词%s\n", time_c, user.name, user.word);
  210.                 write(fd, buff, strlen(buff));
  211.             
  212.                 break;
  213.             }
  214.             case 4:
  215.                 //查找历史记录
  216.             read(accept_sock_fd, &user, sizeof(struct message_user));
  217.             if(user.binary == 0)
  218.             {
  219.                 sprintf(sql_cmd1,"select word from record where name='%s'",user.name);
  220.             }
  221.             if(user.binary == 1)
  222.             {
  223.                 sprintf(sql_cmd1,"select name from record where word='%s'",user.word);
  224.             }
  225.             if(sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg) != 0)
  226.             {
  227.                 printf("fail exec %s\n",errmsg);
  228.                 exit(-1);
  229.             }
  230.             if( nrow == 0 )
  231.             {
  232.                 user.err = 1;
  233.                 write(accept_sock_fd, &user, sizeof(struct message_user));
  234.                 break;
  235.             }
  236.             if( nrow != 0)
  237.             {
  238.                 user.err = 0;
  239.                 j = ncolumn;
  240.                 for(i = 0; i < nrow; i++)
  241.                 {
  242.                     strcpy(user.record[i], resultp[j++]);
  243.                 }
  244.                 user.nrow = nrow;
  245.                 write(accept_sock_fd, &user, sizeof(struct message_user));
  246.                 time(&timep);
  247.                 strcpy(time_c, ctime(&timep));
  248.                 sprintf(buff, "%s用户%s查看历史记录\n", time_c, user.name);
  249.                 write(fd, buff, strlen(buff));
  250.                
  251.             }
  252.                 break;
  253.             case 5:
  254.                 //查看个人信息
  255.             read(accept_sock_fd, &user, sizeof(struct message_user));
  256.             sprintf(sql_cmd1, "select * from  user  where name='%s'", user.name);
  257.             sqlite3_exec(db, ".header on", NULL, NULL, &errmsg);
  258.             sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg);
  259.             sqlite3_exec(db, ".header off", NULL, NULL, &errmsg);

  260.             if( nrow == 0 )
  261.             {
  262.                 user.err = 1;
  263.                 write(accept_sock_fd, &user, sizeof(struct message_user));
  264.                 break;
  265.             }
  266.             if( nrow != 0)
  267.             {
  268.                 user.err = 0;
  269.                 index = ncolumn;
  270.                 for(i = 0; i < nrow; i++)
  271.                 {
  272.                     for(j = 0; j < ncolumn; j++)
  273.                     {
  274.                         strcpy(user.record[j], resultp[index++]);
  275.                         strcpy(user.head[j], resultp[j]);

  276.                     }
  277.                 }
  278.                 user.nrow = nrow;
  279.                 user.ncolumn = ncolumn;
  280.                 write(accept_sock_fd, &user, sizeof(struct message_user));
  281.                 time(&timep);
  282.                 strcpy(time_c, ctime(&timep));
  283.                 sprintf(buff, "%s用户%s查看个人信息\n", time_c, user.name);
  284.                 write(fd, buff, strlen(buff));
  285.                
  286.             }
  287.                

  288.                 break;
  289.             case 6:
  290.                 //修改个人信息
  291.                 read(accept_sock_fd, &user, sizeof(struct message_user));
  292.                 if(user.update == 0)
  293.                 {
  294.                     
  295.                     sprintf(sql_cmd1,"select password from user where name='%s'",user.name);
  296.                     sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg);
  297.                     num = strcmp(user.password, resultp[ncolumn]);
  298.                     if(num != 0)
  299.                     {
  300.                         user.nrow = 0;
  301.                         write(accept_sock_fd, &user, sizeof(struct message_user));
  302.                         break;
  303.                     }
  304.                     if(num == 0)
  305.                     {
  306.                         user.nrow = 1;
  307.                         write(accept_sock_fd, &user, sizeof(struct message_user));
  308.                         read(accept_sock_fd, &user, sizeof(struct message_user));
  309.                         
  310.                         sprintf(sql_cmd2,"update user set password='%s' where name='%s'", user.password, user.name);
  311.                         if(sqlite3_get_table(db, sql_cmd2, &resultp, &nrow, &ncolumn, &errmsg) != 0)
  312.                         {
  313.                             user.err = 1;
  314.                         }
  315.                         else
  316.                             user.err = 0;
  317.                         write(accept_sock_fd, &user, sizeof(struct message_user));
  318.                         time(&timep);
  319.                         strcpy(time_c, ctime(&timep));
  320.                         sprintf(buff, "%s用户%s修改个人密码为%s\n", time_c, user.name, user.password);
  321.                         write(fd, buff, strlen(buff));
  322.                         break;
  323.                         
  324.                     }
  325.                 }
  326.                 if(user.update == 1)
  327.                 {
  328.                     sprintf(sql_cmd1,"update user set telephone='%s' where name='%s'", user.telephone, user.name);
  329.                     if(sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg) != 0)
  330.                     {
  331.                         user.err = 1;
  332.                     }
  333.                     else
  334.                         user.err = 0;
  335.                     write(accept_sock_fd, &user, sizeof(struct message_user));
  336.                     time(&timep);
  337.                     strcpy(time_c, ctime(&timep));
  338.                     sprintf(buff, "%s用户%s修改个人电话为%s\n", time_c, user.name, user.telephone);
  339.                     write(fd, buff, strlen(buff));
  340.                     break;
  341.                         
  342.                 }
  343.                 if(user.update == 2)
  344.                 {
  345.                     sprintf(sql_cmd1,"update user set address='%s' where name='%s'", user.address, user.name);
  346.                     if(sqlite3_get_table(db, sql_cmd1, &resultp, &nrow, &ncolumn, &errmsg) != 0)
  347.                     {
  348.                         user.err = 1;
  349.                     }
  350.                     else
  351.                         user.err = 0;
  352.                     write(accept_sock_fd, &user, sizeof(struct message_user));
  353.                     time(&timep);
  354.                     strcpy(time_c, ctime(&timep));
  355.                     sprintf(buff, "%s用户%s修改个人地址为%s\n", time_c, user.name, user.address);
  356.                     write(fd, buff, strlen(buff));
  357.                     break;
  358.                 }
  359.                
  360.             case 0:
  361.                 //关闭数据
  362.                 read(accept_sock_fd, &user, sizeof(struct message_user));
  363.                 sprintf(sql_cmd1, "update user set state=0 where name='%s'", user.name);
  364.                 sqlite3_exec(db, sql_cmd1, NULL, NULL,&errmsg);
  365.                 time(&timep);
  366.                 strcpy(time_c, ctime(&timep));
  367.                 sprintf(buff, "%s用户%s退出\n", time_c, user.name);
  368.                 write(fd, buff, strlen(buff));
  369.                 break;
  370.         }
  371.         if(user.flag == 0)
  372.             break;
  373.     }
  374.     sqlite3_close(db);
  375.     pthread_exit(NULL);
  376. }

  377. //管理员模式显示所有用户
  378. void fun_admin_show(sqlite3 *db)
  379. {
  380.    
  381.     char *errmsg, **resultp;
  382.     int nrow, ncolumn, i, j, index;

  383.     if(sqlite3_get_table(db, "select * from user", &resultp, &nrow, &ncolumn, &errmsg) != 0)
  384.     {
  385.         printf("fail admin show : %s\n",errmsg);
  386.         return;
  387.     }
  388.     index = ncolumn;
  389.     for(i = 0; i < nrow; i++)
  390.     {
  391.         for(j = 0; j < ncolumn; j++)
  392.         {
  393.             printf("%s:%s\n", resultp[j], resultp[index++]);
  394.         }
  395.         printf("-------------------------------------\n");
  396.     }
  397. }
  398. //管理员模式修改用户信息
  399. void fun_admin_alter(sqlite3 *db)
  400. {
  401.     char name[24];
  402.     char telephone[24];
  403.     char address[24];
  404.     int alter_cmd;
  405.     char sql[128];
  406.     char *errmsg, **resultp;
  407.     int nrow, ncolumn, i, j, index;

  408.     while(1)
  409.     {
  410.         printf("请输入您要修改的用户名:");
  411.         scanf("%s",name);
  412.         sprintf(sql, "select * from user where name='%s'",name);
  413.         sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg);
  414.         if(nrow == 0)
  415.         {
  416.             printf("没有此用户,请更换用户名\n");
  417.         }
  418.         if(nrow != 0)
  419.         {
  420.             while(1)
  421.             {
  422.                 printf("请输入您要修改的属性(0/电话,1/地址):");
  423.                 scanf("%d",&alter_cmd);
  424.                 if(alter_cmd > 1 || alter_cmd < 0)
  425.                 {
  426.                     printf("输入错误,请重新输入\n");
  427.                 }
  428.                 else
  429.                 {
  430.                     if(alter_cmd == 0)
  431.                     {
  432.                         printf("请输入需要更改的新电话号码:");
  433.                         scanf("%s",telephone);
  434.                         sprintf(sql, "update user set telephone='%s' where name='%s'", telephone, name);
  435.                         if(sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg) == 0)
  436.                         {
  437.                             printf("更改成功!\n");
  438.                             break;
  439.                         }
  440.                     }
  441.                     if(alter_cmd == 1)
  442.                     {
  443.                         printf("请输入需要更改的新地址:");
  444.                         scanf("%s",address);
  445.                         sprintf(sql, "update user set address='%s' where name='%s'", address, name);
  446.                         if(sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg) == 0)
  447.                         {
  448.                             printf("更改成功!\n");
  449.                             break;
  450.                         }
  451.                     }

  452.                 }
  453.             }
  454.             break;
  455.             
  456.         }
  457.     }  
  458. }
  459. //管理员模式添加用户
  460. void fun_admin_add(sqlite3 *db)
  461. {
  462.     char name[24];
  463.     char password[24];
  464.     char telephone[24];
  465.     char address[24];
  466.     int state;
  467.     char sql[128];
  468.     char *errmsg, **resultp;
  469.     int nrow, ncolumn, i, j, index;
  470.    
  471.     while(1)
  472.     {
  473.         printf("请输入您要添加的用户名:");
  474.         scanf("%s",name);
  475.         sprintf(sql, "select * from user where name='%s'",name);
  476.         sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg);
  477.         if(nrow == 1)
  478.         {
  479.             printf("该用户已存在,请更换用户名\n");
  480.         }
  481.         if(nrow == 0)
  482.         {
  483.             printf("请输入您的密码:");
  484.             scanf("%s",password);
  485.             printf("请输入您的电话:");
  486.             scanf("%s",telephone);
  487.             printf("请输入您的地址:");
  488.             scanf("%s",address);
  489.             state = 0;
  490.             sprintf(sql, "insert into user values ('%s', '%s', '%s', '%s', %d)", name, password, telephone, address, state);
  491.             if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) == 0)
  492.             {
  493.                 printf("添加成功!");
  494.                 break;
  495.             }
  496.             else
  497.             {
  498.                 printf("添加失败\n");
  499.             }
  500.         }
  501.     }
  502. }
  503. //管理员删除用户
  504. void fun_admin_delete(sqlite3 *db)
  505. {
  506.     char name[24];
  507.     char sql[128];
  508.     char *errmsg, **resultp;
  509.     int nrow, ncolumn;

  510.     while(1)
  511.     {
  512.         printf("请输入您要删除的用户名:");
  513.         scanf("%s", name);
  514.         sprintf(sql, "select * from user where name='%s'",name);
  515.         sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg);
  516.         if(nrow == 0)
  517.         {
  518.             printf("该用户不存在,请更换用户名\n");
  519.         }
  520.         if(nrow != 0)
  521.         {
  522.             
  523.             sprintf(sql, "delete from user where name='%s'",name);
  524.             if(sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg) == 0)
  525.             {
  526.                 printf("删除用户成功\n");
  527.                 break;
  528.             }
  529.         }

  530.     }
  531. }

  532. //服务器的管理员模式
  533. void *fun_admin_pthread()
  534. {
  535.     int f_cmd;
  536.     char name[24];
  537.     char telephone[24];
  538.     char address[24];
  539.     char admin;
  540.     sqlite3 *db;
  541.     if(sqlite3_open("wmk.db", &db) != 0)
  542.     {
  543.         perror("fail open sqlite3");
  544.         exit(-1);
  545.     }

  546.         while(1)
  547.         {
  548.             printf("请按A进入管理员模式\n");
  549.             scanf("%c",&admin);
  550.             if(admin == 'A')
  551.             {
  552.                 system("clear");
  553.                 printf("*********************************\n");
  554.                 printf("管理员模式开启\n");
  555.                 printf("*********************************\n");
  556.                 printf("1:显示所有用户信息\n");
  557.                 printf("2:修改用户信息\n");
  558.                 printf("3:添加用户\n");
  559.                 printf("4:删除用户\n");
  560.                 printf("0:退出\n");
  561.                 printf("*********************************\n");
  562.                 while(f_cmd)
  563.                 {
  564.                     printf("请输入您要进行的操作:");
  565.                     scanf("%d",&f_cmd);
  566.                     if(f_cmd < 0 || f_cmd > 4)
  567.                     {
  568.                         printf("输入有误,请重新输入\n");
  569.                     }
  570.                     switch(f_cmd)
  571.                     {
  572.                         case 1:
  573.                         fun_admin_show(db);
  574.                         break;
  575.                         case 2:
  576.                         fun_admin_alter(db);
  577.                         break;
  578.                         case 3:
  579.                         fun_admin_add(db);
  580.                         break;
  581.                         case 4:
  582.                         fun_admin_delete(db);
  583.                         break;
  584.                         case 0:
  585.                         break;
  586.                     }
  587.                     if(f_cmd == 0)
  588.                     {
  589.                         break;
  590.                     }
  591.                     printf("请按回车键继续:");
  592.                     getchar();
  593.                     while(getchar() != '\n')
  594.                     {
  595.                         ;
  596.                     }
  597.                     system("clear");
  598.                     printf("*********************************\n");
  599.                     printf("管理员模式开启\n");
  600.                     printf("*********************************\n");
  601.                     printf("1:显示所有用户信息\n");
  602.                     printf("2:修改用户信息\n");
  603.                     printf("3:添加用户\n");
  604.                     printf("4:删除用户\n");
  605.                     printf("0:退出\n");
  606.                     printf("*********************************\n");
  607.                 }
  608.             }
  609.         }
  610. }
  611. int main(int argc, char *argv[])
  612. {
  613.     Mess_user user;


  614.     int sock_fd, accept_sock_fd, addrlen;
  615.     pthread_t pid, f_pid;
  616.     int *fun_sockfd = NULL;

  617.     char word[18] = {0};
  618.     char sql_cmd[128] = {0};
  619.     int flag;

  620.     sqlite3 *db;
  621.     char *errmsg;
  622.    
  623.     fd = open("log.txt", O_RDWR|O_CREAT|O_APPEND, 0666);
  624.    
  625.     struct sockaddr_in server_addr, client_addr;
  626.     memset(&server_addr, 0, sizeof(server_addr));
  627.     server_addr.sin_family = AF_INET;
  628.     server_addr.sin_port = htons(2342);
  629.     server_addr.sin_addr.s_addr = inet_addr("192.168.1.165");

  630.     //创建套接字
  631.     sock_fd = socket(AF_INET, SOCK_STREAM, 0);
  632.     if(sock_fd == -1)
  633.     {
  634.         perror("fail socket");
  635.         exit(-1);
  636.     }

  637.     //绑定套接字
  638.     if(bind(sock_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
  639.     {
  640.         perror("fail bind");
  641.         exit(-1);
  642.     }

  643.     //监听套接字
  644.     if(listen(sock_fd, 4) == -1)
  645.     {
  646.         perror("fail listen");
  647.         exit(-1);
  648.     }
  649.        
  650.         //管理员模式  
  651.         pthread_create(&f_pid, NULL, fun_admin_pthread, NULL);
  652.          
  653.        
  654.     //使用并发服务器,可保证多客户端使用
  655.     while(1)
  656.     {
  657.         memset(&user, 0, sizeof(struct message_user));
  658.         addrlen = sizeof(client_addr);
  659.         accept_sock_fd = accept(sock_fd, (struct sockaddr *)&client_addr,(socklen_t *)&addrlen);
  660.         if(accept_sock_fd == -1)
  661.         {
  662.             perror("fail accept");
  663.             exit(-1);
  664.         }      
  665.         fun_sockfd = (int *)malloc(sizeof(int));
  666.         *fun_sockfd=  accept_sock_fd;

  667.         pthread_create(&pid, NULL, fun_pthread, (void*)fun_sockfd);
  668.         

  669.     }

  670.    
  671.     return 0;
  672. }

复制代码


所有资料51hei提供下载:
在线词典.rar (975.63 KB, 下载次数: 16)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表