sqlite3_英英词典

客户端运行起来。先输入zhuce或者denglu  回车结束。
输入账号密码的时候回车结束。
实现的功能:
注册、登录账号;
注册之后可以直接查找。
登录时账号密码不对会直接退出。并关闭服务器端。
账号和密码保存在数据库中。
输入存在的单词,会返回该单词的意思。
输入不存在的单词,会报错。


将单词插入数据库中:

/*************************************************************************
> File Name: c.c
> Author: 
> Mail: 
> Created Time: Mon 15 Jun 2015 03:27:27 AM PDT
 ************************************************************************/


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sqlite3.h>
#include<fcntl.h>
#include<sys/stat.h>


int main(int argc,const char * argv[])
{
    FILE *fp1;
    int i =0;
    int num = 0;
    char *p,*s,*y;
    char *errmsg;
    char sql[256];
    char buff2[1024];
    sqlite3 *db =NULL;
    if(sqlite3_open("db.db",&db)!=SQLITE_OK)
    {
        sqlite3_errmsg(db);
        exit(EXIT_FAILURE);
    }
    sqlite3_exec(db,"create table dir (ID INTEGER,WORD TEXT,MEANING TEXT)",NULL,NULL,&errmsg);
    fp1 = fopen("dict.txt","r");
    while(1)
    {
        fgets(buff2,1024,fp1);
        p = buff2;
        s = buff2;
        y = buff2;
        num = 0;
        while(1)
        {
            while(*p!='\x20')
            {
                p++;
                y++;
            }
            if(*p == '\x20')
            {
                *p = '\0';
            }
            p = p+1;
            num = num +1;
            y = y+1;
            while(*p =='\x20')
            {
                p++;
                y++;
                num++;                
            }
            while(*p!='\n')
            {
                p++;
                num++;
            }
            if(*p == '\n')
            {
                *p = '\0';
            }
            p = p+1;
            num = num+1;
            i++;
            printf("di%dci charu\n",i);
            //printf("s:%s,y:%s",s,y);
            sprintf(sql,"insert into dir values(%d,\"%s\",\"%s\") ",i,s,y);
            sqlite3_exec(db,sql,NULL,NULL,&errmsg);
            break;
        }
    }
}


服务器端程序:

/*************************************************************************
> File Name: server.c
> Author: 
> Mail: 
> Created Time: Mon 15 Jun 2015 03:59:26 AM PDT
 ************************************************************************/


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netinet/ip.h>
#include<sqlite3.h>


int callback(void  * h,int f_num ,char **f_val, char **f_name);
int main(int argc,const char *argv[])
{
    int listenfd = socket(PF_INET,SOCK_STREAM,0);
    if(listenfd == -1)
    {
        perror("socket");
        exit(EXIT_FAILURE);
    }
    int connfd;
    char *p,*z,*m;
    void *h;
    char *errmsg;
    sqlite3 *db ;
    char sql[256];
    char buff[1024];
    char buff1[1024];
    char buff2[1024];
    char buffer[1024];
    char buffer2[1024];
    struct sockaddr_in servaddr;
    bzero(&servaddr,sizeof(servaddr));
    servaddr.sin_family = PF_INET;
    servaddr.sin_port = htons(8888);
    servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    int on = 1;
    if(setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on))==-1)
    {
        perror("setsockopt");
        exit(EXIT_FAILURE);
    }
    if(bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1)
    {
        perror("bind");
        exit(EXIT_FAILURE);
    }
    printf("bind success!\n");
    listen(listenfd,8);
    printf("listening...\n");
    fd_set readfds, tmpfds;


    FD_ZERO(&readfds);
    FD_SET(0,&readfds);
    FD_SET(listenfd,&readfds);


    int maxfd = listenfd;


    while(1)
    {
        tmpfds = readfds;
        //struct timeval tv ={2,0};
        int ret = select((maxfd+1),&tmpfds,NULL,NULL,NULL);
        if(ret == -1)
        {
            perror("select");
            exit(EXIT_FAILURE);
        }
        else if(ret = 0)
        {
            ;
        }
        else 
        {
           int i;
            for(i = 0;i<=maxfd;i++)
            {
                if(FD_ISSET(i,&tmpfds))
                {
                    if(i==STDIN_FILENO)
                    {
                        fgets(buff,sizeof(buff),stdin);
                        if(strncmp(buff,"quit",4)==0)
                        {
                            exit(0);
                        }
                        printf("shuru:%s\n",buff);
                    }
                    else if(i==listenfd)
                    {
                        connfd = accept(listenfd,NULL,NULL);
                        FD_SET(connfd,&readfds);
                        maxfd = maxfd>connfd?maxfd:connfd;
                    }
                    else
                    {
                        int recvbytes = 0;
                        recvbytes = recv(i,buff,sizeof(buff),0);
                        if(recvbytes == -1)
                        {
                            perror("recv");
                            close(i);
                            FD_CLR(i,&readfds);
                        }
                        if(recvbytes == 0)
                        {
                            printf("client[%d] shutdown\n",i);
                            close(i);
                            FD_CLR(i,&readfds);
                        }
                        printf("client:%s\n",buff);
                        if(strncmp(buff,"zhuce",5)==0)
                        {
                            recv(i,buff,sizeof(buff),0);
                            if(sqlite3_open("db.db",&db)!=SQLITE_OK)
                            {
                                sqlite3_errmsg(db);
                                exit(EXIT_FAILURE);
                            }
                            sqlite3_exec(db,"create table name (NAME TEXT ,MIMA TEXT)",NULL,NULL,&errmsg);
                            p = buff;
                            z = buff;
                            m = buff;
                            while(1)
                            {
                                while(*p!='\n')
                                {
                                    p++;
                                    m++;
                                }
                                if(*p == '\n')
                                {
                                    *p = '\0';
                                }
                                p = p+1;
                                m = m+1;
                                while(*p!='\n')
                                {
                                    p++;
                                }
                                if(*p == '\n')
                                {
                                    *p ='\0';
                                }
                                sprintf(sql,"insert into name values(\"%s\",\"%s\")",z,m);
                                printf("sql:%s\n",sql);
                                //break;
                                if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
                                {
                                    printf("insert error:%s\n",errmsg);
                                    exit(EXIT_FAILURE);
                                }
                                break;
                            }
                            
                            
                            while(1)
                            {
                                if(recv(i,buff1,sizeof(buff1),0)==-1)
                                {
                                    perror("recv");
                                    exit(EXIT_FAILURE);
                                }
                                
                                buff1[strlen(buff1)-1]='\0';
                                if(strncmp(buff1,"quit",4)==0)
                                {
                                    send(i,buff1,sizeof(buff1),0);
                                    exit(0);
                                }
                                sprintf(sql,"select * from dir where WORD = \"%s\" ",buff1);
                                h = buff2;
                                strcpy(buff2,"bucunzai");
                                if(sqlite3_exec(db,sql,callback,(void *)h,&errmsg) != SQLITE_OK)
                                {
                                    printf("select error :%s\n",errmsg);
                                    exit(EXIT_FAILURE);
                                }
                                //printf("xxxx:%s\n",buff2);
                                
                                if(send(i,buff2,sizeof(buff2),0)==-1)
                                {
                                    perror("send");
                                    exit(EXIT_FAILURE);
                                }
                                //bzero(buff2,sizeof(buff2));
                            }
                        }
                        //if(strncmp(buff))
                        if(strncmp(buff,"denglu",6)==0)
                        {
                            recv(i,buff,sizeof(buff),0);
                            if(sqlite3_open("db.db",&db)!=SQLITE_OK)
                            {
                                sqlite3_errmsg(db);
                                exit(EXIT_FAILURE);
                            }
                            //sqlite3_exec(db,"create table name (NAME TEXT ,MIMA TEXT)",NULL,NULL,&errmsg);
                            p = buff;
                            z = buff;
                            m = buff;
                            while(1)
                            {
                                while(*p!='\n')
                                {
                                    p++;
                                    m++;
                                }
                                if(*p == '\n')
                                {
                                    *p = '\0';
                                }
                                p = p+1;
                                m = m+1;
                                while(*p!='\n')
                                {
                                    p++;
                                }
                                if(*p == '\n')
                                {
                                    *p ='\0';
                                }
                                sprintf(sql,"select * from name where  name  = \"%s\" and mima = \"%s\"",z,m);
                                printf("sql:%s\n",sql);
                               
                                h = buff2;
                                strcpy(buff2,"bucunzai");
                                if(sqlite3_exec(db,sql,callback,(void *)h,&errmsg)!=SQLITE_OK)                
                                {
                                    printf("insert error:%s\n",errmsg);
                                    printf("zhaobudaozhegeren\n");
                                    exit(EXIT_FAILURE);
                                }
                                printf("zhanghao:%s\n",buff2);
                                if(strncmp(buff2,"bucunzai",8)==0)
                                {
                                    strcpy(buffer2,"quit");
                                    send(i,buffer2,sizeof(buffer2),0);
                                    exit(0) ;  
                                }
                                else if(strncmp(buff2,"bucunzai",8)!=0)
                                {
                                    while(1)
                                    {
                                        if(recv(i,buff1,sizeof(buff1),0)==-1)
                                        {
                                            perror("recv");
                                            exit(EXIT_FAILURE);
                                        }
                                        
                                        buff1[strlen(buff1)-1]='\0';
                                        if(strncmp(buff1,"quit",4)==0)
                                        {
                                            send(i,buff1,sizeof(buff1),0);
                                            exit(0);
                                        }
                                        sprintf(sql,"select * from dir where WORD = \"%s\" ",buff1);
                                        h = buff2;
                                        if(sqlite3_exec(db,sql,callback,(void *)h,&errmsg) != SQLITE_OK)
                                        {
                                            printf("select error :%s\n",errmsg);
                                            exit(EXIT_FAILURE);
                                        }
                                        //printf("xxxx:%s\n",buff2);
                                        
                                        if(send(i,buff2,sizeof(buff2),0)==-1)
                                        {
                                            perror("send");
                                            exit(EXIT_FAILURE);
                                        }
                                    }
                                    
                                }
                                break;
                            }
                            
                            
                        }


                    }
                }
            }
        }
    }
}
int callback(void *h,int f_num ,char **f_val, char **f_name)
{
    printf("f_num = %d\n",f_num);
    int j = 0;
    for(j = 0;j<f_num;j++)
    {
        printf("%s:%s\n",f_name[j],f_val[j]);
        sprintf(h,"%s:%s\n",f_name[j],f_val[j]);
    }
    
    //printf("%s:%s\n",f_name[f_num],f_val[f_num]);
    return 0;
}


客户端程序:

/*************************************************************************
> File Name: client.c
> Author: 
> Mail: 
> Created Time: Mon 15 Jun 2015 04:24:26 AM PDT
 ************************************************************************/


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netinet/ip.h>
#include<arpa/inet.h>
#include<sqlite3.h>


int main(int argc,const char *argv[])
{
    int clientfd;
    char buff[1024];
    char buff1[1024];
    char buff2[1024];
    char buff3[1024];
    pid_t pid;
    clientfd = socket(PF_INET,SOCK_STREAM,0);
    if(clientfd == -1)
    {
        exit(EXIT_FAILURE);
    }
    struct sockaddr_in servaddr;
    servaddr.sin_family = PF_INET;
    servaddr.sin_port = htons(8888);
    servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");


    if(connect(clientfd,(struct sockaddr *)&servaddr,sizeof(servaddr))==-1)
    {
        perror("connect");
        exit(EXIT_FAILURE);
    }
    printf("connected..\n");
    printf("-----zhuce / denglu-----\n");
    if((pid = fork())==-1)
    {
        perror("fork");
        exit(EXIT_FAILURE);
    }
    else if(pid == 0)
    {
        while(1)
        {
            fgets(buff,sizeof(buff),stdin);
            
            if(send(clientfd,buff,sizeof(buff),0)==-1)
            {
                perror("send");
                exit(EXIT_FAILURE);
            }
            //printf("buff:%s\n",buff);
            if(strncmp(buff,"zhuce",5)==0)
            {
                printf("****zhanghao****Enter****\n");
                fgets(buff1,sizeof(buff1),stdin);
                printf("******mima******Enter****\n");
                fgets(buff2,sizeof(buff2),stdin);
                strcat(buff1,buff2);
                if(send(clientfd,buff1,sizeof(buff1),0)==-1)
                {
                    perror("send");
                    exit(EXIT_FAILURE);
                }
                printf("***input words**quit->tuichu***\n");
                //printf("quit tuichu \n");
                while(1)
                {
                    fgets(buff3,sizeof(buff3),stdin);
                    if(send(clientfd,buff3,sizeof(buff3),0)== -1)
                    {
                        perror("send");
                        exit(EXIT_FAILURE);
                        
                    }
                    if(strncmp(buff3,"quit",4)==0)                 
                    {
                        //raise(SIGSTOP);
                        printf("child process exit\n");
                        exit(0);
                    }
                   sleep(1); 
                    printf("***input words**quit->tuichu***\n");
                }
            }
            if(strncmp(buff,"denglu",6)==0)
            {
                printf("****zhanghao****Enter****\n");
                fgets(buff1,sizeof(buff1),stdin);
                printf("******mima******Enter****\n");
                fgets(buff2,sizeof(buff2),stdin);
                strcat(buff1,buff2);
                if(send(clientfd,buff1,sizeof(buff1),0)==-1)
                {
                    perror("send");
                    exit(EXIT_FAILURE);
                }
                
            }
        }
    }
    else
    {
        while(1)
        {
            if(recv(clientfd,buff,sizeof(buff),0)==-1)
            {
                perror("recv");
                exit(EXIT_FAILURE);
            }
            if(strncmp(buff,"quit",4)==0)
            {
                exit(0);
            }
            printf("%s\n",buff);
        }
        
    }


    return 0;
}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值