大型作业答辩演讲.ppt.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
大型作业答辩演讲.ppt.ppt

大型作业答辩 考试程序”客户端/服务器模式”制作详解 程序组成结构 服务器程序: 1.采用了WinSocket32的完成端口模型(I/O completion ports) 2.WIN32多线程技术 3.ODBC APIS 进行数据库操作 客户端程序: 1.用Win32 API函数构造主窗体和界面元素 服务器程序详解 完成端口模型(I/O complrtion ports)是迄今为止最为复杂的一种I/O模型,假如一个程序需要管理为数众多的套接字,那么采用这种模型往往可以达到最佳的系统性能,不幸的是该模型只适用与WIN2000和WINNT操作系统,因其设计的复杂性,只有在你的应用程序需要同时管理数百乃至上千个套接字的时候,而且希望随着系统内安装的CPU的数量增多,应用程序的性能也可以线性的提升,才考虑采用”完成端口模型”(WEB服务器便是这方面的典型例子.), I/O complrtion ports是唯一适用于高负载服务器的一个技术,它利用一些线程帮助平衡”I/O请求”所引起的负载,这样的构架特别适合应用在SMP系统中产生所谓的”Scalable”服务器.(Scalable是指能够籍着增加RAM或磁盘空间,CPU个数而提升应用程序效能的一种系统). 服务器程序详解2 完全端口模型的具体实现 为了使用”完成端口模型”,我产生了一堆线程在端口上等待,线程数量=CPU个数x2+2,我将每个客户端产生的文件句柄与I/O completion ports端口相关联,建立了这种关系之后,任何客户端发出操作请求,便会导致I/O completion packet被送到”完成端口”去,这个步骤是操作系统完成的,为了回应I/O completion packet,我让I/O completion释放一个等待中的线程,如果目前没有线程正在等待,它不会为这个客户端N产生新的线程, 当作用中的线程处理完毕相应客户端的”overlapped I/O”后,将返回I/O completion端口进行等待. 客户端N这时才能够被处理,这样就保证了我的Workers线程总是保持一个稳定的数量(CPU个数x2+2). 服务器程序详解4 数据库的操作实现: 这部分功能主要是通过WinSocket32 API和ODBC API结合使用来实现的,服务端进入监听状态后,为每个客户端提供相应线程处理发过来的指令,通过分析指令,作出以下相应的操作 客户端发送的指令(自定义的): login: 登陆校验 参数:用户名,科目,密码 Srecv:ScanTm: 检查服务器时间校对试卷修改试卷状态,抛出计数值 Srecv:GetSta: 获取试卷状态 Srecv:GetRlt: 获取上次做答 Srecv:GetNum: 获得试卷相关信息(总题数,开考时间,结束时间) Srecv:GetQue: 获取试卷题目内容. Srecv:SaveDt: 保存试卷 Srecv:ChanST: 修改试卷状态. 服务器程序总结 数据库被单独存放在一个服务器中可以保证数据安全性 程序会将客户端的一切操作显示在窗口中,用户可以通过观察窗口,知道所有客户端的动作. 这个程序采用”完成端口”模型,可以满足大规模的考试需求. 客户端程序详解1 窗口完全采用Win32API函数生成 主要包含一下标准控件 static控件 Edit控件 Button控件 Scroll控件 窗口元素全部采用计算后的相对坐标定位,所以800X600和1024X768下均能正常显示. 客户端程序详解2 试卷的初始化 考虑到每张试卷的题目数量都不同,为了节约内存空间,所以我在堆中动态生成了一个试卷结构体,通过向服务器程序发送GetNum:指令来获得试卷总题数QuestionNum,然后使用TestPaper=new TestRubric [QuestionNum] /*结构体定义*/ //试卷每道题的结构 struct Questions{ BOOL state; char Text [512]; }; struct SelectObject{ BOOL state; char Text[256]; }; struct TestRubric{ struct Questions Tile; struct SelectObject choose [4]; }; 由于TextOut函数不支持自动换行,所以换行操作必须由我自己完成.因此我用同样的方法在堆中创建了一个Screen用作屏幕显示的结构体 Screen=new Lines[LINES] struct Lines{ int earmark;

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档