基于linux环境tcp网络编程(在线英英词典)文档【2】

C语言在线词典项目—Linux C语言-在线词典项目 功能:基于网络编程和数据库实现在线词典功能,客户端可以注册,登入,查询历史信息等操作,服务器基于多进程实现多客户端的并发访问,并使用sqlite数据库实现对用户信息的管理。 客户端 #include<stdio.h> #include<string.h> #include<unistd.h> #include<strings.h> #include<stdlib.h> #include<sys/types.h> 阅读详情

真心想学习的伙伴,需要库的朋友们请留言!

完整代码如下:

client.c

/*************************************************************************
       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 <sys/types.h>
#include <sys/stat.h>
#include <sys/file.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>


#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_addr,sizeof(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 sockfd,MSG *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("please input password:");
	scanf("%s",msg->data);
	getchar();

	if(0 > send(sockfd,msg,sizeof(MSG),0))	//给客户端发送功能选择数字,用户名,密码
	{
		perror("send");
		return -1;
	}
	if(0 > recv(sockfd,msg,sizeof(MSG),0))	//接受服务器返回的数据
	{
		perror("recv1");
		return -1;
	}
	if(strncmp(msg->name,"OK",3) == 0)	//比较数据是否查询成功
	{
		printf("%s\n","登录成功\n");
		return 1;
	}
	else
		printf("%s\n",msg->data);	//打印出服务器返回来的正确或错误信息
	return 0;
}


int register_z(int sockfd, MSG *msg)		//注册函数
{
	char buf[N];
	memset(buf,0,sizeof(buf));

	msg->type = 2 ;
	printf("please input new user:");
	scanf("%s",msg->name);
	getchar();

	printf("please input new passwd:");
	scanf("%s",msg->data);
	getchar();

	printf("please again input new passwd:");
	scanf("%s",buf);
	getchar();

	if(strcmp(buf,msg->data)==0)			//两次密码一致时才会执行一下语句
	{
		if(0 > send(sockfd,msg,sizeof(MSG),0))	//发送数据
		{
			perror("send");
			return -1;
		}

		if(0 > recv(sockfd, msg,sizeof(MSG),0))	//接受成功或失败数据
		{
			perror("recv2");
			return -1;
		}
		printf("%s\n",msg->data);		//打印成功或失败数据
	}
	else
	{
		printf("两次密码不一致,请重新注册!\n");
		return 0;

	}
	return 0;
}

void help_l()
{
	printf("	---------------帮助手册---------------\n");
	printf("	----------请认真阅读帮助手册!---------\n");
	printf("	------请在实现功能栏输入相应的数字!---\n");
	printf("	-------输入功能选项时一定得是数字!---\n");
	printf("	---登录: 用户名+密码------------------\n");
	printf("	---注册: 用户名+密码------------------\n");
	printf("	---查询: 根据单词查询相应的解释-------\n");
	printf("	---记录: 查看此软件历史记录-----------\n");
	printf("	---清屏: 对当前页面进行清屏-----------\n");
	printf("	---退出: 直接退出整个程序-------------\n");
	return;
}

void display_1()//第一个界面显示
{
	printf("    ************************************************************\n");
	printf("    *							       *\n");
	printf("    *     1:登录      2:注册     3:退出     4:清屏    5.帮助   *\n");
	printf("    *				                               *\n");
	printf("    ************************************************************\n");
	return ;
}

void display_2()//第一个界面显示
{
	printf("    ************************************************************\n");
	printf("    *		                                               *\n");
	printf("    *     1.查询     2.历史记录    3.上一级  4:清屏   5.帮助   *\n");
	printf("    *				                               *\n");
	printf("    ************************************************************\n");
	return ;
}

int search_word(int sockfd, MSG *msg)//查询单词函数
{
	msg->type = 3;

	while(1)
	{
		printf("\n    ******************** 上一级:# ********************\n");
		printf("Please Input Word:");
		scanf("%s",msg->name);
		getchar();

		if(strncmp(msg->name,"#",1)==0)//选择'#'则退出当前的循环查询
		{
			break;
		}
		if(0 > send(sockfd,msg,sizeof(MSG),0))//给服务器发送输入的数据
		{
			perror("send");
			return -1;
		}
		if(0 > recv(sockfd, msg, sizeof(MSG),0))//接受服务器查询的数据
		{
			perror("recv");
			return -1;
		}
		if(strncmp(msg->data,"NO",3) == 0)
		{
			printf("数据库中没有这个单词,请核对单词重新输入!\n");
		}
		else
			printf("%s:\t%s\n",msg->name,msg->data);//打印服务器查询的数据
		printf("\n");
	}
	return 0;
}


 

网络编程-在线词典(服务器端) 基于linux系统,实现在线词典的功能。 阅读详情

相关推荐

Linux环境下的在线词典开发实战

htmltable {th, td {th {pre {简介:基于Linux的在线词典项目是一个综合性的技术实践,涉及到Linux系统和C语言编程。该项目旨在通过Linux命令行界面,为用户提供快速的单词查找服务。内容包括C语言编程、网络编程、数据处理和文本解析等技术要点。开发者将学习如何处理命令行交互、网络通信、数据解析以及优化命令行界面和管理本地缓存,以提高在线词典的效率和用户体验。

weixin_42583683的博客 702

linux下网络编程综合项目——在线词典

在线词典,运用c语言与网络编程部分的知识来实现在线的英译英(因为提供的词典为全英文版),在客户端与服务器端连接成功后,客户端输入想查询的单词,服务器端会在词库中寻找这个单词的解释并发送给客户端,从而实现在线查询。

m0_74936872的博客 2108

Linux网络编程项目——C语言实现的在线云词典

该项目使用了TCP通信协议,分为服务器端与客户端,需要有清晰的代码编写逻辑思维,在编写代码前可以先自己画一下项目流程图,捋清思路后再进行代码的编写,会变得非常简单。该项目还用到了数据库的连接、多线程并发式服务器。

2301_80350206的博客 441

数据库|SQLite编程实例---在线词典

在线词典项目实例

安迪西_嵌入式攻城狮 858

初探Linux网络编程:在线英语词典的实现

做完本次项目,进一步体会到思路构筑的重要性;若你向我一样经验不足,最好不要脑子一热就狂写一堆,到了项目做到一半发现要大改……,第一次基本独立做项目,大部分功能没问题,不足的是代码冗余有点多,还可能有些小BUG。服务器启动的条件下,用户运行客户端,输入数字(1, 2, 3, 4)即可做对应的事情。二者如何分工,请看下文。自己学习Linux网络编程的过程,学艺不精,code新人,整体流程图·只有用户登录成功才可以进行查询工作。历史查询结果,打印有点小问题。

z13766的博客 3462

基于Linux的在线词典

基于Linux的在线词典

基于linux下的在线云词典项目

Linux下的云词典项目。

aacc123456987的博客 478

Linux下的网络编程项目-在线词典(采用seqlite3数据库)

程序可能涉及的知识点包括如下内容:数据库访问、文件操作、协议设计、客户端算法、服务器算法、多进程、回调函数; 客户端算法:在客户端我们提供了登录,注册,查询,搜索记录的功能,方便我们的客户的使用。 服务器算法:在服务器中,我们设置了响应客户端中的各种功能,通过服务器算法,实现了将我们的用户输入我们的数据库中,实现了查询单词的核心算法以及查询搜索历史记录。

Linux 在线词典

引用自 http://blog.sina.com.cn/s/blog_6c9c71840101brdz.html 在线英英词典(sqlite3) 项目功能描述:     1.用户注册和登录验证:服务器端将用户信息和历史记录保存在数据库中,客户端输入用户名和密码,服务器端在数据库中查找、匹配,返回结果。     2.单词在线翻译:根据客户端输入的单词在字典文件中搜

qq_33873380的博客 1270

13 万字 C 语言从入门到精通保姆级教程2021 年版

13 万字C语言保姆级教程,从入门到精通。

李南江 61万+

2021秋-北邮计算机导论期末考试(BUPT)

2021秋-北邮计算机导论期末考试(BUPT) 难度较低适合新手练习

weixin_73985779的博客 1499

Linux小项目:在线词典开发

【代码】Linux小项目:在线词典开发。

weixin_58036810的博客 1053

Cadence 设计实践笔记-小哥allegro 2层板笔记

规范建立文件夹本章节主要跟着B站PCB入门首选视频-小哥Cadence Allegro 2层板视频,结合自己的实践一步步完成一个完整的PCB板的设计。规范建立文件夹建立八个文件夹我使用的Cadence 17.4 有些差异原理图绘制原图绘制首先要熟悉原理图工作原理工作原理下面是这个项目的原理图重点关注电源新建原理图库打开Cadence 软件创建项目新建工程 File ==========》Project我这里选择了Enable PSPice 试试能不能仿真,新建项目如下。

我的专栏 1481

基于linux环境tcp网络编程(在线英英词典)文档 [1]

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

echo 2540

Lisflood

文献:基于SWMM和LISFLOOD-FP模型的居住区低影响开发模拟评价。问题:多个节点溢流同时,不行,待解决。目录下,cmd命令行。

警警的博客 2663

Android双目摄像头(RGB+IR)实时预览与人脸活体检测实战指南

本文详细介绍了Android双目摄像头(RGB+IR)实时预览与人脸活体检测的实战指南。通过双摄同步预览、人脸检测与活体判断等技术实现,提升安全认证的准确性和鲁棒性。文章还提供了开发环境搭建、常见问题解决方案及性能优化建议,帮助开发者快速掌握双目摄像头在Android平台的应用。

vulkan6gpu的博客 691

基于linux环境tcp网络编程(在线英英词典)文档【3】

完整代码如下: 有真心想学习的,需要库的朋友,底下留言哦! server.c: #include &lt;sys/types.h&gt; #include &lt;sys/stat.h&gt; #include &lt;sys/file.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;stdlib...

echo 2018

LPDDR6与LPDDR5 ZQ Calibration技术探讨

LPDDR6与LPDDR5 ZQ Calibration技术探讨

zilan23的博客 1101

Linux应用开发综合实战:在线词典

基于TCP/IP协议和多进程并发服务器实现的在线词典系统

weixin_45304885的博客 877

在 SAP HANA 与 HANA Cloud 中,用 SQL DDL 创建数据库视图:从设计时工件到运行时对象的全链路实践

本文介绍了在SAP HANA中通过HDI容器使用DDL定义视图的方法。主要内容包括:1)采用.hdbview设计时工件存储视图定义,构建时自动转换为运行时视图,实现版本控制和权限隔离;2)开发前需准备HDI容器、MTA项目及配置.hdiconfig文件;3)详细说明.hdbview语法结构,重点讲解WITH READ ONLY和WITH STRUCTURED PRIVILEGE CHECK的使用场景;4)提供了从创建文件到构建验证的完整流程示例;5)强调跨容器访问时需通过.hdbgrants为#OO用户授予

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 275

SAP和Oracle EBS作为全球顶级的ERP系统,在中国市场深耕数十年,尤其是在大型国企、央企和跨国企业中,已经形成了强大的用户习惯和“舒适区”依赖

国产ERP替代国际系统的关键挑战在于打破用户对SAP/Oracle的操作习惯和心理依赖。需采取多维策略:战略上明确价值主张、分阶段实施;产品上优化用户体验、确保数据迁移;实施上加强情景化培训、流程再造。成功替代70%取决于变革管理,需将"被动替换"转为"主动升级",让用户在新系统中建立更优的舒适区。

金牌架构师 383

基于Linux的小项目-在线词典

接触到的基于Linux的第一个实战小项目,在众多大牛的协助下完美实现。

weixin_49606782的博客 1777

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

基于linux下的在线电子词典

client.c #include<stdio.h> #include<string.h> #include<sys/stat.h> #include<sys/types.h> #include<sys/socket.h> #include<linux/in.h> #include<stdlib.h> //消息数据包 typedef struct msg { int type;//类型 char nam...

signal___的博客 1661

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

在线英英词典Linux C语言网络编程

在线英英词典,实现1.用户注册和登录验证;2单词在线翻译根据客户端输入的单词在字典文件中搜索;3.历史记录查询显示查找记录和查找时间;主要包含,数据库、客服端、服务器三个模块

wo_and_ni的博客 1250

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Linux系统开发 | 在线词典

项目总体划分为客户端、和服务端两个部分。客户端(也是APP)一方面为使用的用户提供简单的注册、登录、查询等操作,另一方面负责与服务端进行TCP通信,向服务器发送请求。而真正提供服务的是服务端进程,它不仅能和数据库进行交互,而且要接收用户的请求,把服务提供给用户。注册用户/用户登录用户查询词典(查询英文单词的解释信息)用户查询自己的历史查询记录。

本末实验室 4462

Linux应用开发项目实战---------在线词典

linux应用开发----在线词典

m0_74976404的博客 1160
上一篇: 基于linux环境tcp网络编程(在线英英词典)文档 [1]
下一篇: 基于linux环境tcp网络编程(在线英英词典)文档【3】
JIANXIN.Y
博客等级 码龄9年 273粉丝 42原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值