虚拟实验平台的网络化改进方向教师管理模块的设计与实现毕业设计论文

上传人:1888****888 文档编号:36366121 上传时间:2021-10-30 格式:DOC 页数:38 大小:450KB
返回 下载 相关 举报
虚拟实验平台的网络化改进方向教师管理模块的设计与实现毕业设计论文_第1页
第1页 / 共38页
虚拟实验平台的网络化改进方向教师管理模块的设计与实现毕业设计论文_第2页
第2页 / 共38页
虚拟实验平台的网络化改进方向教师管理模块的设计与实现毕业设计论文_第3页
第3页 / 共38页
点击查看更多>>
资源描述
毕业设计(论文)虚拟实验平台的网络化改进方向-教师管理模块的设计与实现论文作者姓名:申请学位专业:申请学位类别:指导教师姓名(职称):论文提交日期:虚拟实验平台的网络化改进方向-教师管理模块的设计与实现摘 要为了实现课程实验教学的网络化工程,网络虚拟实验平台已成为我们的迫切需求。这次毕业设计的目的主要是为了检查使学生综合运用以前所学知识的能力,开发一个多功能的网络虚拟实验台软件。教师管理模块主要实现C/S模式系统的服务器管理功能,包括响应客户端的连接请求、用户注册、登陆、登陆通知、显示在线用户列表、用户退出通知、对系统数据库文件管理、服务器根据路由算法分配最佳节点给客户端进行P2P通信、客户端能随时存取数据等。这次课题分为2个模块:服务器模块和客户端模块。其中客户端模块又包括了网络模块、数据分析模块。服务器模块分为网络模块、数据库接口模块、数据分析模块。网络模块负责提供最基本的数据传输功能,数据库接口模块负责提供对数据的查询、添加、删除功能,数据分析模块解析接收到的数据,并生成需要回复的信息。服务器的数据分析模块还要根据客户端应用层的指令,生成与指令相应的发送信息。网络虚拟实验平台可以更好的帮助学生掌握实验技巧。关键词:虚拟实验平台;C/S模式;最佳节点;P2P通信;路由算法The Direction of Improving the Virtual Experimental Platform Network -The Design and Implement of Teacher Administration ModuleAbstractIn order to realize network engineering for experiment teaching later, the virtual experiment platform has become our urgent demand. The purpose of the thesis is mainly to develop a multifunctional virtual experiment software for inspecting the students ability of comprehensive utilization of the knowledge. The teacher administration module mainly realizes the C/S pattern system server management function, including the response customer end connection request, the user registration ,lands, lands the notice, demonstrated the on-line user tabulates, the user withdrawal notice, to the system database file management, the server carries on the P2P correspondence, the customer end according to the route algorithm assignment best pitch point for the customer end can deposit and withdraw the data as necessary and so on . The thesis is divided into 2 modules: Server module and customer module. Customer module includes the network module and the data analysis module. The server module is divided into the network module, the database interface module, and the data analysis module. The network module provides the basic data transmission function. The database interface module provides the functions to inquire, add, and delete data. While, the data analysis module analysis the received data, and produce the reply information. The server data analysis module also needs to produce the relative sending information with the instruction, according to the customer application instructions. The network virtual experiment platform can help student grasp the experiment skill in a better way.Key words: Virtual experiment platform; C/S mode; best pitch point; P2P technology; route algorithm目 录论文总页数:26页1 引 言12 概 述12.1 项目背景12.2 项目介绍12.2.1 虚拟实验平台的网络化12.2.2 项目设计思路22.2.3 项目功能简图32.3 项目要求32.3.1 工作任务及要求32.3.2 B/S与 C/S42.4 项目难点及解决方法42.4.1 IP处理问题42.4.2 Client之间的通信问题42.4.3 服务器分配邻居节点的问题43 项目模块的划分53.1 服务器端/客户端数据传输过程简图53.2 网络通信模块53.3 数据接口模块73.3.1 数据库的建立73.3.2 数据库连接控件ADO介绍103.3.3 对数据库操作实现123.4 数据分析模块133.4.1 提供基本网络事件处理功能类CCommandProcessor133.4.2 提供其它应用层功能类 CCrealCmdProcessor153.4.3 服务器如何分配最佳节点163.4.4 Floyed算法实现174 测试程序效果演示204.1 程序效果演示说明204.2 注册204.3 登陆214.4 显示在线用户214.5 退出及退出通知214.6 服务器记录用户状态224.7 服务器退出通知所有在线用户23结 论23参考文献23致 谢25声 明261 引 言近年来,随着信息技术的发展,计算机的普及,网络无疑为我们带了更多的便利,所以一个好的系统必须要有网络功能的支撑。并且由于系统中需要大量的数据交换,服务器的负担很重,所以我们通过P2P方式减轻服务器负担,然而NAT限制了P2P的实现,所以我们采用了UDP实现P2P网络穿越NAT的技术。作为虚拟实验台的网络化改进方向教师管理模块, 主要分为服务端和客户端两个模块。一、服务器端分为:网络模块、数据库接口模块、数据分析模块(1)网络模块(DLL);网络模块开发分两步提供最基本的数据传输功能。提供可靠的数据传输功能。(2)数据库接口模块(DLL)提供对数据的查询、添加、删除功能。(3)数据分析模块(类)解析接收到的数据,并生成需要回复的信息。二、客户端分为:网络模块、数据分析模块(1)网络模块(DLL)和服务端完全一样(2)数据分析模块(类)解析接收到的数据,并生成需要回复的信息。根据客户端应用层的指令,生成与指令相应的发送信息。2 概 述2.1 项目背景近年来既算机、网络等信息技术在教育领域的广泛应用,虚拟实验正日益成为广大教师的计算机辅助教学手段。虚拟实验平台正是应这个大需求而诞生。并且随着信息技术的发展,网络无疑为我们带了更多的便利,因此一个好的系统必须要具有网络功能,要完成这些功能,我们就需要采用C/S模式的网络结构。2.2 项目介绍2.2.1 虚拟实验平台的网络化计算机技术、大规模集成电路技术和通讯技术的飞速发展,为虚拟实验的发展奠定了坚实的基础。虚拟实验就是在通用计算机上加载相应的软件或硬件,使得使用者在操作这台计算机时,就像是在操作一台专用的传统试验设备一样。在虚拟实验系统中,软件是整个系统的关键,任何使用者都可以通过软件的相关设置来达到要实现实验的效果。虚拟实验就是利用外部输入(如鼠标的点击、拖动和键盘的敲击等),将计算机上虚拟的各种仪器,按实验要求、过程,组装成一个完整的实验环境,同时在这个环境中完成实验操作,包括实验器材的添加、实验条件的改变、数据采集以及实验结果的模拟、分析。它包含了虚拟仿真技术、计算机技术、实验技术、网络技术与专业等多方面理论知识。实现虚拟实验平台具有网络基本功能,实现虚拟实验平台具有网络基本功能,客户机和主机,客户机和客户机之间的即时通讯、文件的传输。由于采用了最新的P2P穿透NAT的技术,因此可以实现冲破局域网的限制,实现真正的异地连接,同学可以在家里利用一台普通的能够上网的PC,就能把老师布置的实验作业完成,并且,老师可以通过服务器端,了解进度情况,可以适时的指导其实验,从而达到了更好的教学效果。2.2.2 项目设计思路我们开发的“微机接口虚拟实验平台”采用“虚、实”结合的设计思路,强调实用性、效益性,最大限度地仿真真实的实验环境。该系统主要实现了“硬件实验台”的虚拟化,将硬件实验台“搬”到了微机的显示屏幕上,构建了“虚拟实验台”,而原有在微机上的实验操作环境和方法仍然保持不变,这也是本系统的主要特点之一,从而实现了系统的开放性,保证了最大的“真实性”。“虚拟实验台”包含虚拟接口电路和虚拟实验操作台。“虚拟接口电路”是实验程序和虚拟实验操作台的连接通道,包含了实验中常用的I/O接口芯片,有8253、8255、A/D、D/A等,具有与实际芯片相同的功能,并与实际的微机实现了“连接”,能够被实际的实验程序所访问,同时又能与虚拟实验操作台相联系。“虚拟实验操作台”主要包括常用的外围单元电路,如指示灯、数码管、键盘、开关传感器等,它是一个交互性较强的可视化界面,不仅可以指示或反映出实验的结果,同时学生可以通过鼠标来进行模拟的连线、操作和使用虚拟的测试仪器进行检测等。虚拟实验操作台的设计主要通过多媒体技术和语言编程来实现,一方面要注重界面的逼真,另一方面还要注重模拟实验操作的灵活性和开放性2.2.3 项目功能简图虚拟实验平台的网络化改进方向DLL动态升级模块实验电路图管理模块远程协助模块教师管理模块学生信息管理系统数据库的管理在线用户列表服务器分配最佳节点P2P通信模块图1 项目功能简图2.3 项目要求2.3.1 工作任务及要求(1) 本毕业设计的主要任务:综合运用以前所学的专业知识,设计开发一个多功能虚拟实验平台软件教师管理模块。实现虚拟实验平台具有网络基本功能,打破各种局域网不能互访的问题,客户机和主机,客户机和客户机之间的即时通讯、数据的传输。本模块设计要求实现部分功能响应客户端的连接请求、分配最佳相邻节点给客户端进行P2P通信、客户端能随时存取数据等;能实现教师对学生列表的添加与管理,添加时能进行身份验证;能实现相关个人的设置(比如名称及口令的更改等)。(2) 本毕业设计的相关要求: 本系统的开发要求采用C/S结构,选用所熟悉的开发工具及开发环境Visual C+ 6.0进行本系统的设计与开发。 本毕业设计要求提供能实现文件传输等功能的软件,要求软件具有操作简便、界面友好等特性;同时,还要求与另四位同学所设计与实现的“教师远程协助”“远程指导演示”“动态升级”“VLP2P通信逻辑”集成在一起,形成一个真正实用的、功能完善的虚拟实验台软件。 提交本次毕业设计的毕业论文。在毕业论文中应详细说明所设计与实现的系统的设计流程;写作中应严格按照“成都信息工程学院本科毕业论文(设计)内容及格式的规范化要求”进行写作。2.3.2 B/S与 C/S 目前的软件系统体系结构一般分为两种形式,一种为大家所熟识的C/S 结构,另一种为B/S结构。C/S结构,即Client/Server(客户端/服务器)结构,通过将任务合理分配到Client 端和Server 端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。B/S结构,即Browse /Server(浏览器/服务器)结构,就是只安装维护一个服务器,而客户端采用浏览器运行软件,进行浏览、访问、操作数据。最初的管理信息系统基本上是采用C/S 模式开发的。传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。而且代价高,效率低。但随着WWW的广泛应用,目前的管理信息系统已经逐渐开始从C/S模式向浏览器/服务器B/S模式转变。B/S 结构的软件所有的维护、升级工作都只在服务器上进行,而客户端能立刻获得最新版本的软件。2.4 项目难点及解决方法2.4.1 IP处理问题由于涉及到各种局域网,因此需要处理各种私有IP的访问问题。解决方法:采用NAT技术实现私有地址转换成公共有效的地址。2.4.2 Client之间的通信问题解决方法:利用服务器的打洞原理,假设有Server、Client A、Client B,如果Client A想向Client B发送信息,那么Client A发送命令给Server S,请求Server命令Client B向Client A方向打洞。然后Client A就可以通过Client B的外网地址与Client B通信了。2.4.3 服务器分配邻居节点的问题解决方法: 服务器在接受到Client A的请求信息后,根据最佳路由算法的思想找到Client A要求连接的相邻节点。把它们记录到服务器数据库中。Client A根据接受到服务器给它返回的相邻节点信息,与相近的客户端进行下载、远程协助、动态升级等一些功能。当服务端再接受到来自不同客户端请求信息时,先在数据库路由信息表里面查找是否有类似的请求记录。如果有,服务器将根据路由表以往的记录返还给客户端。如果没有,服务器端会根据最佳路由算法的思想找到需要的节点信息,保存到数据库并且返还给请求的客户端。这种机制可以保证系统网络通信具体有高效率性、可靠性。3 项目模块的划分3.1 服务器端/客户端数据传输过程简图图2 服务器端/客户端数据传输过程简图3.2 网络通信模块网络通信模块主要是基于另外一个同学做的P2P网络通信模块,调用其底层函数实现网络功能。由于前期调试需要,使用了一个类似网络通信模块NetInterface。此模块采用UDP协议。NetInterface接口DLL说明:(1) 通过EVENT_BEGIN_READ对应的事件来确定有数据到来。(2) 读取数据线程被该事件激活,激活后马上将这个事件复位;读取完数据,再次查看事件,如有数据。(3) 读取数据线程将读到的数据放到缓冲区中之后,激活数据分析线程,并立即读取下一个数据(4) 数据分析线程将不合法的数据扔掉。遇到合法的数据,即通过消息通知应用层。(5) 给应用层的接口: 设置函数体:void SetNetInterfaceInfo(HWND hWnd,CString ip,UINT port,UINT message)作 用:设置通迅模块参 数:hWnd:主程序窗口port:使用的端口,对于服务器端,为要使用的端口号,对于客户端,为0 统会自动分配一个端口给客户端)message:当通迅模块接收到数据时,向主程序发送此消息返回值:此函数无返回值。 打开服务函数体:BOOL StartServer()作 用:打开通迅模块的通迅功能参 数:此函数无参数返回值:打开成功,返回TRUE,否则FALSE 关闭服务函数体:BOOL StopServer()作 用:关闭通迅模块的通迅功能参 数:此函数无参数返回值:关闭成功,返回TRUE,否则FALSE 读取数据函数体:int ReadData(int &nOrderGroup, int &nOrder, char szData, int &len, CString &ip, UINT &port)作 用:通迅模块接收到的数据会放在接收缓冲区中,该函数首先检查接收缓冲是否为空,如空,则返回0;否则,每次读取缓冲区中的一个节点,读取完就将此节点移到缓冲区的尾部。参 数:nOrderGroup:命令分组号nOrder:命令号szData:接收数据缓冲区len:输入时为szData的长度,输出时为接收到数据的长度ip:发送方的IP地址port:发送方的端口号返回值:读取到数据,返回TRUE,没有读取到数据(缓冲区已经为空),返回为FALSE 发送数据函数体:void SendData(int nOrderGroup,int nOrder,char szData, int len, CString ip, UINT port)作 用:将发送数据放到发送缓冲区中。然后判断DLL中发送过线程是否启动,如未启动,就启动它,否则直接返回。参 数:nOrderGroup:命令分组号nOrder:命令号szData:发送的数据nLen:发送数据的长度ip:接收方的IP地址port:接收方的端口号返回值:无3.3 数据接口模块3.3.1 数据库的建立数据库可分为7个表,它们分别是experiment(实验信息表)、rout(路由节点表)、score(学生实验成绩表)、students(学生信息表)、teacher(教师信息表)、user(用户表)、onlinuser(在线用户表)。下面介绍一下各个表的具体内容:(1)experiment(实验信息表)包括exp_id(实验号)、exp_name(实验名)、 describe(实验描述)、FileNmae(实验电路图文件名)。表1 实验信息表experiment序号字段中文名称字段英文名称数据类型PKNULL备注1.实验号exp_idint(4)YesNO实验编号2.实验名exp_namevarchar(40)NO实验名称3.实验描述describevarchar(40)NO实验信息的相关描述4.实验电路图文件名FileNmaevarchar(20)NO实验电路图文本文件(2)rout(路由节点表)包括user_id(用户号)、rout_id(路由号)、rout_ip(路由IP)、rout_itime(路由延时)。表2 路由节点表 rout序号字段中文名称字段英文名称数据类型PKNULL备注1用户号user_idint(4)YesNO用户编号2路由号rout_idint(4)NO路由编号3路由IProut_ipvatchar(20)NO用一个字符串来存放IPV4地址4路由延时rout_timeint(4)NO经过次路由时需要的时间(3)score(学生实验成绩表)包括exp_id(实验号) 、stu_id(学生号)、teache(教师号)、score(学生成绩)。表3 学生实验成绩表score序号字段中文名称字段英文名称数据类型PKNULL备注1实验号exp_idint(4)YesNO实验编号2学生号stu_idint(4)NO学生编号3教师号teacher_idint(4)NO教师编号4学生成绩scoreint(4)NO(4)students(学生信息表)包括stu_id(学生号)、stu_name(学生姓名)、sex(性别)、department(系别)、class(班级)。表4 学生信息表student序号字段中文名称字段英文名称数据类型PKNULL备注1学生号stu_idint(4)YesNO学生编号2学生姓名stu_namevarchar(50)NO学生真实姓名3性别sexvarchar(50)NO4系别departmentvarchar(50)NO包括学生专业5班级classvarchar(50)NO(5)teacher(教师信息表)包括 teacher_id(教师号)、exp_id(实验号)、 teacher_name(教师姓名)。表5 教师信息表 teacher序号字段中文名称字段英文名称数据类型PKNULL备注1教师号teacher_idint(4)NO教师的唯一标识2实验号exp_idint(4)YESNO实验编号3教师姓名姓名teacher_namevarchar(50)NO教师真实姓名(6)user(用户表)包括username(用户名)、pwd(密码)、user_type(用户类型)、user_id(用户号)表6 用户信息表user序号字段中文名称字段英文名称数据类型PKNULL备注1用户名USERNAMEVARCHAR(50)NO用户名为学生学号或教师名字拼音2 密码PWDVARCHAR(50)3用户类型user_typeCtinyint(1)NO学生/教师4用户号user_idint(4)YesNO用户编号(7)onlinuser(在线用户表)包括user_id(用户号)、username(用户名) 、user_type(用户类型) 表7 在线用户表onlinuser序号字段中文名称字段英文名称数据类型PKNULL备注1用户名USERNAMEVARCHAR(50)NO用户名为学生学号或教师名字拼音2用户号user_idint(4)YesNO用户编号3用户类型user_typeCtinyint(1)NO学生/教师3.3.2 数据库连接控件ADO介绍ADO是ActiveX数据对象(ActiveX Data Object),这是Microsoft开发数据库应用程序的面向对象的新接口。ADO访问数据库是通过访问OLE DB数据提供程序来进行的,提供了一种对OLE DB数据提供程序的简单高层访问接口。ADO技术简化了OLE DB的操作,OLE DB的程序中使用了大量的COM接口,而ADO封装了这些接口。所以,ADO是一种高层的访问技术。ADO技术基于通用对象模型(COM),它提供了多种语言的访问技术,同时,由于ADO提供了访问自动化接口,所以,ADO可以用描述的脚本语言来访问VBScript,VCScript等。在VC中可以使用VC6提供的ActiveX控件开发应用程序,还可以用ADO对象开发应用程序。使用ADO对象开发应用程序可以使程序开发者更容易地控制对数据库的访问,从而产生符合用户需求的数据库访问程序。使用ADO对象开发应用程序也类似其它技术,需产生与数据源的连接,创建记录等步骤,但与其它访问技术不同的是,ADO技术对对象之间的层次和顺序关系要求不是太严格。在程序开发过程中,不必选建立连接,然后才能产生记录对象等。可以在使用记录的地方直接使用记录对象,在创建记录对象的同时,程序自动建立了与数据源的连接。这种模型有力的简化了程序设计,增强了程序的灵活性。以下利用ADO控件类ADOConn的主要函数实现:void ADOConn:OnInitADOConn(CString m_ip) / 初始化连接数据库/ 初始化OLE/COM库环境 CoInitialize(NULL);try/ 创建Connection对象m_pConnection.CreateInstance(ADODB.Connection);/ 设置连接字符串,必须是BSTR型或者_bstr_t类型 _bstr_t strConnect=Provider=SQLOLEDB;Server=+m_ip+ ;Database=SY;uid=sa;pwd=985723; m_pConnection-Open(strConnect,adModeUnknown);/ 捕捉异常catch(_com_error e)/ 显示错误信息AfxMessageBox(e.Description();/ 执行查询_RecordsetPtr& ADOConn:GetRecordSet(_bstr_t bstrSQL) try/ 连接数据库,如果Connection对象为空,则重新连接数据库if(m_pConnection=NULL)OnInitADOConn();/ 创建记录集对象m_pRecordset.CreateInstance(_uuidof(Recordset);/ 取得表中的记录m_pRecordset-Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);/ 捕捉异常catch(_com_error e) / 显示错误信息AfxMessageBox(e.Description();/ 返回记录集return m_pRecordset;/ 执行SQL语句,Insert Update _variant_tBOOL ADOConn:ExecuteSQL(_bstr_t bstrSQL) try/ 是否已经连接数据库if(m_pConnection = NULL)OnInitADOConn();/ Connection对象的Execute方法:(_bstr_t CommandText, / VARIANT * RecordsAffected, long Options ) / 其中CommandText是命令字串,通常是SQL命令。/ 参数RecordsAffected是操作完成后所影响的行数, / 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名/ adCmdProc-存储过程;adCmdUnknown-未知m_pConnection-Execute(bstrSQL,NULL,adCmdText);return true;catch(_com_error e) AfxMessageBox(e.Description();return false;void ADOConn:ExitConnect()/ 关闭记录集和连接if (m_pRecordset != NULL)m_pRecordset-Close();m_pConnection-Close();/ 释放环境:CoUninitialize();3.3.3 对数据库操作实现与数据库连接主要是通过CDatabaseInterface类调用ADO控件类的函数来实现其中主要的操作函数包括以下: 注册处理:Register(CString password, ULONG &id, CString &name) 登陆处理:Login(CString password, ULONG id, CString &name) 得到用户ID:GetUserByID(ULONG id,LPUSER &pUser,POSITION &position) 验证用户密码:bool CDatabaseInterface:ChkUser(int id, CString pwd)3.4 数据分析模块3.4.1 提供基本网络事件处理功能类CCommandProcessor class CCommandProcessor public:CCommandProcessor();virtual CCommandProcessor();public:ULONG m_my_id;CString m_my_name;DATA ReadData;DATA SendData;CString m_strLogMessage;/服务器IP和PORTCString SERVER_IP;CListBox *m_pList;public:BOOL Compose_Send_Cmd_Quit();Void Compose_Send_Cmd_Login(ULONG id,CString password);Void Compose_Send_Cmd_Register(CString password);void DataAnalysis();protected:void Net_Event_Server_Quit();void Net_Event_Error();int GetUserFromUserListByID(ULONG id);void Net_Event_Login_User();void Net_Event_Login_Notify();void Net_Event_Quit_Notify();void Net_Event_Login();void Net_Event_Register();void OnNetEvent();protected:void ExtractLongToChar(char szData4,ULONG lData);void PutCharToLong(char szData4,ULONG&lData);protected:virtual void OnChatEvent()=0;基类提供基本的网络事件处理功能:(1) 注册(2) 登陆登陆包括: 登陆 登陆通知 登陆返回信息(3) 通出通出包括: 退出 退出通知这些功能的基本格式如下:enum tagCmdGroupCMD_GROUP_NET_EVENT,/基本网络命令组 CMD_GROUP_TRANS_EVENT /实验信息传输命令组;/命令号定义及命令格式enum tagCMD_NET_EVENT/PASSWORDN/HEAD+N+PASSWORDCMD_NET_EVENT_REGISTER, /注册/ID4+PASSWORDNCMD_NET_EVENT_LOGIN, /登陆/ID4+PASSWORDNCMD_NET_EVENT_LOGIN_NOTIFY,/登陆通知/ID4+PASSWORDNCMD_NET_EVENT_LOGIN_USER,/登陆返回其它相关用户信息/ID4CMD_NET_EVENT_QUIT,/退出/ID4CMD_NET_EVENT_QUIT_NOTIFY,/退出通知(通知其它相关用户这个退出信息)/ID4CMD_NET_EVENT_TIMEOUT,/发生错误:错误内容nCMD_NET_EVENT_ERROR,/发生网络基本事件错误时,返回错误信息内容/无数据内容CMD_NET_EVENT_SERVER_QUIT/服务器关掉了,通知所有在线用户;enum tagCMD_TRANS_EVENT /发送方ID4+接收方ID4+信息内容CMD_TRANS_EVENT_TRANS/实验信息传输命令;3.4.2 提供其它应用层功能类 CCrealCmdProcessor 子类提供其它应用层功能,例如实验文件传输等。每一项功能,都需要在基类中加入一个相应的虚函数,这个虚函数由子类重载,填入代码。class CRealCmdProcessor : public CCommandProcessor public:CRealCmdProcessor();virtual CRealCmdProcessor();public:BOOL Compose_Send_Cmd_Trans(CString content);private:void TransEvent_Trans(); /虚函数申明virtual void OnTranstEvent(); ;3.4.3 服务器如何分配最佳节点假设系统的网络拓扑结构入下图:服务器路由器1路由器2路由器3客户A客户B客户C路由器43426532263图3 模拟网络拓扑图假设有3个客户端A、B、C分别处在3个不同的局域网中,网络拓扑结构如图3所示。其中线上的数字表示通信时延。为简化模型,这里我们不考虑通信时延的方向性。假设客户端A向服务器发出下载一个实验电路图及相应的器件DLL的请求信息,这类请求很耗服务器资源。如果客户端B和C也有A需要的实验电路图及相应的器件DLL的话,为了减轻服务器的负担,此时可以不由服务器直接向A提供相关信息,而由其他客户端(例如B或C)通过P2P通信的方式来满足A的需求。对A来说,与A通信效率最高的其他客户端是最佳选择。如图3所示的网络拓扑结构,我们可以直观看出,客户端B和C都可与A通信,但B与A通信的延时更小。如何实现让B来与A通信呢?首先是如何选出B? 要选出B,先要知道整个网络的拓扑结构。作为客户端, A自身不便于得到整个网络的拓扑结构,但服务器可以得到网络结构。所以,可以由服务器来执行挑选。服务器用什么算法来实现挑选?我们可以把网络拓扑结构图看成一个带权值的无向图(简化模型是无向图),问题就变成在无向图中找出两个顶点之间的最短权值路径。结合我们的应用,最后选择了Floyed算法。在3.4.4节中有介绍此算法的原理以及实现。服务器获取网络拓扑的思路是:先让客户端通过Tracert命令联接服务器,得到该客户端到达服务器所要经过的各路由器节点以及每到一站需要的时间等一些信息。然后客户端将其路由信息传给服务器,服务器将各客户端的这些路由信息保存到数据库中,从而可以得到各客户端与服务器之间的大体网络拓扑结构。这将作为Floyed算法的必要的输入信息3.4.4 Floyed算法实现路由算法的数学模型是图论模型.路由过程的选择,即是在加权无向图(或有向图)中寻找源结点与目标结点的最佳路径,根据最佳路径选择下一站路由器。要用到Floyed算法必须要从图的邻接矩阵表示法说起:在图的邻接矩阵表示法中: 用邻接矩阵表示顶点间的相邻关系; 用一个顺序表来存储顶点信息;图的邻接矩阵(Adacency Matrix):设G=(V,E)是具有n个顶点的图,则G的邻接矩阵是具有如下性质的n阶方阵:Ai,j=1(当V(i,j)或V是E(G)中的边)Ai,j=0 (当V(i,j)或V不是E(G)中的边)按照上面的虚拟网络拓扑图(图3)转换成下面的无向图:V1V2V3V4V5V6V7V83432526263图4 模拟邻接矩阵图根据图4,服务器会根据图的邻接矩阵表示法得到下面的矩阵:0 3 2 4 0 0 0 03 0 5 0 2 0 0 02 5 0 6 3 0 0 0A= 4 0 6 0 0 0 0 6 0 2 3 0 0 3 2 00 0 0 0 3 0 0 00 0 0 0 2 0 0 00 0 0 6 0 0 0 0其中服务器将整个网络结构将服务器、路由器1,2,3、客户端A,B,C分别编号为:V1,V2,V3,V4,V5,V6,V7,V8。邻接矩阵可定义为:Ai,j=w(i,j) (边上的权值是延时单位是毫秒)Ai,j=0 (两点之间不能直接通信) Floyed算法从图的邻接矩阵开始,按照图结点0,1,2,n-1的顺序,分别以每个结点k(0=k=n-1)作为新考虑的中间点,在第k-1次运算得到的A (k-1) ( A (-1)为图的邻接矩阵GA)的基础上,求出每对结点ij的目前最短路径长度A (k)ij。计算公式为:A(k)ij=min(A(k-1)ij,A(k-1)ik + A(k-1)kj),(0= i=n-1,0= j =n-1)。当i结点是源结点,j结点是目标结点,而且i结点与k结点是相邻的时候,k结点就是目前最短路径中i结点的下一站路由器。当k从0取到n-1的时候,矩阵A(n-1) 就是最后得到的结果-最短路径的矩阵,而同时按照上述方法跟踪就可以得到最优路由表。 原理如上所述,Floyed路由算法设计如下:routNum是路由器数目,netArray routNum routNum 是存储网络拓扑信息的矩阵,valArray routNum routNum 是网络耗散信息的矩阵。.from是源路由器,routTable routNum 2 是待返回的路由表。matrix routNum routNum 是存储源路由器到其它路由器的最短距离的矩阵。int bVal = TRUE;int i , j ,k;for (i=0 ;i routNum-1 ;i+)for (j=0 ; j routNum-1 ; j +) matrixij = valArrayij; for (i=0 ; i routNum-1;i +) /路由表初始化routTable i0=-1;routTable i1=-1;while(TRUE)for (k=0 ; kroutNum-1;k+)for (i=0 ; iroutNum-1;i+)for (j=0 ; j=(matrixik + matrixkj) /计算目前最短路径长度A(k)ijmatrixij = matrixik + matrixkj;if(i=from & netArrayik=1) /计算目前最短长度下路由表if( i!=k | k=j )routTable j0 = j;routTable j1 = k; / end of If / end of Forfor (i=0 ; iroutNum-1 ;i+) bVal=bVal & ( routTable i0!=-1) & (routTablei1!=-1); if( bVal )break;else bVal =TRUE; / end of WhileFloyed根据图4的矩阵得到V6到达V7比V6到达V8路径小。而且这条最短的路径是V6通过V5达到V7。而我们又知道矩阵上面的权值就是经过这条路线所需要的时间,在程序中我们定义一个二维数组Ai,j来存储上面的矩阵信息。从V6到达V7的时间就是A6,7=A6,5+A5,4=5也就是说通过这时服务器就利用Floyed算法找到了A到B最短路径是A经过路由器4到达B延时5毫秒。服务器将这些条路由顺序和B的公网地址传给A,A根据服务器给的这些信息来和B进行P2P通信。使通信率提高了,达到了预期的目的。 应用效果:经测试,能得到最优节点。但算法比较耗时。4 测试程序效果演示4.1 程序效果演示说明由于本程序只是整个虚拟实验平台的一部分,本测试只是针对单独的教师管理模块的测试,而非整个系统效果的测试,最终结果是实现服务器端的一些管理功能,供实验平台程序所用。服务器路由算法分配最佳邻居节点功能需要特定的网络环境故在本机上无法显示效果。特此说明4.2 注册图5 输入 ID IP密码注册4.3 登陆图6 登陆成功后的登陆通知4.4 显示在线用户连续注册2个用户并登陆,客户端的在线列表框就会出现新登陆的在线2个用户图7 显示在线用户状态4.5 退出及退出通知当用户2退出时,服务器会通知其他在线的用户用户2已经退出。图8 通知离线用户4.6 服务器记录用户状态图9 服务器记录下的日志4.7 服务器退出通知所有在线用户图10 服务器退出后通知所有在线用户结 论本文实现了虚拟实验平台的网络化改进方向教师管理模块的服务器的各种管理功能。包括响应客户端的连接请求、用户注册、登陆、登陆通知、显示在线用户列表、用户退出通知、对系统数据库文件管理、服务器根据路由算法分配最佳节点给客户端进行P2P通信、客户端能随时存取数据等重要的功能。本模块服务端引用了Floyed路由算法思想为用户提供更有效的通信节点,可以使P2P通信更有效率。但是由于调试环境受限本模块自身还存在不成熟、安全性差等缺陷。在大规模系统应用中会有很大的局限性。这些都成为我继续关注的研究领域参考文献1 严华峰.Visual C+课程设计案例精编M.北京:中国水利水电出版社,2004年7月。2 章五一.Visual C+项目开发实例导航M.上海:上海科学普及出版社,2004年11月。3 门槛创作室.Visual C+6.0实例教程M.北京:电子工业出版社,1999年5月。4 张联峰,刘乃安.对等网(P2P)技术计算机工程与应用M.北京:电子工业出版社,2003年12月。5 沈炜,徐慧.Visual C+数据库编程技术与实例M.北京:人民邮电出版社2004年6月。6 吕智,马瑞力.Visual C+.NET精彩编程百例M.北京:中国水利水电出版社 2004年4月。7 胡放明,李俊兵,贺贵明等.对P2P网中发现机制的研究J.计算机应用,2004(8)。致 谢本文是在黄兴建老师的热情关心和指导下完成的,他渊博的知识和严谨的治学作风使我受益匪浅,对顺利完成本课题起到了极大的作用。在此向他表示我最衷心的感谢!在论文完成过程中,本人还得到了王中科老师的大力帮助,本人向他表示深深的谢意!最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢!作者简介:姓 名: 杨林 性别: 男出生年月: 1985/05/07 民族: 汉E-mail: yl2230237声 明本论文的工作是 2007年 2月至2007年 6月在成都信息工程学院网络工程系完成的。文中除了特别加以标注地方外,不包含他人已经发表或撰写过的研究成果,也不包含为获得成都信息工程学院或其他教学机构的学位或证书而使用过的材料。除非另有说明,本文的工作是原始性工作。关于学位论文使用权和研究成果知识产权的说明本人完全了解成都信息工程学院有关保管使用学位论文的规定,其中包括:(1)学校有权保管并向有关部门递交学位论文的原件与复印件。(2)学校可以采用影印、缩印或其他复制方式保存学位论文。(3)学校可以学术交流为目的复制、赠送和交换学位论文。(4)学校可允许学位论文被查阅或借阅。(5)学校可以公布学位论文的全部或部分内容(保密学位论文在解密后遵守此规定)。除
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸下载 > CAD图纸下载


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!