鉴于大家对VC与C++类别十分关注,我们编辑小组在此为大家搜集整理了“基于VC的多媒体教学控制系统(网络通讯平台的设计)”一文,供大家参考学习!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn | |||||||||||||||||
第四章 详细设计 在这个设计阶段,通过上面所写的总体设计内容,应该具体的实现该要求的系统,也就是经过这个阶段的设计工作,应该得出各个模块的精确描述,从而在编码阶段可以把这个描述翻译成用某种程序设计语言书写的程序。 4.1基础网络通讯模块的设计 根据前面分析,网络通讯模块的设计,本系统中对网络通讯模块中服务器和客户端的通讯功能进行封装成类。 4.1.1服务器端模型函数介绍 Microsoft为完成端口模型提供了相应的API函数,主要的就两个,我们逐一的来看一下。
1.完成端口创建及关联函数 HANDLE CreateIoCompletionPort ( HANDLE FileHandle, // handle to file HANDLE ExistingCompletionPort, // handle to I/O completion port ULONG_PTR CompletionKey, // completion key DWORD NumberOfConcurrentThreads // number of threads to execute concurrently ); 这个函数要注意其实际用于两个截然不同的目的: (1)用于创建一个完成端口对象。 (2)将一个句柄[HANDLE]和完成端口关联到一起。
2.获取完成端口操作结果函数 在创建了完成端口、将一个或多个套接字与之相关联之后,我们就要创建若干个线程来处理完成通知。这些线程不断循环调用GetQueuedCompletionStatus ()函数并返回完成通知。 BOOL GetQueuedCompletionStatus( HANDLE CompletionPort, // handle to completion port LPDWORD lpNumberOfBytes, // bytes transferred PULONG_PTR lpCompletionKey, // file completion key LPOVERLAPPED *lpOverlapped, // buffer DWORD dwMilliseconds // optional timeout value ); 4.1.2服务器端调用流程图
4.1.3 服务器的初始化 在服务器启动时,首先必须有的一个函数就是初始化函数,它要创建一个完成端口和一个套接字,并将两者关联起来,并使之处于监听状态,以响应客户端的连接请求。 在创建完成端口的同时,会创建几个新的线程,来响应客户端的连接。在线程中为一个新建立的套接字动态分配一个“单IO数据”和“单句柄数据”的数据结构。为考虑节约内存,我们在程序开始执行前,建一个单链表,在客户端连接时,先查看这个链表是否为空,如果不为空,则从链表中解出一个结点,否则再动态分配内存。在关闭套接字时,不释放数据结构,把它插入到链表中,以便下次使用,这样就可以提高使用效率。下面给出完成端口初始化的流程图:
4.1.4 服务器端收发数据 在服务器端初始化之后,我们还需要有一个能够指示IO操作和处理数据的函数,在这个类中,我们使用了两个函数来实现数据的收发功能。首先,在线程中有客户端连接并传送数据时,服务器将接收到的数据保存在单IO操作数据结构中,可调用函数对接收到的数据进行处理,并指示下一步的IO操作,而IO操作具体的实现则在另一个函数中给出,这样就极大地方便了用户接收处理数据。下面简单给出其流程图:
、4.1.5 服务器主线程 在服务器初始化完成后,便进入子线程等待客户端的连接,当部分客户端连接服务器后,一直没有收发数据的行为,而一直占用服务器的资料,这样会给服务器造成极大的消耗,影响其他客户端的连接,严重时甚至可能出现停止服务或者部分客户端信息的丢失。为预防此类现象发生,在主线程中,我们对每一连接进来的客户端进行检测,如果在规定时间内没有数据收发,则强行关闭此客户端,以方便其他客户端的连接;如果某一时间有大量客户请求连接,主线程则激发事件发出更多的连接等待。主线程的流程如下图所示: | |||||||||||||||||
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT | |||||||||||||||||
本文选自计算机毕业设计http://myeducs.cn |