【LV11 在线词典项目】

在线英文词典
项目功能描述:
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:")
  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值