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

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

时间:2024-08-06 20:54:29浏览次数:17  
标签:http 请求 int 数据库 req tcp html HTTP 客户端

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,请求,int,数据库,req,tcp,html,HTTP,客户端
From: https://blog.csdn.net/hkhkhkhkh123/article/details/140966138

相关文章

  • HTML&CSS
    一、Html、css、jshtml:超文本标记语言——负责网页的结构css:层叠样式表——页面显示的样式、排版js:JavaScript——界面交互(动态交互、逻辑)二、Htmldiv和span1.divdivision:div里面所有的元素都在div区域里面,div里面可以嵌套别的标签   div独占一行2.span:功能类似......
  • MySQL数据库基础1
    sql通用语法SQL语句可以单行或多行书写,以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性MySQL数据库的SQL语句不区分大小写,关键字建议使用大写注释:单行注释:--注释内容或#注释内容(MySQL特有)多行注释:/*注释内容*SQL分类DDL库操作查询所有数据库sho......
  • 正本清源:TCP协议之三次握手和四次挥手
    一、三次握手的原理通俗解释:1>客户端发送一条请求到服务端(通过TCP报文,其中标记位是SYN),问:我可以跟你建立连接吗?--第一次握手2>服务端收到了客户端发来的请求连接的报文,回复给客户端一个确认信息同意建立连接(标记为ACK),同时发送连接请求到客户端,问:我服务端可以和你客户端建......
  • Springboot计算机毕业设计电商订单管理系统(程序+源码+数据库)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,商品分类,商家,商品信息开题报告内容摘要本文旨在设计并实现一个高效、易用的电商订单管理系统,以满足现代电商企业对订单处理、库存控制、物流跟踪及财务......
  • Springboot计算机毕业设计电脑商城购物系统(数据库、调试部署、开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,商品分类,商品品牌,商品信息开题报告内容1.选题背景及意义1.1选题背景随着计算机和网络的普及,电子商务已经成为现代社会不可或缺的一部分。特别是在21......
  • Springboot计算机毕业设计电商平台设计与实现(程序+源码+数据库)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,产品类型,农产品信息开题报告内容一、研究背景与意义1.1研究背景随着互联网技术的迅猛发展和全球数字化进程的加速,电子商务已成为现代商业活动的重要组......
  • Springboot计算机毕业设计党支部信息管理系统的设计与实现(数据库、调试部署、开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表党员,党支部公告,党支部新闻,月缴费情况,年缴费情况,活动信息,支部信息,群众,入党申请,财务,负责人开题报告内容一、研究背景与意义研究背景随着信息技术的迅......
  • Springboot计算机毕业设计第二学位学生管理系统(数据库、调试部署、开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,教师,班级信息,课程类别,课程信息,课程选择,在线咨询,成绩分类,课程成绩,学生学籍,课程退出,院系,专业,年级开题报告内容一、研究背景与意义研究背景随着......
  • HTML 标题
    您正确地概述了HTML中标题(Heading)、水平线(<hr/>)和注释(Comment)的使用方法和重要性。这些元素在网页设计中扮演着关键的角色,不仅影响页面的结构和可读性,还对搜索引擎优化(SEO)和用户体验有着重要影响。HTML标题HTML中的标题标签<h1>到<h6>定义了六种不同级别的标题。这些标题......
  • SSM高校学生学业预警系统5253u 本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:课程,班级,教师,学生,课程信息,选课信息,考勤信息,成绩信息,学籍信息,预警信息开题报告内容一、选题背景随着高等教育规模的不断扩大和教育质量的提升......