毕业设计论文-linux下远程考试服务器端处理系统内容摘要:

并将剩下的时间返回。 返回值 : 返回之前闹钟的剩余秒数,如果之前未设闹钟则返回 0。 signal()函数 typedef void (*sighandler_t)(int)。 sighandler_t signal(int signum, sighandler_t handler) 参数: signum:信号编码。 handler:新的信号处理句柄。 返回说明:成功执行时,返回以前的信号处理句柄。 失败返回 SIG_ERR。 功能描述: 为指定的信号安装新的处理句柄。 信号处理句柄可能是用户指定的函数, SIG_IGN 或 SIG_DFL。 当信号到达时,如果其处理句柄是 SIG_DFL,那么会以默认的方式处理信号;如果其处理句柄 是 SIG_IGN,那么信号会被忽略;最后,如果处理句柄是用户指定的函数,此时先将信号处理方式重置为 SIG_DFL,接着有可能阻塞处理中的信号,最后是调用信号处理句柄。 fork()函数 pid_t fork(void)。 正确返回:在父进程中返回子进程的进程号,在子进程中返回 0 错误返回: 父进程中返回 1,没有子进程创建 下面是发生错误时,可能设置的错误代码 errno: EAGAIN:系统调用 fork 不能得到足够的内存来复制父进程页表。 或用户是超级用户但进程表满,或者用户不是超级用户但达到单个 用户能执行的最大进程数。 ENOMEM:对创建新进程来说没有足够的空间,该错误是指没有足够的空间分配给必要的内核结构。 2 系统 需求分析 服务器端 功 能需求 基于 Liunx 作为服务器的稳定性,数据库要实现保存用户信息,保存试题,保存用户提交的答案。 功能上能提供设置合法的考试时间,验证客服端的合法登陆,拒绝非法用户登录,若用户登录成功,回送试题和服务器设定的考试时间,等待用户提交答案,对考试时间进行限制,对用户提交的答案进行评分,添加删除用户 ,实现在客户提交答案或 考试完成后, 终止终端再登陆,正确的实现 添加删除用户,既要对添加的用户学号的长度进行限制,也要对 口令 长度进行限制,防止添加相同学号的用户。 本系统不够完善的地方就是没能提供在服务器端保存多套试题,同时发放或任意抽取一份用于实际考试 ,此为不足之一; 作为远程考试系统,系统维护管理中应该提供权限设置,题库管理,考试管理等功能,其中题库管理应该包括试题的录入,删除,修改,浏览等功能。 本系统没有对服务器上管理用户的权限进行设置, 为不足之二 ; 采用 C 开发,由于时间仓促,对 C操作数据 库的各种函数 不够熟悉,没能采用正规的数据库, 此为不足之三 ;最后未能提供 很好的 网络出 错故障的处理 能力,此乃 不足之四。 本人正努力学习相关知识,致力于应用正规数据库开发考试服务器, 希望能够更好地改善系统,争取能取得长足的进步。 服务器端性能需求 作为考试 服务器 ,应该承受起 大负荷的 工作量 ,因为在为整个网络服务时,服务器 端 的工作量是普通工作站的几倍甚至几十倍。 考试 服务器 端处理系统 与普通 客户端应用系统性能 的主要区别如下: ① 并发性(要求 运算速度快 ) ; ② 数据库要求 存储容量大(包括内存容量和硬盘容量); ③ 可靠性和稳定性 ; ④安全性 和实时性 由于考试服务器 面对的客户数量是几十甚至上百千,故对 服务器的并发处理能力要求很高, 运算速度快 , 内存容量和硬盘容量 大作为服务器的硬件基础,是满足多用户数据并发计算的前提条件。 当用户大批量登录时,对读取本地用户数据信息的能力要求非常迅速和可靠,故要求设计一个比较安全和健壮 ,运算速度快 的算法或者循环实现这项功能;对非法用户的登录要严格识别,对客户传过来的数据要判断是否完整,如果是在 Inter 上,还要判断用户的数据是否被更改。 对传输中突然断线的用户 数据 要进行相应处理 ,即要有对网络出错故障的处理能力;对用户回送的答案要进行正确的保存,拒绝已提交答案用户再登录成功。 安全关闭相应用户的连接,释放相应的内存空间,正确的实现添加删除用户,既要对添加的用户学号的长度进行限制,也要对 口令 长度进行限制,防止添加相同学号的用户。 更重要的是: 要对考试时长进行正确的判断。 Linux 本来就是一种运行非常稳定的系统,在它之下开发的考试服务器相信也会运行稳定和可靠。 同时,网络通信技术的成熟也为可靠性和实时性提供了有力的保障。 客户端 功 能需求 客户端要求实现安全登录服务器,读取服务器回送的试题 和考试时长 , 根据这个时长设定时钟信号, 然后创建一个本地临时文件,将该用户的学号先保存到这个 文件中, 然后进行试题的回答, 每回答一题就写到本地临时文件中, 答卷完毕, 当用户提交答案 时 就把临时文件中的所有内容上传到服务器相关的文件中保存,服务器响应保存答案成功 消息,然后客户端可删除本地这个临时文件,安全退出。 当客户端超过一定时间不提交答案时,客户端会有主动提示考试所剩时间,在客户超时没有提交答案的情况下,会因设定的时钟信号而被强制退出。 作为客户端,在 未提交答案的情况下,要实现当想更改回答问题的答案时可随时更改,本系统客户端能很好地实现此功能。 此外,当收到服务器保存答案的消息是不成功时 ,要实现重建连接,再 次提交,直到提交成功为止,本系统客户端 未能 很好地 提供此功能, 即客户端的网络故障处理能力,此乃客户端的不足。 客户端 性 能需求 客户端 最重要的是 要求有很好的网络出错处理能力,因为单靠服务器端的出错处理是远远不够的,当本地客户因网络故障或者别的原因断线时,要正确地再次发起连接,判断数据是否已经传送完整,在传送不完整或者不成功的情况下要自动重传,当服务器接收答案不成功时也要重传,在确保所有信息都被服务器正确保存的前提下才能安全地关闭连接。 然后,正确删除本地临时文件。 超时情况下,要正确可靠地退出程序。 最理想 的是本地客户端也可实现禁止再登录。 系统 错误处理需求 无论任何系统都有多多少少的 Bug 存在,更别说一个没有经过系统测试的软件。 故系统的错误处理需求也是很重要和必要的。 在系统设计时,要设计各种出错时返回的识别码,系统要正确接收和处理这些识别码,返回相关的出错原因信息,方便程序编写调试,写出更高质量的代码。 同时要很好地处理这些错误,防止系统崩溃。 必要时候可以自动重启服务器程序,防止系统资源被过度消耗,安全地退出死循环,对每个连接的用户可以正确地分配一定限度的资源,对 TCP/IP协议栈和接收缓冲区有很可 靠的故障处理能力。 同时要设计很完善的网络出错判断模块,系统要根据不同的原因采取不同的处理办法,防止因网络故障而丢弃客户端提交的答案或者使合法的用户无法登录。 3 系统概要设计 系统概要设计准则 功能简洁实用性 服务器端无需很友好的界面,主要是考虑简单实用和稳定,稳定既要系统的代码健壮,更要求没有必要的代码花销,故直接采用控制台的形式可以快速启动服务器,节约服务器资源,避免无需的额外花销。 直接输入相应命令的方式可以很方便快捷地和系统进行交互,得到快速的响应,同时实用性表现在系统可以满足一 个作为考试服务器的软件应有的功能需求 ,达到作为一个服务器软件应有的标准。 由于客户端也采用控制台命令模式,故在设计时,尽量避免过多复杂的操作,且在相关的地方也会有系统提示,可满足用户的需求。 系统结构紧凑性 紧凑性就是一个设计能否装进人脑中的特性,测试软件紧凑性的一个很实用的好方法是:有经验的用户通常需要操作手册 的辅助 吗。 如果不需要,那么这个设计就是紧凑的。 本系统设计时基本上都是采用系统调用,而 Linux 系统调用API 是半紧凑的, 且 Linux 程序员很容易记住满足大多数应用编程(文件系统操作、信号和 进程控制)的系统调用子集。 要提高设计的紧凑性,有一个精妙但强大的方法,就是围绕 “ 解决一个定义明确的问题 ” 的强核心算法组织设计,避免臆断和捏造。 本系统设计时,针对服务器软件应该提供的最主要功能,围绕这个功能不足深化和完善系统,尽量实现系统结构的紧凑性。 系统可扩展性 设计良好的代码允许更多的功能在必要时可以被插入到适当的位置中。 这样做 的危险 是为了应对未来可能需要进行的修改,而造成代码被过度工程化地开发。 可扩展性反映了软件适应 “ 变化 ” 的能力。 在软件开发过程中, “ 变化 ” 是司空见惯的事情,如需求、设计的 变化,算法的改进、程序的变化等。 在设计并发性时,采用多进程并发处理的方式,就是为了以后方便程序功能的扩展, 模块化的设计思想也使系统有很好的可扩展性。 系统可靠性 可靠性 (Reliability)是产品在规定的条件下和规定的时间内完成规定功能的能力 ,他的概率度量称为可靠度。 软件可靠性 (Software Reliability)是软件系统固有特性之一 ,它表明了一个软件系统按照用户的要求和设计的目标,执行其功能的正确程度。 软件可靠性与软件缺陷有关,也与系统输入和系统使用有关。 理论上说,可靠的软件系统应 该是正确、完整、一致和健壮的。 但是实际上任何软件都不可能达到百分之百的正确,而且也无法精确度量。 在系统设计时,要充分考虑 对 各种出错情况的处理,包括网络错误,用户输入的错误,系统本身的缺陷等 ,特别是要对用户的错误输入敏感,能够很好地处理各种错误是系统可靠性的必要条件。 系统模块设计 系统 总体工作 模型 系统工作模型 : 服 务器 父进 程监 听子 进程 0 1服 务子 进程 0 4服 务W a i tW a i tW a i tW a i t子 进程 0 2服 务W a i t客 户 0 3 父 进 程子 进程 0 3服 务W a i t客 户 0 4 父 进 程W a i tW a i t客 户 0 3 子 进 程客 户 0 4 子 进 程客 户 0 2 子 进 程客 户 0 1 子 进 程客 户 0 2 父 进 程客 户 0 1 父 进 程 图 服务器父进 程 处理 流程图: 父 进 程主 菜 单1启 动 服 务 系 统 管 理23退 出用 户 管 理子 菜 单 123评 分显 示 结 果设 置 时 间删 除 用 户子 菜 单 2添 加 用 户23已 存 在。 1是已 存 在。 正 确。 否是时 间 到。 是否计 时连 接 到 来。 否是派 生 子 进 程关 闭 连 接 是定 时 器成 功。 否退 出监 听 中时 钟 信 号收 到 信 号12子 进 程 信 号回 收 子 进 程1删 除添 加否继 续。 是否否是 拒 绝继 续。 否是输 入 答 案3 图 在主菜单中选择 1 时,父进程在考试开始时启动监听且只负责监听, 在用户成功登录后,和对应的某一用户建立连接,之后父进程创建子进程之后把连接交给子进程,马上返回继续监听下一个 用户的 请求。 在考试后期,还要处理回收退出的子进程。 这里要设计的模块有:一是提供 获取系统当前 时间 的 模块 (将当前的 时和 分转为整型 ); 二是 获取设置的时间的长度 (并将设置的时间的格式设为时分格式 且分别将时和分转为整型 )并实现判断设置的时间是否合法,在设置的时间还没到来之前要进行计时; 三是将模块二设置的考试时间长度作为一个时钟信号的长度,实现超时停止服务 (定时器 );四 是 将设置的时间和当前获取的系统时间比较,时间到将启动服务,没到之时计时器在工作;五是定时器处理模块, 处理考试结束; 五 是系统管理大模块,包括对用户 评分,显示结果之后返回主菜单;用户管理模块,此模块又可分为删除用户小模块和添加用户小模块,在设计这两个模块时要实现可循环操作,添加用户时还要实现不能添加数据库已有的用户 ;六是子进程回收模块,处理 退出了的子进程,避免僵尸进程出现。 服务器子进程模块 服务器子进程处理流程图: 子 进 程数 据 结 束 ?用 户 登 录 信 息是登 录 记 录否回 应 失 败本 地 信 息解 锁用 户 存 在。 是 否回 应 成 功退 出回 应 失 败回 送 试 题超 时 ?是 写 入 默 认 答 案写 入 答 案否退 出成 功。 加 锁是用 户 存 在 ?否数 据 结 束 ?是否等 待 答 案异 常回 应 成 功断 开 连 接记 录 错 误未 知 错 误退 出解 锁记 录 错 误写 入 默 认 答 案写 入 默 认 答 案写 入 记 录是否 图 子进程关闭继承来的监听套接口描述符,使用继承而来的连接套接口和客户通信,负责验证用户的合法性,回传试题和接收对应用户的答案,返回相关信息。 这里要设计的模块有:一是接收用户发送过来的用户名和 口令 ,读取本地用户信息进行验证,若比较成功,则返回相应的成功标识,不成功返回失败标识;二是在前面返回成功标识的前提下申请对 文本加锁, 加锁成功时 读取本地的 文本信息, 加锁不成功时等待, 文。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。