在线英文词典
项目功能描述:
1. 用户注册和登录验证
2. 服务器端将用户信息和历史记录保存在数据库中。客户端输入用户名和密码,服务器端在数据库中查找匹配,返回结果
3. 单词在线翻译
4. 根据客户端输入的单词在字典文件中搜索
5. 历史记录查询
6. 项目分析应用综合项目
客户端整体框架图
项目功能描述:
1. 用户注册和登录验证
2. 服务器端将用户信息和历史记录保存在数据库中。客户端输入用户名和密码,服务器端在数据库中查找匹配,返回结果
3. 单词在线翻译
4. 根据客户端输入的单词在字典文件中搜索
5. 历史记录查询
6. 项目分析应用综合项目
(注:本项目还需要有一个dict.txt文件由于CSDN上有其他人上传过了,我无法再次上传该文件)
客户端整体框架图:定义通信结构体,先搭建整体框架与服务器进行网络通信,需要用到socke套接字知识。建立基础操作界面,再对各个函数进行详细编写。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#define N 32
#define R 1 //register
#define L 2 //login
#define Q 3 //query
#define H 4 //history
//定义通信双方结构体//
typedef struct{
int type;//后续需要通过设置不同类型选择需要的功能//
char name[N];//存放单词名字//
char data[256];//存储通信数据//
}MSG;
int main(int argc, char *argv[])
{
int n;
int sockfd;
MSG msg;
struct sockaddr_in severaddr;
if(argc<3)
{
printf("Usage:%s <ip> <port>",argv[0]);
return -1;
}
//设置套接字//
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("fail to socket/n");
return -1;
}
//参数设置//
bzero(&severaddr,sizeof(severaddr));
severaddr.sin_family=AF_INET;
severaddr.sin_addr.s_addr=inet_addr(argv[1]);//主要用来将一个十进制的数转化为二进制的数,用途多于ipv4的IP转化。//
severaddr.sin_port=htons(atoi(argv[2]));
//argv[2]是我们手动输入的端口号,使用atoi函数将把字符串转换成整型数,在通过htons()将整型变量从主机字节顺序转变成网络字节顺序//
//与服务器连接//
if(connect(sockfd,(struct sockaddr*)&severaddr,sizeof(severaddr))<0)
{
perror("fail to connect\n");
}
while(1)
{
printf("***************************************\n");
printf("****1.register 2.login 3.quit*******\n");
printf("***************************************\n");
printf("please choose: ");
scanf("%d",&n);
getchar();
switch(n)
{
case 1:
do_register(sockfd,&msg);
break;
case 2://登录成功后,通过判断do_login的返回值是否进入下一个菜单界面//
if(do_login(sockfd,&msg)==1)
{
goto next;
}
break;
case 3:
close(sockfd);
exit(0);
default:
printf("invalid data cmd.\n");
}
}
next:
while(1)
{
printf("***************************************\n");
printf("**1.query_word 2.history_record 3.quit*\n");
printf("***************************************\n");
printf("please choose: \n");
scanf("%d",&n);
getchar();
switch(n)
{
case 1:
do_query(sockfd,&msg);
break;
case 2:
do_history(sockfd,&msg);
break;
case 3:
close(sockfd);
exit(0);
default:
printf("invalid data cmd.\n");
}
}
return 0;
}
实现客户端的注册函数do_register()功能
void do_register(int sockfd,MSG *msg)
{
msg->type=R;//将模式设置为注册模式//
printf("input name:");
scanf("%s",msg->name);
getchar();
printf("input password:")