C高级Linux远程终端管理系统
前言在职坐标学习的过程中每学一门编程后面都对应相应的开发项目。软件开发环节中需求分析尤为重要它关系着程序各个模块功能的实现、项目进度以及最终产品的质量。作为初学者在第一次面对如此集成化的开发任务时或多或少会一脸茫然不知道如何下手也不知道如何将之前所学内容全部结合起来运用这时切记不用慌张不要畏惧。反复核对项目的相应业务需求以及所需要注意的问题自己把其总结揉合起来写进txt文档随后用智能体根据需求分析txt文档生成项目需求分析说明书SRS仔细比对生成的SRS与项目的要求是否一致实现的大致框架清不清晰对于不满足的地方可以自己进行修改或者将需求告知智能体让其进行修改每问题之后随即让智能体生成对应的技术规格说明书TS对比SRS我们需要更加仔细地浏览一遍TS上的所有内容反复修改直到符合项目要求。有了SRS和TS对于项目开发会有很大帮助。作为刚入行的小白由于项目经验的不足可以依靠AI给出的TS获取启发在开发的过程中学习总结AI给出的这一套开发思路、流程在学习中不断进步。一、项目需求分析该项目是一个基于 TCP 协议的客户端-服务器架构系统。该系统旨在实现远程命令执行、用户管理、即时通讯及心跳检测等功能。1. 核心功能模块️ 服务器端配置与存储通过配置文件读取 IP 和端口使用文本文件存储用户账号密码使用链表动态维护在线客户端信息IP、时间、用户名、sockfd并需使用互斥锁/信号量处理多线程并发访问。多客户端支持基于 TCP 协议采用多线程机制支持多个客户端同时连接。远程命令执行接收客户端命令如 ls -l, pwd, ifconfig 等在服务器端执行并将结果返回给客户端显示。 客户端用户认证提供注册和登录功能。注册时检测用户名重复登录时进行密码验证连续 3次 错误即退出。即时通讯支持查询在线用户列表并能向指定用户发送文字消息类似 QQ 聊天。2. 连接与协议机制 心跳检测客户端利用 SIGALRM 定时3秒间隔发送心跳包。服务器若连续 5次即15秒未收到心跳包将记录异常并断开连接。 通信协议设计了统一的数据包格式包含类型、大小、数据内容。定义了多种数据包类型包括登录(TYPE_LOGIN)、注册(TYPE_REG)、消息(TYPE_MSG)、心跳(TYPE_HEART)、命令(TYPE_CMD)、查看在线(TYPE_ONLINE)及响应包。3. 非功能性需求 日志记录服务器需记录所有连接、命令执行、断开及心跳超时等信息包含时间、IP、命令内容等。⚙️ 性能与健壮性要求代码高效、节约资源严禁内存泄漏、野指针或数组越界所有变量和内存需初始化。️ 可维护性代码规范采用模块化设计多个 .c 文件 Makefile函数功能单一不超过50行。命名规范变量、函数、宏定义需遵循特定的命名规则如宏全大写、函数小写加下划线等确保代码易读易维护。二、项目业务流程流程一客户端连接与认证1. 客户端启动 → 创建 TCP Socket → connect() 连接服务端2. 服务端 accept() → 分配 client_info_t → 创建工作线程3. 用户选择注册/登录 → 发送 TYPE_REG/TYPE_LOGIN 包4. 服务端验证注册检查用户名重复、登录检查密码匹配和是否已在线5. 认证成功 → 插入会话链表 → 进入业务循环失败 3 次 → 断开连接流程二远程命令执行1. 客户端输入命令 → 封装 TYPE_CMD 包发送2. 服务端收到 → 安全检查危险命令黑名单→ popen() 执行 → 结果封装 为 TYPE_MSG 返回3. 客户端接收线程异步显示结果流程三心跳保活机制• 客户端SIGALRM 每 3 秒触发 → 发送 TYPE_HEART 包• 服务端工作线程收到心跳 → 调用 heartbeat_reset() 将 count 归零• 服务端心跳线程每 3 秒遍历链表 → count达到 515秒→ 关闭 socket、删除节点、记录日志• 采用两遍遍历策略避免死锁持锁收集超时列表解锁后执行 close/remove流程四私聊与群聊• 私聊客户端发送 TYPE_MSGdata 目标用户名 消息内容→ 服务 端 session_list_find_by_name() 查找目标 → send_message() 转发• 群聊客户端发送 TYPE_GROUP_MSG → 服务端遍历链表 → 向除发送者外的所有客户 端广播仅 1 人在线时返回提示流程五并发与同步• 会话链表pthread_mutex_t 保护所有增删查操作• 日志文件全局 log_mutex 保护多线程写入• 账户文件account_mutex 保护读写操作 • 锁顺序约定account_mutex → list-mutex → log_mutex避免死锁三、开发任务规划根据TS让AI给出为期七天的项目开发流程可以按照流程进行开发逐一深入。Day 1 ██████░░░░░░░░░░░░░░ 基础设施 协议层Day 2 ████████████░░░░░░░░ 服务端框架 链表 日志Day 3 ██████████████████░░ 认证 命令 handlerDay 4 ████████████████████ 心跳 聊天服务端完成Day 5 ████████████████████ 客户端全部完成Day 6 ████████████████████ 联调测试 Bug修复Day 7 ████████████████████ 审查收尾 交付四、总结总之处在AI时代的我们应该学会如何正确使用AI会用AI的同时也要避免过度依赖AI通过自己认真思考得到的答案会在我们的脑子里留下很深刻的印象。