• 大小: 1.08MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-13
  • 语言: 其他
  • 标签: C语言  sqlite3  tcp  udp  

资源简介

1. 用户登录(登录失败可重复登录); 2. 用户注册(已有用户不能注册,需要输入两次密码); 3. 单词查询(根据客户端输入的单词,服务器可以根据数据库查找反馈查询的单词和解释); 4. 历史记录查询(查询单词时服务器会将历史记录存在数据库中,客户端查询时刻查询历史记录的时间和具体单词); 5. 进入每一级后可以返回上一级继续执行上一级的操作,有清屏功能; 6. 可同时登录多个用户(多个用户可反复登录,反复注册);

资源截图

代码片段和文件信息

/*************************************************************************
       File Name: client.c
     Author: Young
     motto: Continuous efforts will lead to a better future 
     Created Time: Sun 2 Sep 2018 10:00:05 CST
 ************************************************************************/

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


#define N 64
#define M 512

typedef struct //消息结构体
{
int type;
char name[N];
char data[M];
}MSG;

int n;
void help_l(); //帮助手册
void display_1(); //第一个界面显示
void display_2(); //查询界面显示
void display_3(int sockfd MSG *msg); //查询界面函数
int login(int sockfd MSG *msg); //登录函数
int register_z(int sockfd MSG *msg); //注册函数
int search_word(int sockfd MSG *msg); //单词查询函数
int history(int sockfd MSG *msg); //历史记录查询函数
int return_l(int sockfd MSG *msg); //返回上一级给服务器发送相应的信号


int main(int argc char *argv[])
{
int sockfd; //创建套接字
MSG msg;
/*1.创建套接字*/
sockfd=socket(AF_INET SOCK_STREAM 0);
if(sockfd < 0)
{
perror(“socket“);
return -1;
}
printf(“socket success!\n“);

/*2.主动连接服务器*/
struct sockaddr_in serv_addr;
serv_addr.sin_family  =AF_INET;
serv_addr.sin_port  =htons(8888);
serv_addr.sin_addr.s_addr=inet_addr(“127.0.0.1“);
if(0>connect(sockfd (struct sockaddr *)&serv_addrsizeof(serv_addr)))
{
perror(“connect“);
return -1;
}
printf(“connect  success\n“);

loop://使用无条件转移语句
while(1)
{
display_1(); //显示选择的页面
printf(“please input num:“);
scanf(“%d“&n);
getchar(); //利用getchar吃掉垃圾字符

switch(n)
{
case 1:
if(1 == login(sockfd&msg))//登录函数返回值为说明登录成功几个跳到第二个选择页面
{
goto loop1; //可用函数调用或者无条件转移跳到第二个选择页面
}
break;
case 2:
register_z(sockfd&msg);//注册用户
break;
case 3:
close(sockfd); //关闭套接字
return 0;
break;
case 4:
system(“clear“); //清屏
break;
case 5:
help_l(); //帮助
break;
default:
printf(“输入信息有误!\n“);
}
}
loop1://第二个选择的页面
while(1)
{
display_2();
printf(“please input num:“);
scanf(“%d“&n);
getchar(); //吃掉输入时的垃圾字符(‘\n‘)

switch(n)
{
case 1:
search_word(sockfd&msg); //查询单词函数
printf(“测试\n“);
break;
case 2:
if(1 == history(sockfd&msg)) //历史记录函数返回值是1代表又跳到前一个选择页面
{
goto loop1;
}
break;
case 3:
return_l(sockfd&msg);
goto loop; //跳到第一个选择页面
exit(0);
break;
case 4:
system(“clear“);//清屏功能
break;
case 5:
help_l(); //帮助手册
break;
default:
printf(“输入信息有误!\n“);
}
}
/*关闭套接字*/
close(sockfd);
return 0;
}

int return_l(int sockfdMSG *msg)
{
msg->type=5;
if(0 > send(sockfd msg sizeof(MSG)0))
{
perror(“send“);
return -1;
}
return 0;
}

int login(int sockfd MSG *msg)//登录函数
{
msg->type = 1;//选择数字功能为1

printf(“please input user:“);
scanf(“%s“msg->name);
getchar();

printf(“pleas

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-09-10 14:10  18070614 杨建新 在线英英词典\
     文件          95  2018-09-10 14:10  18070614 杨建新 在线英英词典\Makefile
     文件       12344  2018-09-10 14:10  18070614 杨建新 在线英英词典\client
     文件        7716  2018-09-10 14:08  18070614 杨建新 在线英英词典\client_客户端原码.c
     文件     1406598  2018-09-10 14:04  18070614 杨建新 在线英英词典\dict.txt
     文件        1599  2018-09-10 14:04  18070614 杨建新 在线英英词典\dict_数据库处理程序.c
     文件     1468416  2018-09-10 14:04  18070614 杨建新 在线英英词典\my_数据库.db
     文件       12660  2018-09-10 14:10  18070614 杨建新 在线英英词典\server
     文件        9640  2018-09-10 14:04  18070614 杨建新 在线英英词典\server_服务器原码.c
     文件       21874  2018-09-10 13:45  18070614 杨建新 在线英英词典\在线英英词典说明文档及主函数说明.docx

评论

共有 条评论