20170122

电子通讯录的网络登录与注册。

#include <stdio.h>

#include <stdlib.h>
#include <sqlite3.h>
#include <unistd.h>


#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>


#include "msg.h"


#define SER_PORT 3333


int handle(void * para,int count,char **value,char **name)
{
    if(count != 0)
    {
        return 1;
    }
    return 0;
}
int handle1(void * para,int count,char **value,char **name)
{
     if(count != 0)
     {
         return 1;
     }
     return 0;
}




int main(int argc, char *argv[])
{
    if(argc != 2)
    {
        printf("Please input server bind ip!\n");
exit(1);
    }


    int s_len;
    int sockfd;
    int cfd;
    int n_read;


    char buffer[1024];
    char *errmsg;
    char str[100];
    char src[100];
    
    sqlite3 * db;


    struct message *msg = (struct message *)malloc(sizeof(struct message));
    struct message Msg;


    struct sockaddr_in ser_addr;
    struct sockaddr_in client_addr;


    if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == - 1)
    {
        perror("socket creat error!");
exit(1);
    }
    
    printf("sockfd success!\n");


    bzero(&ser_addr,sizeof(ser_addr));
    ser_addr.sin_family = AF_INET;
    //ser_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    ser_addr.sin_addr.s_addr = inet_addr(argv[1]);
    ser_addr.sin_port = htons(SER_PORT);


    if(bind(sockfd,(struct sockaddr *)&ser_addr,sizeof(ser_addr)) == -1)
    {
        perror("bind error!");
exit(1);
    }


    printf("bind success!\n");
     
    if(listen(sockfd,5) == -1)
    {
        perror("listen error!");
exit(1);
    }
    
    printf("listen success!\n");
    
    while(1)
    {
        s_len = sizeof(client_addr);
        if((cfd = accept(sockfd,&client_addr,&s_len)) < 0)
        {
            perror("accept error!");
   exit(1);
        }
        printf("accept success = %s\n",inet_ntoa(client_addr.sin_addr));
        while(1)
{
   n_read = read(cfd,msg,sizeof(struct message));
            
   if(n_read == 0)
   {
       printf("client is close!\n");
break;
   }
   sqlite3_open("taxt.db",&db);
            sqlite3_exec(db,"create table key(name text,password text)",NULL,NULL,&errmsg);
   int temp = msg->action;
   switch(temp)
   {
            case 1:
   
       //strcpy(src,msg->passwd);
       //strcpy(str,msg->name);
sprintf(str,"select * from key where name = '%s' and password = '%s'",msg->name,msg->passwd);
       int k = sqlite3_exec(db,str,handle,NULL,&errmsg);
if(k == 0)
{
  sqlite3_close(db);
  msg->action = 3;
  write(cfd,msg,sizeof(struct message)); 
}
else
{
   sqlite3_close(db);
   //printf("cao124!\n");
   msg->action = 4;
   //printf("cao126!\n");
   write(cfd,msg,sizeof(struct message));
   //printf("hehe\n");
}
break;

   
   case 2:
   
sprintf(str,"select * from key where name = '%s'",msg->name);
                int p = sqlite3_exec(db,str,handle1,NULL,&errmsg);
if(p == 0)
{
   sprintf(src,"insert into key(name,password) values('%s','%s')",msg->name,msg->passwd);
   sqlite3_exec(db,src,NULL,NULL,&errmsg);
   sqlite3_close(db);
   msg->action = 5;
   write(cfd,msg,sizeof(struct message));
}
else
{
   sqlite3_close(db);
   msg->action = 6;
   write(cfd,msg,sizeof(struct message));
}
break;
   
}


            //printf("recv client send msg:%d %s %s\n",msg->action,msg->name,msg->passwd);


   //msg->action = -1;


   //write(cfd,msg,sizeof(struct message));
        }
    }
    return 0;

}

#include <stdio.h>
#include <stdlib.h>


#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>


#include "msg.h"


#define SER_PORT 3333


int main(int argc, char *argv[])
{
    if(argc != 2)
    {
        printf("Please input connect server ip!\n");
exit(1);
    }
    
    int sockfd;
    
    char buffer[1024];


    struct message msg;


    struct sockaddr_in ser_addr;


    if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
    {
        perror("socket create error!");
exit(1);
    }


    bzero(&ser_addr,sizeof(ser_addr));
    ser_addr.sin_family = AF_INET;
    ser_addr.sin_addr.s_addr = inet_addr(argv[1]);
    ser_addr.sin_port = htons(SER_PORT);
    
    
    if(connect(sockfd,(struct sockaddr *)&ser_addr,sizeof(ser_addr)) < 0)
    {
        perror("connect error!");
exit(1);
    }
    
    int num;


   while(1)
   {
       login_screen();
       scanf("%d",&num);
       switch(num)
       {
           case 1:
               bzero(&msg,sizeof(msg));
               msg.action = 1;
      printf("请输入帐户名:\n");
      scanf("%s",msg.name);
      printf("请输入密码:\n");
      scanf("%s",msg.passwd);


      write(sockfd,&msg,sizeof(msg));
               read(sockfd,&msg,sizeof(msg));
      if(msg.action == 3)
      {
                   printf("该帐号未注册!或用户名以及密码错误!\n");
          break;
      }
      if(msg.action == 4)
      {
          printf("登录成功!\n");
  break;
      }
      break;
           case 2:
      bzero(&msg,sizeof(msg));
      msg.action = 2;
      printf("请输入要注册帐户:\n");
      scanf("%s",msg.name);
      printf("请输入密码:\n");
      scanf("%s",msg.passwd);


      write(sockfd,&msg,sizeof(msg));
               read(sockfd,&msg,sizeof(msg));
      if(msg.action == 5)
      {
          printf("注册成功!\n");
  break;
      }
      if(msg.action == 6)
      {
          printf("用户名已存在!\n");
  break;
      }
      break;
       
       }
   } 
    


    return 0;
}

#include <stdio.h>


void login_screen()
{
    printf("+======================+\n");
    printf("|       WELCOME !      |\n");
    printf("|                      |\n");
    printf("|  1.登录      2.注册  |\n");
    printf("+======================+\n");
    printf("请输入数字选择功能:\n");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值