引言
如今社会,科学技术不断发展,电子和通信技术达到了一个新的高度。随之而来的是教育水平的不断进步,教育模式也与前几年有了很大的不同,以教师为中心转变为以学生为中心,更倾向于网络化和多媒体化的方向发展。
最新的教学模式认为,在整个教学过程中由教师起组织、指导和促进作用,学生是学习的主体,利用情境、协作、会话等学习环境要素充分发挥学生的积极性、主动性,最终完成对知识的意义建构。学生的学习不是被动的,而应是主动的,探索式的,协作式的学习。
多媒体网络教学,打破了地域和时空的局限,实现了双向交互、实时多点交流、广泛的传播、快捷的数据信息收集等多种功能,并以网络通信技术、多媒体技术为依托。因此,在多媒体网络教学中,学生们可以共享学习资源,共同探讨和交流问题,并且可以通过多种媒体(如声频,视频,图像,文字等)来使学生加强记忆和增进理解,以避免原先单调和机械的学习,提高学生的学习能动性,而且可以使学生跟计算机之间进行积极而频繁的信息交换,并能得到及时的反馈。可以说,网络多媒体的交互式教学改变了学生在教学过程中认识事物的过程,改变了传统的教学原则,改变了教学内容和教材形式。
全球化是网络的必然趋势,也是多媒体网络教学发展的必然趋势。在互联网已连通世界各地、Internet站点遍布全球的当今时代,无论是校园网、多媒体教室局域网,还是单台多媒体计算机,不与广域网连接、不利用Internet上无限丰富的信息资源,是不可思议的。基于Internet的新型教学,突破了局域网多媒体教学在资源、距离、规模上的限制,将多媒体网络教学推向全球,“开放大学”、“虚拟学校”、“全球教室”等一批新型的教育教学系统迅速发展。
1 本课题的研究特点、功能和实现环境
1.1 课题研究特点
本课题是为了转变传统的教学模式,对网络交互式教学进行支持而实现的。本课题所设计的软件是运行于Windows操作系统上,在局域网上使用多媒体技术进行交互式教学的计算机教学系统。它可以使用在电子教室、多媒体网络教室或者电脑教室中,集电脑教室的同步教学、控制、管理等功能于一体,并同时实现屏幕监视、教师演示、远程辅导、远程控制和文件传输等网络管理功能。
本课题的特点主要有:
(1)本课题系统对多媒体网络进行了实时通信和处理,基于TCP/IP网络模型,使用面向连接的TCP协议和无连接的UDP协议进行网络通信。对单机进行控制和要求数据可靠时,使用面向连接的TCP协议;对实时性要求较高,或者需要将数据同时传往多个接收者时,则使用无连接的UDP协议。
(2)根据面向连接TCP协议的流传输的特性,为无边界的数据流建立边界,实现数据成块传输;而对于无连接的UDP协议的特性,将超过最大传输单元MTU的数据进行分片传输,并且对其无序性、丢包和错包提供处理。
(3)为了保证实时性方面的要求,应尽量减少网络传输的数据量,尤其是屏幕图像数据。因此,必须把屏幕图像数据进行处理,划分网格并将其转换为高压缩比的JPEG格式,以最大限度的减少网络传输负载,满足实际的网络带宽的要求。
(4)使用系统API函数和MFC类库相结合,对系统进行控制,实现鼠标和键盘处理功能,实现文件处理功能,并且可以对进程、系统重启、系统注销和系统关闭进行操作。
1.2 系统功能
本系统的主要功能模块有:
(1)网络通信传输功能
网络通信传输功能是整个系统的基础,主要负责教师机同其他学生机的数据传输处理。
(2)学生机连接管理功能
对学生机的连接情况进行管理,显示当前在线的学生机及其信息,并且当学生机关闭和掉线时进行处理。
(3)图像处理功能
对教师机和学生机的屏幕进行处理,并且能在BMP位图格式和JPEG格式之间进行转换,是“教师演示” 、“监视学生”和“远程帮助”的基础,是系统的核心功能。
(4)鼠标、键盘处理功能
此功能和图像处理功能合在一起,就可以使教师机对学生机进行远程操作,就好像是教师直接在学生机上操作一样,可以对学生机进行远程辅导。
(5)文件处理功能
教师可以把共享的文件群发到所有学生机的临时目录中,可以传输各种类型和任意大小的文件。
(6)系统控制功能
使用系统API函数,对系统进行控制,可以进行进程管理、信息查询、开关机和注销机器等操作。
1.3 系统的实现环境
考虑到用户的使用要求和系统的通用性和实时性,本课题的实现环境为:
(1)用户(学生机和教师机):采用PC机,运行平台为Windows2000 或Windows XP操作系统
(2)网络:10/100BASE-T以太网
(3)开发环境:Visual C++6.0
2 系统理论设计
2.1 网络通信传输技术
2.1.1 传输控制协议TCP概述
TCP(Transmission Control Protocol)是TCP/IP协议族中的传输层协议,它实现了虚电路间的连接,是面向连接的协议。TCP通过序列确认以及包重发机制,提供可靠的数据流发送和到应用程序的虚拟连接服务,与IP协议相结合,TCP组成了因特网协议的核心。
TCP对话通过三次握手来建立连接。三次握手的目的是使数据段的发送和接收同步;告诉其它主机其一次可接收的数据量,并建立虚连接。三次握手的简单过程如下:
(1)初始化主机通过一个同步标志置位的数据段发出会话请求。
(2)接收主机通过发回具有以下项目的数据段表示回复:同步标志置位、即将发送的数据段的起始字节的顺序号、应答并带有将收到的下一个数据段的字节顺序号。
(3)请求主机再回送一个数据段,并带有确认顺序号和确认号。
TCP提供了面向连接的服务,其特性有:数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。
TCP使用数据流传输 ,可以交付一个由序列号定义的无结构的字节流。这个服务对应用程序有利,因为在送出到 TCP 之前应用程序不需要将数据划分成块, TCP 可以将字节整合成字段,然后传给IP进行发送。
TCP通过面向连接的、端到端的可靠数据报发送来保证可靠性。 TCP 在数据包上加上一个递进的确认序列号来告诉接收者发送者期望收到的下一个数据包。如果在规定时间内,没有收到关于这个包的确认响应,重新发送此包。 TCP 的可靠机制允许设备处理丢失、延时、重复及读错的包。超时机制允许设备监测是否丢失数据包,丢失则会请求重发。
TCP提供了有效流控制。当向发送者返回确认响应时,接收TCP进程就会说明它能接收并保证缓存不会发生溢出的最高序列号。
TCP还具有全双工操作,即TCP进程能够同时发送和接收数据包。
TCP中的多路技术,大量同时发生的上层会话可以在单个连接上进行多路复用。
面向连接的服务(例如Telnet,FTP,rlogin,X Windows和SMTP)需要高度的可靠性,所以通常都使用TCP。在本课题中,“群发文件”功能需要很高的可靠性,因为在传输过程中只要有一个数据帧错误或者是丢失,则整个文件就会被破坏,因此,“群发文件”功能应该使用TCP来进行传输。此外,在教师机对一个学生机进行操作时,也使用TCP来传输数据,以尽可能的保证数据的正确传输。
2.1.2 用户数据报协议UDP概述
UDP(User Datagram Protocol)是 ISO 参考模型中一种无连接的传输层协议,提供面向事务的不可靠信息传送的服务。UDP协议基本上是IP协议与上层协议的接口。
与TCP不同,UDP并不提供对IP协议的可靠机制、流控制以及错误恢复功能,也不需要事先建立连接。由于UDP比较简单,UDP头包含很少的字节,比TCP协议负载消耗少,效率也比较高。因此,虽然UDP的可靠性不高,但是由于它传输数据的高效率,使得它在实际的网络应用中被广泛采用。
广播数据即数据从一个工作站发出,局域网内的其他所有工作站都能收到它。这一特征适用于无连接协议,因为L A N上的所有机器都可获得并处理广播消息。使用广播消息的不利之处是每台机器都必须对该消息进行处理。比如,一位用户在LAN上广播一条消息,每台机器上的网卡都会收到这条消息,并把它上传到网络堆栈。然后,堆栈将这条消息在所有的网络应用中循环,看它们是否应该接收这条消息。通常,这个局域网上的多数机器对该消息都不感兴趣,并将它丢弃。但是,各台机器仍需花时间来处理这个数据包,看是否有应用对它感兴趣。如果广播通信过于频繁,那么会使LAN上的机器陷入困境,因为每个工作站都要检查这个数据包,这就叫做广播风暴。
因此,需要将报文同时传往多个接收者时,那么必须使用广播或者多播。广播和多播都是由UDP协议来实现的。多播(multicast)处于单播和广播之间:即数据帧仅仅传送给属于多播组的多个主机。
255.255.255.255是受限的广播地址,可以使用它来进行本网络的广播通信。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。而主机号为全1的地址是指向网络的广播地址,一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。
UDP适用于不需要TCP可靠机制的情形,比如当高层协议或应用程序提供错误和流控制功能的时候。UDP是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)等。
在本课题中,“教师演示”功能必须使用广播来进行群发。如果使用TCP协议,则不能同时向所有的主机进行连接通信,而是需要循环连接所有的主机,这样会极大地降低网络传输的效率。如果学生机数量太多,则实时性就不能得到满足,教师机的网络负载也会达到极限。因此,使用UDP广播是非常好的选择,并且不会在路由器上转发广播,缩小了广播的影响范围。
2.1.3 Windows 网络编程技术
本课题是基于Windows操作系统开发的,网络通信传输模块主要使用了由微软MFC类库中的CSocket类。它继承于CAsyncsocket类,是对Windows Sockets API的高层抽象。它通常和CSocketFile及CArchive类混合使用,这个类主要负责数据的发送和接收。
CSocket提供了阻塞式的访问方式,这对于CArchive的同步操作是必须的。该类的成员是阻塞函数,例如Receive()、Send()、ReceiveFrom()、SendTo()和Accept()函数,不会像Winsock中的函数一样返回WSAEWOULDBLOCK的错误。取而代之的是,这些函数会自己等待直到操作的完成。如果这些阻塞函数正在等待时,应用程序调用了CancleBlockingCall()函数,那么这些函数将会完成等待并返回一个WSAEINTR的错误。
CSocket类是CAsyncSocket类的子类。因此,要使用CSocket类,必须要调用AfxSocketInit()函数初始化Socket。
CSocket类中,其成员变量m_hSocket保存其对应的socket句柄,该类的主要函数有:
(1)Create()函数:创建一个Windows Socket句柄并把它关联到对象上。该函数的完整格式为:BOOL Create(UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, LPCTSTR lpszSocketAddress = NULL)。 其中参数nSocketPort是要分配的端口号,如果它为0则系统自动分配一个端口给该套接字。参数nSocketType指明了该套接字的类型,使用SOCK_STREAM参数则建立流套接字,使用SOCK_DGRAM则会建立数据报套接字,默认时是使用流式套接字。参数lpszSocketAddress则指明了套接字的网络地址。如果函数成功执行,返回值为TEUE,否则返回值为FALSE。
(2)Accept()函数:接收对方发送的连接请求。该函数的完整格式为:virtual BOOL Accept(CAsyncSocket& rConnectedSocket,SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL)。其中参数rConnectedSocket为连接有效的新的套接字的指针。参数lpSockAddr指明了接收连接套接字的地址。参数lpSockAddrLen说明了指向lpSockAddr地址的长度字节的指针。如果函数成功执行,返回值为TEUE,否则返回值为FALSE。使用该函数并成功返回时,会建立一个新的套接字,该套接字用于网络数据的传输。
(3)Bind()函数:把本地地址关联到Socket上。函数的完整格式为:BOOL Bind (UINT nSocketPort, LPCTSTR lpszSocketAddress = NULL)。参数nSocketPort指明要绑定的套接字端口。参数lpszSocketAddress指明了套接字的地址。如果函数成功执行,返回值TRUE,否则返回值为FALSE。
(4)Close()函数:关闭当前Socket,释放套接字描述符。
(5)Connect()函数:与对方Socket进行连接。该函数的完整格式为:BOOL Connect(LPCTSTR lpszHostAddress, UINT nHostPort)。 参数lpszHostAddress指明了对方主机的地址。参数nHostPort指明了对方主机的Socket端口号。如果函数成功执行,返回值为TRUE,否则返回值为FALSE。
(6)Listen()函数:监听到来的连接请求。该函数的完整格式为:BOOL Listen (int nConnectionBacklog=5)。 参数nConnectionBacklog为等待处理连接的队列所允许达到的最大长度。如果函数成功执行,返回值为TRUE,否则返回值为FLASE。
(7)Receive()函数:从Socket中接收数据。该函数的完整格式为:virtual int Receive(void* lpBuf, int nBufLen, int nFlags = 0)。其中参数lpBuf为接收数据的缓冲。参数nBufLen为该缓冲的大小(字节数)。参数nFlags可以设置调用的模式。如果函数成功执行,返回值为接收到的字节数,如果连接已经关闭,则返回值为零。否则返回SOCKET_ERROR。
(8)ReceiveFrom()函数:接收一个数据报并且存储源地址。该函数的完整格式为: int ReceiveFrom(void* lpBuf, int nBufLen,CString& rSocketAddress, UINT& rSocketPort, int nFlags = 0)。其中参数lpBuf为接收数据的缓冲。参数nBufLen为该缓冲的大小(字节数)。参数rSocketAddress为发送方的主机地址。参数rSocketPort为发送方的套接字端口。参数nFlags可以设置调用的模式。如果函数成功执行,返回值为接收到的字节数,否则返回SOCKET_ERROR。
(9)Send()函数:发送数据到已连接的套接字接口。函数的完整格式为:virtual int Send(const void* lpBuf, int nBufLen, int nFlags = 0)。参数lpBuf为发送数据的缓冲。参数nBufLen为该缓冲的大小(字节数)。参数nFlags可以设置调用的模式。如果函数成功执行,返回值为发送的字节数,如果连接已经关闭,则返回值为零。否则返回SOCKET_ERROR。
(10)SendTo()函数:发送数据报到具体的目标地址。该函数的完整格式为:int SendTo(const void* lpBuf, int nBufLen,UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0)。 参数lpBuf为发送数据的缓冲。参数nBufLen为该缓冲的大小(字节数)。参数rSocketAddress为接收方的主机地址。参数rSocketPort为接收方的套接字端口。参数nFlags可以设置调用的模式。如果函数成功执行,返回值为发送的字节数,否则返回SOCKET_ERROR。
在使用该函数时,如果发送的是广播数据,那么参数rSocketAddress必须要正确设置。当要向广播地址255.255.255.255发送数据时,参数rSocketAddress可以为NULL,也可以为“255.255.255.255” 。当要向广播地址×××.×××.×××.255(即是指向某网络的广播地址)发送数据时,rSocketAddress应该为“×××.×××.×××.255” 。
(11)SetSockOpt()函数:设置当前Socket套接字的选项。选项会影响套接字的操作,例如是否允许在套接字中发送广播,是否允许在普通数据流中接收快速传输的数据等。该函数的完整格式为:BOOL SetSockOpt(int nOptionName, const void * lpOptionValue,int nOptionLen, int nLevel = SOL_SOCKET)。参数nOptionName说明要设置的套接字选项。参数lpOptionValue说明要设置的值的缓冲地址。参数nOptionLen说明lpOptionValue缓冲的字节数。参数nLevel说明选项定义所在的级别。
可重载的消息响应函数主要有:
(1)OnAccept()函数:通知监听的Socket,接收连接请求。在接收到连接请求时,系统发送消息,该函数响应消息并处理连接请求。可以重载该函数,在该函数中调用Accept()函数来接收连接请求并且生成新的套接字。
(2)OnClose()函数:通知Socket,和它相连的Socket已经关闭
(3)OnReceive函数:通知Socket有数据到达。当有数据到达时,系统发送消息,该函数响应消息并对数据进行接收和处理。可以重载该函数,在该函数中调用ReceiveFrom()函数来接收一个UDP数据报,或者调用Receive()函数来接收一个TCP数据包。
(4)OnSend函数:通知Socket可以调用Send发送数据。此函数在发送数据时响应系统消息而被调用。
2.2 图像处理技术
2.2.1 BMP位图格式
本课题中对屏幕的截取是使用BitBlt()函数,截取后的数据是设备相关位图DDB,要将图像数据发送到另一台机器上显示,则必须将设备相关位图DDB转换为设备无关位图DIB,以使图像在任何类型的显示设备上显示。并且,在本课题中对BMP位图的处理是系统的核心内容,对BMP位图格式的深入理解是完成本系统的关键。
BMP(Bitmap-File)图像文件是Windows采用的图像文件格式,在Windows环境下运行的所有图像处理软件都支持BMP文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。Windows 3.0以前的BMP文件格式与显示设备有关,因此把这种BMP图像文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。Windows 3.0以后的BMP图像文件与显示设备无关,因此把这种BMP图像文件格式称为设备无关位图DIB(device-independent bitmap)格式,目的是为了让Windows能够在任何类型的显示设备上显示所存储的图像。BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。
位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列。BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。文件格式如图 2.1所示:
(需要该计算机毕业设计论文的,请联系我们在线客服QQ:599057179) -本设计为全套资料 |