自学嵌入式day43,商城网页

HTTP服务器与数据库集成项目笔记

项目概述
  • 基于C语言的HTTP服务器程序
  • 集成SQLite3数据库管理功能
  • 实现用户注册/登录和商品搜索功能
  • 使用POSIX套接字API实现网络通信
技术栈
  1. 网络层

    • 使用socket()创建TCP套接字
    • bind()绑定8080端口
    • listen()监听连接请求
    • accept()处理客户端连接
    • 支持HTTP协议基础响应格式
  2. 数据库层

    • SQLite3轻量级数据库

    • 数据库文件:123.db

    • 核心数据表:

      sql 复制代码
      CREATE TABLE users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username TEXT UNIQUE NOT NULL,
        password TEXT NOT NULL
      );
      sql 复制代码
      CREATE TABLE goods (
        goods_id INTEGER PRIMARY KEY AUTOINCREMENT,
        goods_name TEXT NOT NULL,
        shop_price REAL,
        ...
      );
  3. 功能模块

    • 用户认证系统
      • 注册:db_register_user()
      • 登录:db_login_user()
    • 商品管理
      • 示例数据预置
      • 搜索功能:handle_search_results()
核心代码逻辑
c 复制代码
// 主服务循环
while (1) {
  int conn_fd = accept(server_fd, (struct sockaddr*)&client_addr, &addr_len);
  char buffer[BUFFER_SIZE];
  read(conn_fd, buffer, sizeof(buffer));
  
  // 请求路由解析
  if (strstr(buffer, "GET /login")) {
    handle_login_page(conn_fd);
  } 
  else if (strstr(buffer, "POST /register")) {
    // 解析表单数据
    handle_register_page(conn_fd);
  }
}
数据库操作示例
c 复制代码
// 用户注册实现
int db_register_user(const char *username, const char *password) {
  sqlite3_prepare_v2(db, "INSERT INTO users VALUES (?,?)", -1, &stmt, NULL);
  sqlite3_bind_text(stmt, 1, username, -1, SQLITE_STATIC);
  sqlite3_bind_text(stmt, 2, password, -1, SQLITE_STATIC);
  int rc = sqlite3_step(stmt);
}
项目亮点
  1. 完整的HTTP请求/响应处理流程
  2. 数据库表结构设计合理
  3. 预置商品数据便于功能演示
  4. 错误处理机制完善(SQLite错误码检查)
优化建议
  1. 增加密码加密存储(如bcrypt)
  2. 实现会话管理(Cookie/Session)
  3. 支持静态文件服务(HTML/CSS)
  4. 添加SQL注入防护
执行流程
  1. 初始化数据库表结构
  2. 启动HTTP监听服务
  3. 根据请求路径分发处理:
    • /login → 登录页面
    • /register → 注册处理
    • /search → 商品查询
  4. 返回HTTP响应(含状态码/内容类型)

HTTP服务器与数据库集成项目笔记

项目概述
  • 基于C语言的HTTP服务器程序
  • 集成SQLite3数据库管理功能
  • 实现用户注册/登录和商品搜索功能
  • 使用POSIX套接字API实现网络通信
技术栈
  1. 网络层

    • 使用socket()创建TCP套接字
    • bind()绑定8080端口
    • listen()监听连接请求
    • accept()处理客户端连接
    • 支持HTTP协议基础响应格式
  2. 数据库层

    • SQLite3轻量级数据库

    • 数据库文件:123.db

    • 核心数据表:

      sql 复制代码
      CREATE TABLE users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username TEXT UNIQUE NOT NULL,
        password TEXT NOT NULL
      );
      sql 复制代码
      CREATE TABLE goods (
        goods_id INTEGER PRIMARY KEY AUTOINCREMENT,
        goods_name TEXT NOT NULL,
        shop_price REAL,
        ...
      );
  3. 功能模块

    • 用户认证系统
      • 注册:db_register_user()
      • 登录:db_login_user()
    • 商品管理
      • 示例数据预置
      • 搜索功能:handle_search_results()
核心代码逻辑
c 复制代码
// 主服务循环
while (1) {
  int conn_fd = accept(server_fd, (struct sockaddr*)&client_addr, &addr_len);
  char buffer[BUFFER_SIZE];
  read(conn_fd, buffer, sizeof(buffer));
  
  // 请求路由解析
  if (strstr(buffer, "GET /login")) {
    handle_login_page(conn_fd);
  } 
  else if (strstr(buffer, "POST /register")) {
    // 解析表单数据
    handle_register_page(conn_fd);
  }
}
数据库操作示例
c 复制代码
// 用户注册实现
int db_register_user(const char *username, const char *password) {
  sqlite3_prepare_v2(db, "INSERT INTO users VALUES (?,?)", -1, &stmt, NULL);
  sqlite3_bind_text(stmt, 1, username, -1, SQLITE_STATIC);
  sqlite3_bind_text(stmt, 2, password, -1, SQLITE_STATIC);
  int rc = sqlite3_step(stmt);
}

项目亮点
  1. 完整的HTTP请求/响应处理流程
  2. 数据库表结构设计合理
  3. 预置商品数据便于功能演示
  4. 错误处理机制完善(SQLite错误码检查)
优化建议
  1. 增加密码加密存储(如bcrypt)
  2. 实现会话管理(Cookie/Session)
  3. 支持静态文件服务(HTML/CSS)
  4. 添加SQL注入防护
执行流程
  1. 初始化数据库表结构
  2. 启动HTTP监听服务
  3. 根据请求路径分发处理:
    • /login → 登录页面
    • /register → 注册处理
    • /search → 商品查询
  4. 返回HTTP响应(含状态码/内容类型)

结果图

相关推荐
devmoon7 小时前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
认真的薛薛7 小时前
数据库-sql语句
数据库·sql·oracle
爱学英语的程序员7 小时前
面试官:你了解过哪些数据库?
java·数据库·spring boot·sql·mysql·mybatis
·云扬·8 小时前
MySQL Redo Log落盘机制深度解析
数据库·mysql
用户982863025689 小时前
pg内核实现细节
数据库
飞升不如收破烂~9 小时前
Redis 分布式锁+接口幂等性使用+当下流行的限流方案「落地实操」+用户连续点击两下按钮的解决方案自用总结
数据库·redis·分布式
workflower9 小时前
业务需求-假设场景
java·数据库·测试用例·集成测试·需求分析·模块测试·软件需求
亓才孓9 小时前
[JDBC]基于三层架构和MVC架构的JDBCTools
数据库
IT邦德9 小时前
RPM包快速安装Oracle26ai
数据库·oracle
Dovis(誓平步青云)9 小时前
《滑动窗口算法:从 “暴力遍历” 到 “线性高效” 的思维跃迁》
运维·服务器·数据库·算法