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

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.rhkb.cn/news/393618.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动化工具Selenium IDE基本使用——脚本录制

1 简介 Selenium相信大家都知道&#xff0c;在做自动化操作时&#xff0c;要使用浏览器驱动直接控制浏览器操作的时候&#xff0c;大多会结合Selenium框架使用。 但在对网页操作自动化的时候&#xff0c;实际上有一种更轻量的做法&#xff0c;那就是直接使用Selenium IDE&…

【LeetCode每日一题】2024年8月第二周(上)

2024.8.5 困难 链接&#xff1a;600. 不含连续1的非负整数 &#xff08;1&#xff09;题目描述&#xff1a; &#xff08;2&#xff09;示例 &#xff08;3&#xff09;分析 思路1&#xff1a; 题目要求的数值&#xff0c;是将数二进制转换后&#xff0c;不存在连续的1&#x…

SQL时间盲注

目录 1.时间盲注 2使用场景 3.步骤 3.1判断注入点 3.2爆数据库名 3.3爆表名 3.4爆字段名 3.5查询数据 1.时间盲注 时间盲注是指基于时间的盲注&#xff0c;也叫延时注入&#xff0c;根据页面的响应时间来判断是否存在注入。 2使用场景 页面没有回显位置&#xff08;…

安装Supervisor队列进程、管理 Laravel 队列进程

在 CentOS 上安装 Supervisor 并配置 Laravel 的步骤如下&#xff1a; 1.安装 Supervisor&#xff1a; 使用以下命令安装 Supervisor&#xff1a; sudo yum install epel-release sudo yum install supervisor 2.配置 Supervisor&#xff1a; 创建一个新的 Supervisor 配置文…

EasyBoss ERP订单分仓规则优化升级,帮助跨境卖家高效处理TikTok本土店订单

做TikTok本土小店不仅要上货快&#xff0c;订单处理效率也得快&#xff01;效率越高&#xff0c;赚钱的速度就比别人要快&#xff01; 想提高订单效率&#xff0c;少不了EasyBoss ERP的帮忙&#xff0c;最近EasyBoss订单处理模块又有新升级&#xff0c;让老板们体验“快到飞起…

给新手项目经理的几点建议

踏入项目管理的新领域&#xff0c;对于每一位新手项目经理而言&#xff0c;都是一次既激动又充满挑战的旅程。在这个过程中&#xff0c;不仅需要掌握扎实的理论知识&#xff0c;还需要在实践中不断积累经验&#xff0c;提升自我。以下是一些针对新手项目经理的实用建议&#xf…

Stable Diffusion绘画 | 图生图-上传重绘蒙版

上传重绘蒙版&#xff0c;可以弥补局部重绘的缺点&#xff0c;能够更精细的修改画面中的指定区域 使用PS制作的蒙版图片为耳朵下方区域&#xff0c;可以为图片中的女生带上不同款式的耳环。 参数配置&#xff1a; 调整提示词&#xff1a; 生成图片如下所示&#xff1a; 调整提…

大数据面试SQL(一):合并日期重叠的活动

文章目录 合并日期重叠的活动 一、题目 二、分析 三、SQL实战 四、样例数据参考 合并日期重叠的活动 一、题目 已知有表记录了每个品牌的活动开始日期和结束日期&#xff0c;每个品牌可以有多个活动。请编写一个SQL查询合并在同一个品牌举行的所有重叠的活动&#xff0c…

手机在网时长查询接口如何对接?(一)

一、什么是手机在网时长查询接口&#xff1f; 传入手机号码&#xff0c;查询该手机号的在网时长&#xff0c;返回时间区间&#xff0c;支持携号转网号码查询。 二、手机在网时长查询接口适用于哪些场景&#xff1f; 例如&#xff1a;客户画像与精准营销 &#xff08;1&…

ROS 7上实现私网互通方案

一、背景: 第一个私网现状:连接公域网是由tp-link进行拨号链接使用动态公网ip,内部网段是192.168.1.0/24 第二个私网现状:连接公域网是机房的固定公网ip,内部网段为10.0.0.0/16二、目标 安全的打通192.168.1.0/24和10.0.0.0/16的网络, 使得前者局域网中的机器能够安全访…

C#使用Socket实现TCP服务器端

1、TCP服务器实现代码 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks;namespace PtLib.TcpServer {public delegate void Tcp…

浏览器渲染树的形成原理,你真的懂吗?

一、浏览器渲染的基本流程 解析 HTML 当用户在浏览器中输入网址或点击链接时&#xff0c;浏览器会向服务器发送请求获取 HTML 文件。随后&#xff0c;浏览器开始解析 HTML 代码&#xff0c;将其转化为一系列的标签和文本&#xff0c;并构建出 DOM 树。这棵树以层次结构表示了网…

Tensorflow预训练模型转PyTorch

深度学习领域是计算机科学中变化最快的领域之一。大约 5 年前&#xff0c;当我开始研究这个主题时&#xff0c;TensorFlow 被认为是主导框架。如今&#xff0c;大多数研究人员已经转向 PyTorch。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/…

无人机无线电监测设备技术分析

随着无人机技术的飞速发展&#xff0c;其在民用、军事、科研及娱乐等领域的广泛应用&#xff0c;对无线电频谱资源的有效管理和监测提出了更高要求。无人机无线电监测设备作为保障空域安全、维护无线电秩序的重要工具&#xff0c;集成了高精度定位、频谱扫描、信号分析、数据处…

《Token-Label Alignment for Vision Transformers》ICCV2023

摘要 这篇论文探讨了数据混合策略&#xff08;例如CutMix&#xff09;在提高卷积神经网络&#xff08;CNNs&#xff09;性能方面的有效性&#xff0c;并指出这些策略在视觉Transformer&#xff08;ViTs&#xff09;上同样有效。然而&#xff0c;发现了一个“token fluctuation…

Axure RP界面设计初探:基础操作与实用技巧

Axure RP是目前流行的设计精美的用户界面和交互软件。Axure RP提供了一组丰富的RP。 UI 控件&#xff0c;这些控件根据它们的应用领域进行分类。作为Axure的国产替代品&#xff0c;它可以在线协同工作&#xff0c;浏览器可以在不下载客户端的情况下立即打开和使用。如果以前用A…

OpenCV专栏介绍

在当今人工智能和计算机视觉领域&#xff0c;OpenCV作为一个功能强大的开源库&#xff0c;已经成为实现各种视觉算法的基石。本“OpenCV”专栏致力于帮助读者深入理解并掌握OpenCV的使用&#xff0c;从而在计算机视觉项目中发挥关键作用。 专栏导读 随着技术的不断进步&#…

e6.利用 docker 快速部署自动化运维平台

利用 docker 快速部署自动化运维平台 1. 安装docker2. 拉取镜像3. 启动容器4. 初始化5. 访问测试 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主 机在线终端、文件在线上传下载、应用发布部署、在线任务计划、配置中…

Java程序员接单分享

作为一名Java程序员&#xff0c;这阵子通过承接些小型项目&#xff0c;我顺利跨过了月薪破万的门槛。这些项目虽小&#xff0c;却如同磨刀石般&#xff0c;让我在实战中发现了自身技术栈的棱角与不足&#xff0c;尤其是意识到了在Java这一浩瀚技术海洋中的诸多未知领域。我深知…

pytorch和deep learning技巧和bug解决方法短篇收集

有一些几句话就可以说明白的观点或者解决的的问题&#xff0c;小虎单独收集到这里。 torch.hub.load how does it work 下载预训练模型再载入&#xff0c;用程序下载链接可能失效。 model torch.hub.load(ultralytics/yolov5, yolov5s)model torch.hub.load(ultralytics/y…