自学嵌入式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响应(含状态码/内容类型)

结果图

相关推荐
@小柯555m4 小时前
MySql(高级操作符--操作符混合运用)
数据库·sql·mysql
CDN3604 小时前
排查实录:网站偶发502/504错误?360CDN回源超时配置与日志分析技巧
前端·数据库
bzmK1DTbd4 小时前
JDBC编程规范:PreparedStatement与事务管理
数据库·python·eclipse
卧室小白4 小时前
Redis-哨兵模式
数据库·redis·缓存
GottdesKrieges4 小时前
OceanBase恢复常见问题
java·数据库·oceanbase
卧室小白4 小时前
redis-配置
数据库·redis·缓存
向風而行5 小时前
MySQL详解
数据库·mysql
belldeep6 小时前
本草纲目:如何应用 PostgreSQL 实现【中医药】主题数据库 ?
数据库·postgresql·本草纲目
Bert.Cai6 小时前
MySQL CURTIME()函数详解
数据库·mysql
Bert.Cai6 小时前
MySQL CURDATE()函数详解
数据库·mysql