基于tcp,html,数据库的在线信息查询系统项目总结

news2025/1/9 15:31:33

1.项目背景

在线信息查询系统是一种可用于检索和展示各种信息的计算机程序或平台。主要特点包括:

用户接口:通常提供友好的界面,用户可以方便地输入查询条件。

数据存储:系统往往连接到数据库,存储大量信息,以供查询和分析。

搜索功能:支持关键词搜索、筛选和分类功能,帮助用户快速找到所需信息。

广泛运用于图书馆,企业管理等多个领域

2.项目功能

服务端创建:并发服务器,使用多进程实现,接收网页发送的报文并解析,从解析出的内容中获取网页所需要的响应报文发送给客户端,实现网页相关内容打印

Html网页接受:通过对html标记语言的拼接,实现多次输入查找内容和从数据库获得相关路径进行插入图片,文字

四级页面显示:

登录页面:用户输入登录姓名与密码进入二级查询页面

查找页面:进入查找页面输入相关商品名称

商品概述:输入名称后进入三级页面,展示所有相关的商品,由模糊查询查找相关商品

商品详细信息:点击某一商品,进入四级页面查看其具体信息

创建的服务器具备并发性能,支持多个客服端查询

将用户的访问信息存储在日志中

3.项目框架

主函数模块

数据库调用模块

服务器创建模块

登录页面模块

信息收发模块

4.项目模块分析

主函数模块 :负责各函数接口的调用

各封装函数:

1).服务器初始化  init_tcp_ser

2). 接收请求报文,存放在定义的结构体内,包含请求方法,url,内容三主题中 recv_http_req

3). 解析报文,通过tcp传输数据到用户网络(parse_http_req)

4). 接收解析信息与数据库匹配,拼接html并发送.(db_123)

5). 根据请求发送响应send_http_resp

6).信息存储功能:write_log

代码结构
头文件和库的引入

包含了一些必要的头文件,如 sqlite3.h(用于数据库操作)和自定义的头文件 head.h、123db.h 和 log.h(可能定义了功能函数和数据结构)。
全局变量

tmp_buff、head_buff、wei_buff、body_buff、goodname 等字符串数组用于存储 HTTP 响应的各个部分和数据。
主要数据结构

HTTP_R_t 结构体(假设在其他引入的头文件中定义),存储 HTTP 请求的信息,如请求方法、URL 和内容等。
函数说明
unsigned char FromHex(unsigned char x)
将十六进制字符转换为对应的整数值。

int urlDecode(char* dest, const char* src)
解码 URL 编码字符串,将 % 开头的字符解码为对应的 ASCII 字符。

int init_tcp_ser(const char *ip, unsigned short port)
初始化一个 TCP 服务器,创建一个套接字并绑定到指定的 IP 和端口。

int recv_http_req(int connfd, char *http_req,int maxlen)
从客户端接收 HTTP 请求报文,存储在 http_req 中。

int parse_http_req(char *buff,HTTP_R_t *preq)
解析接收到的 HTTP 请求报文,提取请求方法、URL 和内容,并填充到 preq 中。

int send_http_head(int connfd)
发送 HTTP 响应头部,表明服务器的响应状态和内容类型。

int send_file(int connfd,char *failname)
发送指定文件的内容到客户端。

int html_creat(char *filename,char *content)

用于创建一个 HTML 文件,并写入指定的内容。这个函数接收文件名和内容作为参数,然后将内容写入到指定的文件中。

void deinit_log()
清理日志文件或资源,通常在程序结束时调用。
日志相关函数

init_log(), write_log(), close_log(): 这些函数用于初始化日志记录、写入日志,以及关闭日志文件。打印程序运行中的信息、错误或调试信息。

主程序流程
初始化日志
int ret = init_log();  
if (ret < 0) {  
    write_log(LOG_INFO, "初始化失败");  
    return -1;  
}  
write_log(LOG_INFO, "初始化成功");  
先初始化日志,如果失败则输出日志并退出。
初始化 TCP 服务器

int sockfd = init_tcp_ser("192.168.1.195", 8080);  
if (-1 == sockfd) {  
    perror("fail init");  
    return -1;  
}  
调用 init_tcp_ser 函数进行 TCP 服务器的初始化,这里绑定在指定的 IP 和端口。如果初始化失败,程序输出错误信息并退出。
进入主循环

while (1) {   
    int connfd = accept(sockfd, NULL, NULL);  
    ...  
}  
进入一个无限循环,等待客户端请求。accept() 方法用于接受传入的连接。
处理客户端请求

pid_t pid = fork();  
if (pid > 0) {  
    // 父进程  
} else if (pid == 0) {  
    // 子进程  
    ...  
}  
使用 fork() 创建一个子进程,子进程将处理客户端请求。父进程继续监听后续的客户端请求。
接收和解析 HTTP 请求

recv_http_req(connfd, http_req, sizeof(http_req));  
printf("=========\n");  
printf("%s\n", http_req);  
printf("=========\n");  

int ret = parse_http_req(http_req, &req);  
if (-1 == ret) {  
    close(connfd);  
    continue;  
}  
子进程使用 recv_http_req() 接收来自客户端的 HTTP 请求,并打印出来,然后调用 parse_http_req() 解析请求。如果解析失败,关闭连接,并继续等待下一个请求。
发送 HTTP 响应

send_http_resp(connfd, &req);  
根据解析的请求,调用 send_http_resp() 响应函数,发送处理结果给客户端。这涉及返回文件的内容,或者显示某个 HTML 页面。
关闭连接

close(connfd);  
结束子进程后,关闭与客户端的连接。
结尾处理
在主循环结束后(实际上该循环并不会结束,除非手动关闭程序),程序清理包括:

反初始化日志:deinit_log();
关闭服务器套接字:close(sockfd);

总结
这个简单的 HTTP 服务器通过 TCP/IP 协议监听对指定端口的请求,接收并解析 HTTP 请求,然后生成响应返回给客户端。整个结构展示了基本的多进程处理模型,使得服务器能够同时处理多个客户端的连接请求。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1986769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

几个g视频能压缩成几百mb吗?分享5种视频压缩方法

现如今&#xff0c;高清视频已成为我们日常生活和工作中的重要组成部分。然而&#xff0c;随着视频分辨率和时长的增加&#xff0c;文件体积也随之膨胀&#xff0c;给存储和传输带来了巨大挑战。这时候就需要给视频进行压缩处理&#xff0c;下面给大家分享5种视频压缩方法&…

数据标注在不同行业领域的典型应用场景

数据标注产业通过提供高质量的训练和评测数据集&#xff0c;助力人工智能技术在各领域的应用和发展。 1、科学研究 生物医学&#xff1a;标注病理切片、细胞图像、基因组数据&#xff0c;用于疾病诊断和新药研发的模型训练。地球科学&#xff1a;标注卫星图像、遥感数据&…

什么牌子的超声波清洗机好用又实惠?推荐选购这几个品牌

眼镜在日常佩戴中容易变脏&#xff0c;如果不注意清洁和保养&#xff0c;长时间下来不仅会影响镜片的清晰度&#xff0c;还可能对眼部健康和视力产生负面影响。因此&#xff0c;定期清洁眼镜是非常必要的。与传统手洗方法相比&#xff0c;现在有一种更便捷的选择——超声波清洗…

NUXTJS + pm2 部署开源电商PC商城

为了符合各种服务器场景&#xff0c;使用pm2 部署 PC 商城如下 注意&#xff1a;对比package.json代码修改配置即可&#xff0c;如果2024年5月之后下载的代码可以直接用命令启动 服务器安装node pm2 如已安装跳过此章节 在 CentOS 上安装 Node.js 和 PM2 的步骤如下&#xff1…

知识图谱学习总结

1 知识图谱的介绍 知识图谱&#xff0c;是结构化的语义知识库&#xff0c;用于迅速描述物理世界中的概念及其相互关系&#xff0c;通过知识图谱能够将Web上的信息、数据以及链接关系聚集为知识&#xff0c;使信息资源更易于计算、理解以及评价&#xff0c;并能实现知识的快速响…

链表是个好东西

链表和数组的区别 数组存放数据的地址是连续的&#xff0c;且增加&#xff0c;删除数据需要把后面的数据给挪位置 而链表存放数据的地址是随机的&#xff0c;他有一个指针指向下一个地址&#xff0c;增加&#xff0c;删除数据仅仅将指针指向给修改了即可 结构体用指针变量名访…

CLion运行C++程序

CLion运行C程序 MacBook Linux Windows C和C开发工具介绍 CLion安装和运行C程序 CLion设置 新建C项目 运行Hello world 点击执行,如图 或使用命令执行 #默认会生成a.out可执行文件 g main.cpp #执行 ./a.out#-o指定生成的文件名,比如: abc g main.cpp -o abc#执行./abc.o…

【vulnhub】Basic Pentesting :2靶机

靶机安装 下载地址&#xff1a;https://download.vulnhub.com/basicpentesting/basic_pentesting_2.tar.gz 运行环境&#xff1a;Virtual Box 注意&#xff1a;启动之后如果ip扫描不到&#xff0c;那就关闭之后&#xff0c;重新生成一个新的MAC网段 信息收集 靶机IP扫描 ne…

AnyMP4 Screen Recorder:高效专业的Mac/Win录屏神器

AnyMP4 Screen Recorder&#xff0c;一款专为Mac和Windows用户设计的高效、专业屏幕录制软件&#xff0c;凭借其强大的功能和便捷的操作体验&#xff0c;赢得了众多用户的青睐。这款软件不仅适用于教育、工作、娱乐等多种场景&#xff0c;更是成为在线教学、游戏直播、视频创作…

分享一个基于微信小程序的生鲜订购与配送平台SpringBoot(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

代码随想录 day 34 动态规划

第九章 动态规划part02 今天开始逐渐有 dp的感觉了&#xff0c;前 两题 不同路径&#xff0c;可以好好研究一下&#xff0c;适合进阶 详细布置 62.不同路径 本题大家掌握动态规划的方法就可以。 数论方法 有点非主流&#xff0c;很难想到。 https://programmercarl.com/0062…

RocketMQ5.0 Consumer Group

消费者分组的概念 消费者分组&#xff08;Consumer Group&#xff09;是指一组消费同一类消息的消费者实例。每个消费者分组有一个唯一的名称&#xff0c;用于标识该分组。消费者分组的设计使得消息能够被多个消费者实例并行消费&#xff0c;同时确保每条消息只被一个消费者实…

吴恩达机器学习笔记

1.机器学习定义&#xff1a; 机器学习就是让机器从大量的数据集中学习&#xff0c;进而得到一个更加符合现实规律的模型&#xff0c;通过对模型的使用使得机器比以往表现的更好 2.监督学习&#xff1a; 从给定的训练数据集中学习出一个函数&#xff08;模型参数&#xff09;…

LLM(大语言模型)「Agent」开发教程-LangChain(三)

v1.0官方文档&#xff5c;最新文档 一、LangChain入门开发教程&#xff1a;Model I/O 二、基于LangChain的RAG开发教程 LangChain是一个能够利用大语言模型&#xff08;LLM&#xff0c;Large Language Model&#xff09;能力进行快速应用开发的框架&#xff1a; 高度抽象的组件…

分享一个基于微信小程序的流浪动物救助领养平台springboot(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

C++基础编程100题-035 OpenJudge-1.4-16 三角形判断

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0104/16/ 描述 给定三个正整数&#xff0c;分别表示三条线段的长度&#xff0c;判断这三条线段能否构成一个三角形。 输入 输入共一行&#xff0c;包含三个正整数&#xff0c;分别表示三条线段的长度&#x…

数据资产:发展现状与未来展望

数据资产&#xff1a;发展现状与未来展望 数据资产作为当今数字经济发展的关键要素&#xff0c;正发挥着日益重要的作用。数据资产是被合法拥有或控制的&#xff0c;能进行计量的&#xff0c;为组织带来经济和社会价值的数据资源。它经历了从数据到数据资产的市场化过程&#x…

一文带你玩转全新采集配置 CRD:AliyunPipelineConfig

作者&#xff1a;玄飏 既然是一文玩转&#xff0c;自然要讲些背景 1.1. 什么是 iLogtail 采集配置 长话短说&#xff1a; SLS&#xff1a;阿里云日志服务&#xff0c;一站式提供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能&#xff0c;全面提升您在研发、…

atsec增加Swift CSP评估资质

atsec信息安全评估员现已被Swift列为Swift客户安全计划&#xff08;CSP&#xff1a;Customer Security Programme&#xff09;认证评估员目录中的评估提供商&#xff0c;可以帮助全球金融机构评估其针对CSP强制性和咨询性控制的合规级别。在金融行业&#xff0c;Swift要求使用其…