python如何建网站建设,wordpress广告管理,建设部网站危险性较大,广告设计好学吗1.项目背景
在线信息查询系统是一种可用于检索和展示各种信息的计算机程序或平台。主要特点包括#xff1a;
用户接口#xff1a;通常提供友好的界面#xff0c;用户可以方便地输入查询条件。
数据存储#xff1a;系统往往连接到数据库#xff0c;存储大量信息#xf…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 请求然后生成响应返回给客户端。整个结构展示了基本的多进程处理模型使得服务器能够同时处理多个客户端的连接请求。