交互式网络教学平台软件设计Word文件下载.docx
- 文档编号:22371317
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:43
- 大小:46.26KB
交互式网络教学平台软件设计Word文件下载.docx
《交互式网络教学平台软件设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《交互式网络教学平台软件设计Word文件下载.docx(43页珍藏版)》请在冰豆网上搜索。
(2)学生机连接管理功能
对学生机的连接情况进行管理,显示当前在线的学生机及其信息,并且当学生机关闭和掉线时进行处理。
(3)图像处理功能
对教师机和学生机的屏幕进行处理,并且能在BMP位图格式和JPEG格式之间进行转换,是“教师演示”、“监视学生”和“远程帮助”的基础,是系统的核心功能。
(4)鼠标、键盘处理功能
此功能和图像处理功能合在一起,就可以使教师机对学生机进行远程操作,就好像是教师直接在学生机上操作一样,可以对学生机进行远程辅导。
(5)文件处理功能
教师可以把共享的文件群发到所有学生机的临时目录中,可以传输各种类型和任意大小的文件。
(6)系统控制功能
使用系统API函数,对系统进行控制,可以进行进程管理、信息查询、开关机和注销机器等操作。
1.3系统的实现环境
考虑到用户的使用要求和系统的通用性和实时性,本课题的实现环境为:
(1)用户(学生机和教师机):
采用PC机,运行平台为Windows2000或WindowsXP操作系统
(2)网络:
10/100BASE-T以太网
(3)开发环境:
VisualC++6.0
2系统理论设计
2.1网络通信传输技术
2.1.1传输控制协议TCP概述
TCP(TransmissionControlProtocol)是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,XWindows和SMTP)需要高度的可靠性,所以通常都使用TCP。
在本课题中,“群发文件”功能需要很高的可靠性,因为在传输过程中只要有一个数据帧错误或者是丢失,则整个文件就会被破坏,因此,“群发文件”功能应该使用TCP来进行传输。
此外,在教师机对一个学生机进行操作时,也使用TCP来传输数据,以尽可能的保证数据的正确传输。
2.1.2用户数据报协议UDP概述
UDP(UserDatagramProtocol)是ISO参考模型中一种无连接的传输层协议,提供面向事务的不可靠信息传送的服务。
UDP协议基本上是IP协议与上层协议的接口。
与TCP不同,UDP并不提供对IP协议的可靠机制、流控制以及错误恢复功能,也不需要事先建立连接。
由于UDP比较简单,UDP头包含很少的字节,比TCP协议负载消耗少,效率也比较高。
因此,虽然UDP的可靠性不高,但是由于它传输数据的高效率,使得它在实际的网络应用中被广泛采用。
广播数据即数据从一个工作站发出,局域网内的其他所有工作站都能收到它。
这一特征适用于无连接协议,因为LAN上的所有机器都可获得并处理广播消息。
使用广播消息的不利之处是每台机器都必须对该消息进行处理。
比如,一位用户在LAN上广播一条消息,每台机器上的网卡都会收到这条消息,并把它上传到网络堆栈。
然后,堆栈将这条消息在所有的网络应用中循环,看它们是否应该接收这条消息。
通常,这个局域网上的多数机器对该消息都不感兴趣,并将它丢弃。
但是,各台机器仍需花时间来处理这个数据包,看是否有应用对它感兴趣。
如果广播通信过于频繁,那么会使LAN上的机器陷入困境,因为每个工作站都要检查这个数据包,这就叫做广播风暴。
因此,需要将报文同时传往多个接收者时,那么必须使用广播或者多播。
广播和多播都是由UDP协议来实现的。
多播(multicast)处于单播和广播之间:
即数据帧仅仅传送给属于多播组的多个主机。
255.255.255.255是受限的广播地址,可以使用它来进行本网络的广播通信。
在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
而主机号为全1的地址是指向网络的广播地址,一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。
UDP适用于不需要TCP可靠机制的情形,比如当高层协议或应用程序提供错误和流控制功能的时候。
UDP是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)等。
在本课题中,“教师演示”功能必须使用广播来进行群发。
如果使用TCP协议,则不能同时向所有的主机进行连接通信,而是需要循环连接所有的主机,这样会极大地降低网络传输的效率。
如果学生机数量太多,则实时性就不能得到满足,教师机的网络负载也会达到极限。
因此,使用UDP广播是非常好的选择,并且不会在路由器上转发广播,缩小了广播的影响范围。
2.1.3Windows网络编程技术
本课题是基于Windows操作系统开发的,网络通信传输模块主要使用了由微软MFC类库中的CSocket类。
它继承于CAsyncsocket类,是对WindowsSocketsAPI的高层抽象。
它通常和CSocketFile及CArchive类混合使用,这个类主要负责数据的发送和接收。
CSocket提供了阻塞式的访问方式,这对于CArchive的同步操作是必须的。
该类的成员是阻塞函数,例如Receive()、Send()、ReceiveFrom()、SendTo()和Accept()函数,不会像Winsock中的函数一样返回WSAEWOULDBLOCK的错误。
取而代之的是,这些函数会自己等待直到操作的完成。
如果这些阻塞函数正在等待时,应用程序调用了CancleBlockingCall()函数,那么这些函数将会完成等待并返回一个WSAEINTR的错误。
CSocket类是CAsyncSocket类的子类。
因此,要使用CSocket类,必须要调用AfxSocketInit()函数初始化Socket。
CSocket类中,其成员变量m_hSocket保存其对应的socket句柄,该类的主要函数有:
(1)Create()函数:
创建一个WindowsSocket句柄并把它关联到对象上。
该函数的完整格式为:
BOOLCreate(UINTnSocketPort=0,intnSocketType=SOCK_STREAM,LPCTSTRlpszSocketAddress=NULL)。
其中参数nSocketPort是要分配的端口号,如果它为0则系统自动分配一个端口给该套接字。
参数nSocketType指明了该套接字的类型,使用SOCK_STREAM参数则建立流套接字,使用SOCK_DGRAM则会建立数据报套接字,默认时是使用流式套接字。
参数lpszSocketAddress则指明了套接字的网络地址。
如果函数成功执行,返回值为TEUE,否则返回值为FALSE。
(2)Accept()函数:
接收对方发送的连接请求。
virtualBOOLAccept(CAsyncSocket&
rConnectedSocket,SOCKADDR*lpSockAddr=NULL,int*lpSockAddrLen=NULL)。
其中参数rConnectedSocket为连接有效的新的套接字的指针。
参数lpSockAddr指明了接收连接套接字的地址。
参数lpSockAddrLen说明了指向lpSockAddr地址的长度字节的指针。
使用该函数并成功返回时,会建立一个新的套接字,该套接字用于网络数据的传输。
(3)Bind()函数:
把本地地址关联到Socket上。
函数的完整格式为:
BOOLBind(UINTnSocketPort,LPCTSTRlpszSocketAddress=NULL)。
参数nSocketPort指明要绑定的套接字端口。
参数lpszSocketAddress指明了套接字的地址。
如果函数成功执行,返回值TRUE,否则返回值为FALSE。
(4)Close()函数:
关闭当前Socket,释放套接字描述符。
(5)Connect()函数:
与对方Socket进行连接。
BOOLConnect(LPCTSTRlpszHostAddress,UINTnHostPort)。
参数lpszHostAddress指明了对方主机的地址。
参数nHostPort指明了对方主机的Socket端口号。
如果函数成功执行,返回值为TRUE,否则返回值为FALSE。
(6)Listen()函数:
监听到来的连接请求。
BOOLListen(intnConnectionBacklog=5)。
参数nConnectionBacklog为等待处理连接的队列所允许达到的最大长度。
如果函数成功执行,返回值为TRUE,否则返回值为FLASE。
(7)Receive()函数:
从Socket中接收数据。
virtualintReceive(void*lpBuf,intnBufLen,intnFlags=0)。
其中参数lpBuf为接收数据的缓冲。
参数nBufLen为该缓冲的大小(字节数)。
参数nFlags可以设置调用的模式。
如果函数成功执行,返回值为接收到的字节数,如果连接已经关闭,则返回值为零。
否则返回SOCKET_ERROR。
(8)ReceiveFrom()函数:
接收一个数据报并且存储源地址。
intReceiveFrom(void*lpBuf,intnBufLen,CString&
rSocketAddress,UINT&
rSocketPort,intnFlags=0)。
其中参数lpBuf为接收数据的缓冲。
参数rSocketAddress为发送方的主机地址。
参数rSocketPort为发送方的套接字端口。
如果函数成功执行,返回值为接收到的字节数,否则返回SOCKET_ERROR。
(9)Send()函数:
发送数据到已连接的套接字接口。
virtualintSend(constvoid*lpBuf,intnBufLen,intnFlags=0)。
参数lpBuf为发送数据的缓冲。
如果函数成功执行,返回值为发送的字节数,如果连接已经关闭,则返回值为零。
(10)SendTo()函数:
发送数据报到具体的目标地址。
intSendTo(constvoid*lpBuf,intnBufLen,UINTnHostPort,LPCTSTRlpszHostAddress=NULL,intnFlags=0)。
参数lpBuf为发送数据的缓冲。
参数rSocketAddress为接收方的主机地址。
参数rSocketPort为接收方的套接字端口。
如果函数成功执行,返回值为发送的字节数,否则返回SOCKET_ERROR。
在使用该函数时,如果发送的是广播数据,那么参数rSocketAddress必须要正确设置。
当要向广播地址255.255.255.255发送数据时,参数rSocketAddress可以为NULL,也可以为“255.255.255.255”。
当要向广播地址×
×
.×
.255(即是指向某网络的广播地址)发送数据时,rSocketAddress应该为“×
.255”。
(11)SetSockOpt()函数:
设置当前Socket套接字的选项。
选项会影响套接字的操作,例如是否允许在套接字中发送广播,是否允许在普通数据流中接收快速传输的数据等。
BOOLSetSockOpt(intnOptionName,constvoid*lpOptionValue,intnOptionLen,intnLevel=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.1BMP位图格式
本课题中对屏幕的截取是使用BitBlt()函数,截取后的数据是设备相关位图DDB,要将图像数据发送到另一台机器上显示,则必须将设备相关位图DDB转换为设备无关位图DIB,以使图像在任何类型的显示设备上显示。
并且,在本课题中对BMP位图的处理是系统的核心内容,对BMP位图格式的深入理解是完成本系统的关键。
BMP(Bitmap-File)图像文件是Windows采用的图像文件格式,在Windows环境下运行的所有图像处理软件都支持BMP文件格式。
Windows系统内部各图像绘制操作都是以BMP为基础的。
Windows3.0以前的BMP文件格式与显示设备有关,因此把这种BMP图像文件格式称为设备相关位图DDB(device-dependentbitmap)文件格式。
Windows3.0以后的BMP图像文件与显示设备无关,因此把这种BMP图像文件格式称为设备无关位图DIB(device-independentbitmap)格式,目的是为了让Windows能够在任何类型的显示设备上显示所存储的图像。
BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。
位图文件可看成由4个部分组成:
位图文件头(bitmap-fileheader)、位图信息头(bitmap-informationheader)、彩色表(colortable)和定义位图的字节阵列。
BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。
文件格式如图2.1所示:
位图文件的组成
结构名称
符号
位图文件头(bitmap-fileheader)
BITMAPFILEHEADER
bmfh
位图信息头(bitmap-informationheader)
BITMAPINFOHEADER
bmih
彩色表(colortable)
RGBQUAD
aColors[]
图象数据阵列字节
BYTE
aBitmapBits[]
图2.1
(1)BMP文件头结构
其结构定义如下:
typedefstructtagBITMAPFILEHEADER
{
WORDbfType;
//位图文件的类型,必须为BM
DWORDbfSize;
//位图文件的大小,以字节为单位
WORDbfReserved1;
//位图文件保留字,必须为0
WORDbfReserved2;
DWORDbfOffBits;
//位图数据的起始位置,以相对于位图
//文件头的偏移量表示,以字节为单位
}BITMAPFILEHEADER;
(2)位图信息头
BMP位图信息头主要用于说明位图的尺寸等信息。
typedefstructtagBITMAPINFOHEADER
DWORDbiSize;
//本结构所占用字节数
LONGbiWidth;
//位图的宽度,以像素为单位
LONGbiHeight;
//位图的高度,以像素为单位
WORDbiPlanes;
//目标设备的级别,必须为1
WORDbiBitCount//每个像素所需的位数,必须是1(双色),
//4(16色),8(256色)或24(真彩色)之一
DWORDbiCompression;
//位图压缩类型,必须是0(不压缩),1(BI_RLE8
//压缩类型)或2(BI_RLE4压缩类型)之一
DWORDbiSizeImage;
//位图的大小,以字节为单位
LONGbiXPelsPerMeter;
//位图水平分辨率,每米像素数
LONGbiYPelsPerMeter;
//位图垂直分辨率,每米像素数
DWORDbiClrUsed;
//位图实际使用的颜色表中的颜色数
DWORDbiClrImportant;
//位图显示过程中重要的颜色数
}BITMAPINFOHEADER;
(3)颜色表
颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。
RGBQUAD结构的定义如下:
typedefstructtagRGBQUAD
BYTErgbBlue;
//蓝色的亮度(值范围为0-255)
BYTErgbGreen;
//绿色的亮度(值范围为0-255)
BYTErgbRed;
//红色的亮度(值范围为0-255)
BYTErgbReserved;
//保留,必须为0
}RGBQUAD;
颜色表中RGBQUAD结构数据的个数有biBitCount来确定:
当biBitCount=1,4,8时,分别有2,16,256个表项;
当biBitCount=24时,没有颜色表项。
位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:
typedefstructtagBITMAPINFO
BITMAPINFOHEADERbmiHeader;
//位图信息头
RGBQUADbmiColors[1];
//颜色表
}BITMAPINFO;
(4)位图数据
位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。
位图的一个像素所占的字节数:
当biBitCount=1时,8个像素占1个字节;
当biBi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交互式 网络 教学 平台 软件设计