网站导航网学 原创论文 网站设计 最新系统 最新研究 原创论文 获取论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计下载 > VC与C++类别 > 正文

基于VC的多媒体教学控制系统(网络通讯平台的设计)

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/05/14

鉴于大家对VC与C++类别十分关注,我们编辑小组在此为大家搜集整理了“基于VC的多媒体教学控制系统(网络通讯平台的设计)”一文,供大家参考学习!

QQ交谈客服咨询,网学网竭诚为您服务,本站永久域名: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数据”和“单句柄数据”的数据结构。为考虑节约内存,我们在程序开始执行前,建一个单链表,在客户端连接时,先查看这个链表是否为空,如果不为空,则从链表中解出一个结点,否则再动态分配内存。在关闭套接字时,不释放数据结构,把它插入到链表中,以便下次使用,这样就可以提高使用效率。下面给出完成端口初始化的流程图:

创建一个新的完成端口
获取系统处理器数目
创建2*CPU数目+2个线程
创建监听套接字获取AcceptEx指针
创建子进程循环获取IO操作结果
 
绑定套接字并置于监听状态
将新连接套接字的内存空间插入链表
调用HandleData()指示下一步IO操作
调用DataActive()进行IO操作
a图:完成端口初始化
 
b图:完成端口工作线程
 

4-2   服务器初始化流程图
FIG 4-2 Server initialize flow chart
 

 
4.1.4 服务器端收发数据
在服务器端初始化之后,我们还需要有一个能够指示IO操作和处理数据的函数,在这个类中,我们使用了两个函数来实现数据的收发功能。首先,在线程中有客户端连接并传送数据时,服务器将接收到的数据保存在单IO操作数据结构中,可调用函数对接收到的数据进行处理,并指示下一步的IO操作,而IO操作具体的实现则在另一个函数中给出,这样就极大地方便了用户接收处理数据。下面简单给出其流程图:

客户端发送数据或等待接收数据
DataAction()接收发送数据
HandleData()处理接收或发送的数据并指示下一步的IO操作
IOREAD
IOWRITE

4-3 服务器收发数据流程图
FIG 4-3 Server Send/Receive Data flow chart
 

 
4.1.5 服务器主线程
在服务器初始化完成后,便进入子线程等待客户端的连接,当部分客户端连接服务器后,一直没有收发数据的行为,而一直占用服务器的资料,这样会给服务器造成极大的消耗,影响其他客户端的连接,严重时甚至可能出现停止服务或者部分客户端信息的丢失。为预防此类现象发生,在主线程中,我们对每一连接进来的客户端进行检测,如果在规定时间内没有数据收发,则强行关闭此客户端,以方便其他客户端的连接;如果某一时间有大量客户请求连接,主线程则激发事件发出更多的连接等待。主线程的流程如下图所示:
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT

本文选自计算机毕业设计http://myeducs.cn
论文文章部分只是部分简介,如需了解更多详情请咨询本站客服!QQ交谈QQ3710167

  • 下一篇资讯: vc人脸识别程序的开发
  • 原创论文

    设为首页 | 加入收藏 | 论文首页 |原创论文 |
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师