C语言 简单的在线电子词典

代码中的ip地址写的都是回环测试ip,如果要在两个电脑之间,请修改代码中ip地址一行。另外查询单词的dict.txt文件您需要自己准备,然后修改路径。
写的不好,您多担待。

服务器部分:

头文件声明(服务器)

#ifndef _SERVER_H
#define _SERVER_H
#include<stdio.h>
#include<time.h>
#include<sqlite3.h>
#include<stdlib.h>
#include<unistd.h>
#include<strings.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define N 256 
#define M 1024//用于缓冲区
typedef struct msgg{
    unsigned int cmd;//标志请求
    char name[N];//用户名
    char password[N];//密码
}msg;
typedef struct worr{
    unsigned int cmd;//标志请求
    char word[N];//所要查询的单词
    char time[N];//查询时间
    char explain[N];
    char name[N];
}data;
typedef struct sockaddr *SA;
int enroll(msg *pack);
int enter(msg *pack);
int history(data *word);
int init_network();
int look(data *word);
int sec(msg *pack);
int sec1(data *word);
#endif

主函数(服务器)

#include "server.h"

int main(int argc, char *argv[])
{
    int lis_fd;
    int soc_fd;
    int ret;
    struct sockaddr_in cliaddr;
    msg pack;
    data word;
    socklen_t addrlen = 0;
    char buf[M] = "\0";
    lis_fd = init_network();
    if (-1 == lis_fd)
    {
        printf("init network fail\n");
        return -1;
    }
    else
    {
        printf("init succeed, have fun ^0^\n");
    }
    bzero(&pack, sizeof(pack));
    while (1)
    {
        printf("等待接收...\n");
        soc_fd = accept(lis_fd, (SA)&cliaddr, &addrlen);
        if (-1 == soc_fd)
        {
            perror("accept");
            return -1;
        }
        while (1)
        {
            if (recv(soc_fd, buf, M, 0) > 0)
            {
                printf("接收信息成功\n");
                memcpy(&pack, buf, sizeof(pack));
                printf("%s %s\n",pack.name, pack.password);
                ret = sec(&pack);
                if (1 == ret)
                {
                    bzero(buf, sizeof(buf));
                    strcpy(buf, "ok");
                    send(soc_fd, buf, M, 0);
                    printf("注册成功信息已发出\n");
                    break;
                }
                else if (-1 == ret)
                {
                    bzero(buf, sizeof(buf));
                    strcpy(buf, "no");
                    send(soc_fd, buf, M, 0);
                    printf("注册失败信息已发出\n");
                    break;
                }
                else if (2 == ret)
                {
                    bzero(buf, sizeof(buf));
                    strcpy(buf, "ok");
                    send(soc_fd, buf, M, 0);
                    printf("登陆成功信息已发出\n");
                    bzero(buf, sizeof(buf));
                    while(recv(soc_fd, buf, M, 0) > 0)
                    {
                        printf("接收数据包成功\n");
                        memcpy(&word, buf, sizeof(word));
                        if (0 == strncmp(word.word, "#", 1))
                        break;
                        ret = sec1(&word);
                        if (1 == ret)
                        {
                            printf("查到了此单词\n");
                            bzero(buf, sizeof(buf));
                            strcpy(buf, "ok");
                            send(soc_fd, buf, M, 0);
                            printf("查询成功信息已发出\n");
                            bzero(buf, sizeof(buf));
                            memcpy(buf, &word, sizeof(word));
                            send(soc_fd, buf, M, 0);
                        }
                        else if (-1 == ret)
                        {
                            printf("查不到此单词\n");
                            bzero(buf, sizeof(buf));
                            strcpy(buf, "no");
                            send(soc_fd, buf, M, 0);
                            printf("查询失败信息已发出\n");
                        }
                        else if (2 == ret)
                        {
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值