123456

                                                                                                             
 #include "04_head.h"                                                                                              
                                                                                                                   
                                                                                                                   
                                                                                                                   
 int main(int argc, const char *argv[])                                                                            
 {                                                                                                                 
     int sfd = create_socket();                                                                                    
     create_setsockopt(sfd);                                                                                       
     create_bind(sfd);                                                                                             
     create_listen(sfd);                                                                                           
                                                                                                                   
     while(1)                                                                                                      
     {                                                                                                             
         struct sockaddr_in cin;                                                                                   
         int addrlen = sizeof(cin);                                                                                
         int newfd = create_accept(sfd, cin, addrlen);                                                             
                                                                                                                   
                                                                                                                   
         struct msg sermsg;                                                                                        
         int res = recv(newfd, &sermsg, sizeof(sermsg), 0);                                                        
         if(res < 0)                                                                                               
         {                                                                                                         
             ERR_MSG("ercv");                                                                                      
             return -1;                                                                                            
         }                                                                                                         
         else if(res == 0)                                                                                         
         {                                                                                                         
             printf("[%s:%d]客服端退出\n",inet_ntoa(cin.sin_addr), ntohs(cin.sin_port));                           
             return -1;                                                                                            
         }                                                                                                         
         printf("agreement = %d  account = %s  passward = %s\n",sermsg.agreement,\                                 
                 sermsg.account, sermsg.passward);                                                                 
        if(sermsg.agreement == 1)//注册 讲账号密码存入数据库                                                       
        {                                                                                                          
            create_account_and_passward_database(sermsg);                                                          
        }                                                                                                          
                                                                                                                   
                                                                                                                   
     }                                                                                                             
                                                                                                                   
                                                                                                                   
                                                                                                                   
     return 0;                                                                                                     
 }                                                                                                                 
                                                                                                                   
                                                                                                                   
                                                                                                                   
                                                                                                                   
                                                                                                                   
                                                                                                                   

cil_main.c

  #include "04_head.h"
 
 
 
  int main(int argc, const char *argv[])
  {
      int cfd = create_socket();
      create_setsockopt(cfd);
      create_connect(cfd);
 
 
 
      while(1)
      {
          printf("+----------------------+\n");
          printf("+--------1.注册--------+\n");
          printf("+--------2.登录--------+\n");
          printf("+--------3.退出--------+\n");
          printf("+----------------------+\n");
          printf("输入您的选择>>>");
          int cilinput = 0;
          scanf("%d",&cilinput);
          switch(cilinput)
          {
          case 1:                                                    
              {
                  cil_sign_in(cfd);
              }
              break;
          case 2:
              break;
          case 3:
              break;
          default:
              break;
          }
 
      }
 
      return 0;
  }
 
 

fun.c



 #include "04_head.h"



 //创建套接字
 int create_socket()
 {
     int fd = socket(AF_INET, SOCK_STREAM, 0);
     if(fd < 0)
     {
         ERR_MSG("socket");
         return -1;
     }
     printf("socket is success\n");
     return fd;
 }


 //允许端口快速复用
 void create_setsockopt(int fd)
 {
     int reuse = 1;
     if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
     {
         ERR_MSG("setsockopt");
         return;
     }
     printf("setsockopt is success\n");
     return;
 }


 //绑定
 void create_bind(int fd)
 {
     struct sockaddr_in sin;
     sin.sin_family = AF_INET;
     sin.sin_port = htons(PORT);
     sin.sin_addr.s_addr = inet_addr(IP);
     if(bind(fd, (struct sockaddr*)&sin, sizeof(sin)) < 0)
     {
         ERR_MSG("bind");
         return;
     }
     printf("bind is success\n");
     return;
 }


 //监听
 void create_listen(int fd)
 {
     if(listen(fd, 128) < 0)
     {
         ERR_MSG("listen");
         return;
     }
     printf("listen is success\n");
     return ;
 }


 //接收
 int create_accept(int fd, struct sockaddr_in cin, int addrlen)
 {
     int newfd = accept(fd, (struct sockaddr*)&cin, &addrlen);
     if(newfd < 0)
     {
         ERR_MSG("accetp");
         return -1;
     }
     printf("[%s:%d]客服端连接成功\n",inet_ntoa(cin.sin_addr), ntohs(cin.sin_port));
     return newfd;
 }


 //连接
 void create_connect(int fd)
 {
     struct sockaddr_in sin;
     sin.sin_family = AF_INET;
     sin.sin_port = htons(PORT);
     sin.sin_addr.s_addr = inet_addr(IP);
     if(connect(fd, (struct sockaddr*)&sin, sizeof(sin)) < 0)
     {
         ERR_MSG("connect");
         return;
     }
     printf("connect is success\n");
     return;
 }

 //客服端的注册函数
 void cil_sign_in(int fd)
 {
     struct msg cilmsg;
     printf("输入5位数的账号>>>");
     scanf("%s",cilmsg.account);
     if((strlen(cilmsg.account) != 5))
     {
         printf("账号位数不对\n\n");
         return;
     }
     printf("account = %s \n",cilmsg.account);

     printf("输入5位数的密码>>>");
     scanf("%s",cilmsg.passward);
     if((strlen(cilmsg.passward) != 5))
     {
         printf("密码位数不对\n\n");
         return;
     }

     printf("account = %s  passward = %s\n",cilmsg.account, cilmsg.passward);
     cilmsg.agreement = 1;
     send(fd, &cilmsg, sizeof(cilmsg), 0);
     return;
 }


//存储账号密码的数据库
void create_account_and_passward_database(struct msg sermsg)
{
    //创建数据库
    sqlite3* account_passward_db = NULL;
    if(sqlite3_open("./account_passward_database.db", &account_passward_db) != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3:%s __%d__\n",sqlite3_errmsg(account_passward_db), __LINE__);
        return;
    }
    printf("sqlite3_open is success\n");


    //创建存储账户与密码的表
    char* account_passward_table_errmsg;                                                                                                                                 
    char account_passward_table[128] = "create table if not exists account_passward_table (account char, passward char, state int);";
    if( sqlite3_exec(account_passward_db, account_passward_table, NULL, NULL, &account_passward_table_errmsg) != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3:%s __%d__\n",sqlite3_errmsg(account_passward_db), __LINE__);
        return;
    }
    sqlite3_free(account_passward_table_errmsg);
    printf("sqlite3_exec is success\n");

    //将账号与密码存入表中
    char account_passward_insert[128] = "";
    char* account_passward_insert_errmsg;
    printf("account = %s passward = %s\n",sermsg.account, sermsg.passward);
    sprintf(account_passward_insert, "insert into account_passward_table values (\"%s\", \"%s\",0);", sermsg.account, sermsg.passward);
    if(sqlite3_exec(account_passward_db, account_passward_insert, NULL, NULL, &account_passward_insert_errmsg) != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3:%s __%d__\n",sqlite3_errmsg(account_passward_db), __LINE__);
        return;
    }
    sqlite3_free(account_passward_insert_errmsg);
    printf("sqlite3_exec_insert is success\n");

    return;
}




head.h

 #ifndef __HEAD_H                                                             
 #define __HEAD_H_                                                            
 
 #include <stdio.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <string.h>
 #include <unistd.h>
 #include <sqlite3.h>
   
 #define ERR_MSG(msg) do{\
     printf("LINE:__%d__\n",__LINE__);\
     printf("FUNC:__%s__\n",__func__);\
     perror(msg);\
 }while(0)                                                       
       
 #define PORT 8080                                                            
 #define IP "192.168.3.61"                                                    
   
 struct msg
 {
     int agreement; //1:注册                                                  
     char account[20];          
     char passward[20];
 }__attribute__((packed));                                                    
                                                                             
       
                                
                 
       
 int create_socket();                   
 void create_setsockopt(int fd);
 void create_bind(int fd);
 void create_listen(int fd);
 int create_accept(int fd, struct sockaddr_in cin, int addrlen);              
 void create_connect(int fd);
 void cil_sign_in(int fd);
 void create_account_and_passward_database();
                             
                               
                                 
 #endif                                   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值