网络编程练手小项目---英英词典

本文介绍了一个使用TCP/IP协议、C语言实现的网络编程项目——英英词典。该应用包括注册、登录、查询单词和查看历史记录等功能,通过服务器的IO多路复用实现并发处理。用户信息存储在数据库中,登录状态在结构体中维护。文章还分享了项目代码,适合初学者学习。
摘要由CSDN通过智能技术生成

实现的功能

注册

登录

查询单词

查询历史记录

大概思路

搭建tcp服务器,通过IO多路复用实现并发(伪并发)。注册:接收到客户端发来的数据,建立一张用户表,将注册信息存储到数据库的用户表中,不过存入之前要判断是否重名  数据可以是一个结构体  可以设置结构中的一个成员为客户端发送过来的指令 客户端根据指令判断是注册 登录 等等。登录同理,不过这时候服务器对数据库表的操作为查询,有注册成功 没有则做其他处理。登录成功后修改登录状态为在线  这个标志位同样存储在结构体中。查询单词 历史记录等同样是对数据库进行查找、插入操作等  这里就不作过多赘述。

下面直接将这个练手的小项目的详细代码分享给大家  希望能帮助到刚入门的你  博客写的不是很规范将就看看吧  内容中若有错误的地方还请指正

定义的结构体:

typedef struct message_user{
    char name[20];
    char passwd[20];
    char wordname[20];
    char meaning[128];
    int flags;//判断发送的指令
    int states;//用户是否在线
    int ifuser;//用户名是否存在
    int loginflags;// 1成功 2 密码错误 3 用户名不存在
    int ifinsearch;//是否查找到对应单词 0没有 1查到
    int histroyflags;//1 byuser 2 bywordname
    char result[48][128];//历史记录
    int num;//查询的记录条数
    int column;//字段个数
}info;

注册

int Register(int connfd,sqlite3 *db)
{
    char buf[128] = {0};
            int ret = sqlite3_open("wmk.db",&db);
            if(ret != SQLITE_OK)
            {
                printf("%s\n",sqlite3_errmsg(db));
                return -1;
            }
            
            strcpy(buf,"create table if not exists user(name char[10],passwd char[20]);");
            char *errmsg = NULL;
            ret = sqlite3_exec(db,buf,NULL,NULL,&errmsg);
            if(ret != SQLITE_OK)
            {
                printf("%s\n",errmsg);
                return -1;
            }
b: bzero(buf,sizeof(buf));
            sprintf(buf,"select * from user where name='%s';",message.name);
            char **result;
            int num = 0;
            int column = 0;
            if(sqlite3_get_table(db,buf,&result,&num,&column,&errmsg) != SQLITE_OK)
            {
                printf("%s\n",errmsg);
                return -1;
            }
            
            if(num > 0)
            {
                message.ifuser = 1;//用户名已存在
            }
            else
            {
                message.ifuser = 0;//用户名不存在
                bzero(buf,sizeof(buf));
                sprintf(buf,"insert into user values('%s','%s');",message.name,message.passwd);
                if(sqlite3_exec(db,buf,NULL,NULL,&errmsg) < 0)
                {
                    printf("%s\n",errmsg);
                    return -1;
                }
            }
            ret = write(connfd,&message,sizeof(message));
            if(ret < 0)
            {
                perror("write");
                return -1;
            }

            if(message.ifuser == 1)
            {
                ret = read(connfd,&message,sizeof(message));
                goto b;

            }
            

    printf("注册\n");
    return 0;

}

登录

int Login(int connfd,sqlite3 *db)
{
    char buf[128] = {0};
    int ret = sqlite3_open("wmk.db",&db);
    if(ret != SQLITE_OK)
    {
        printf("%s\n",sqlite3_errmsg(db));
        return -1;

    }
a: sprintf(buf,"select * from user where name='%s' and passwd='%s';",message.name,message.pass
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值