项目名称
在线商城系统
项目简介
该项目是一个在线商城系统,支持用户注册、登录、注销、商品搜索和展示等功能。系统通过HTTP协议与客户端进行通信,基于SQLite数据库管理用户信息,并使用Epoll机制管理多路复用I/O操作。主要功能包括创建和管理服务器套接字,处理客户端的HTTP请求,解析和响应客户端的请求。
功能模块
-
创建套接字:
- 函数名:
creat_socket
- 功能: 创建服务器套接字,并绑定到指定的IP和端口上,设置监听。
- 输入:
const char *ip
- 服务器IP地址,int port
- 端口号 - 输出: 成功返回
sockfd
,失败返回-1
- 函数名:
-
添加套接字到Epoll监听集合:
- 函数名:
add_fd
- 功能: 将文件描述符添加到Epoll监听集合中,监控指定的事件。
- 输入:
int epfd
- Epoll实例的文件描述符,int fd
- 需要监控的文件描述符,uint32_t tmpenvent
- 事件类型 - 输出: 成功返回
0
,失败返回-1
- 函数名:
-
从Epoll监听集合中删除套接字:
- 函数名:
del_fd
- 功能: 从Epoll监听集合中删除指定的文件描述符。
- 输入:
int epfd
,int fd
- 输出: 成功返回
0
,失败返回-1
- 函数名:
-
接收HTTP请求:
- 函数名:
recv_http
- 功能: 接收客户端发送的HTTP请求数据。
- 输入:
int confd
- 套接字文件描述符,char *pbuff
- 接收缓冲区,int maxlen
- 缓冲区最大长度 - 输出: 成功返回接收数据的大小,失败返回
-1
- 函数名:
-
发送HTTP响应:
- 函数名:
send_http
- 功能: 处理并发送HTTP响应报文。
- 输入:
int confd
- 套接字文件描述符,request_t *ptmp
- 请求结构体 - 输出: 成功返回
0
,失败返回-1
- 函数名:
-
发送响应报文头:
- 函数名:
sendhead_report
- 功能: 根据响应状态,构造并发送HTTP响应头。
- 输入:
int confd
- 套接字文件描述符,int aim
- 响应状态(0:成功,1:失败) - 输出: 成功返回发送字节数,失败返回
-1
- 函数名:
-
发送响应报文正文:
- 函数名:
sendbody_report
- 功能: 读取文件并发送响应报文正文。
- 输入:
int confd
,char *filepath
- 输出: 成功返回
0
,失败返回-1
- 函数名:
-
解析HTTP请求:
- 函数名:
analysis_hettp
- 功能: 解析HTTP请求头,提取方法、路径和正文内容。
- 输入:
int confd
,char *recv
- 接收的请求数据,int len
- 请求数据长度,request_t *ptmp
- 请求结构体 - 输出: 成功返回
0
- 函数名:
-
用户信息管理:
- 函数名:
analysis_idkey
- 功能: 处理用户的注册、登录和注销操作,管理用户信息。
- 输入:
request_t *ptmp
,id_key *word
- 输出: 注册成功或账号不存在返回
0
,密码正确返回1
,密码错误返回2
,失败返回-1
- 函数名:
-
ID和密码验证回调函数:
- 函数名:
callback_1
- 功能: 验证用户ID和密码的正确性。
- 输入:
void *arg
,int column
,char **pcontent
,char **ptitle
- 输出: 成功返回
0
- 函数名:
代码结构
-
主程序模块
- 负责创建服务器套接字,初始化Epoll实例,循环处理客户端请求。
-
数据库管理模块
- 处理用户注册、登录和注销操作,管理用户信息。
-
HTTP请求处理模块
- 解析并响应HTTP请求,处理GET和POST请求,发送网页文件。
项目特色
- 使用Epoll机制提高服务器的并发处理能力。
- 支持基本的用户管理功能,包括注册、登录和注销。
- 基于SQLite数据库进行数据存储,简单易用。
- 代码包含调试宏定义,方便调试。
使用方法
- 编译: 使用
gcc
编译器编译源代码,生成可执行文件。 - 启动服务器: 运行编译后的可执行文件,服务器将开始监听指定端口。
- 访问商城: 客户端可以通过浏览器访问服务器,进行注册、登录、商品搜索等操作。
依赖
libsqlite3-dev
: SQLite数据库开发库libc
: 标准C库
注意事项
三级界面到四级界面还有bug,有错误,IP需要改为自己的ip