屏幕的显示的数据由View类的对象来负责。通过MFC的支持Visual C++也实现了面向对象领域的RTTI(RunTime Type Information 运行时类型识别)、Dynamic Creation(动态创建)、(Persitence)永久保存机制,同时他也实现了Windows下的Message Mapping(消息映射)和Command Routing(命令传递),通过MFC的Cdatabase和Crecordset类Visual C++可以实现数据库的应用,通过ChtmlStream、CHttpFilter、CHttpFilterContext、ChttpServer等ISAPI(Internet Server API)可以很好的支持Internet上的http协议相关的操作。由于MFC涉及到应用程序开发的各个领域,其Visual C++成为倍受欢迎的开发工具。
1.4.2 网络编程
80年代初,美国政府的高级研究工程机构(ARPA)给加利福尼亚大Berkeley分校提供了资金,让他们在UNIX操作系统下实现TCP/IP协议。在这个项目中研究人员为TCP/IP网络通信开发了一个API(应用程序接口)。这个API称为Socket接口(套接字)。今天,SOCKET接口是TCP/IP网络最为通用的API,也是INTERNET上进行应用开发最为通用的API。
套接字是从英文单词 socket翻译过来的, ( Socket在英文中是插座的意思,在这里设计者实际上是暗指电话插座。因为在 Socket环境下编程很像是打电话的模拟,Internet的 IP地址就是电话号码,要打电话,首先要有个电话插座,在程序中就是向系统申请一个 Socket,以后两台机器上的程序"交谈"都是通过这个 Socket来进行的。对程序员来说,也可以把Socket看成一个文件指针,只要向指针所指的文件读写数据,就可以实现双向通讯。它是网络通信的基本构件。套接字是可以被命名和寻址的通信端点,是网络互连终点。换句话说,网络互连是两个计算机或处理器通过网络相互传输数据。网络专业人员将每个网络会话的末端称做终点。若通过套接字接口进行网络互连,则程序在每个网络互连的末端都需要一个套接字,套接字接口相当于文件系统,可以使用 API通过网络软件申请一个可以指定特定套接字的句柄来定义套接字的特性。当然 ,套接字句柄和文件句柄是不同的,文件句柄指向一个特定的文件和设备,而套接字句柄并不代表一个特定的终点或目标地址。基于套接字的程序先创建一个套接字,然后再将套接字和目标终点连接起来。底层的套接字函数是 WinInetAPI的一部分,但使用MFC的 CSocket类,它封装了这些套接字函数。CSocket类实际上来源于 CAsyncSocket类,但该类编程比较复杂,需要编写底层函数来进行通信操作,而 CSocket为底层函数提供了一个更抽象的封装,替编程者执行对底层函数的操作,简化了Socket编程。CSocket类提供了一个高级的 Socket支持,运用了 MFC的序列化类来提供和传输 Socket对象。利用 Socket进行通讯,有两种主要的方式。一种叫流方式 ( StreamSocket)也称面向连接方式。在这种方式下,两个通讯的应用程序之间先要建立一种虚拟的连接。其过程好像客户机在给服务器打电话,只有服务器拿起了听筒,才有可能开始传输数据,这种方式对应的TCP协议。第二种叫作数据报文方式 (DatagramSocket) ,又称无连接方式 ,这时两台计算机像是把数据放在一封封信里通过网络寄给对方,信在传送的过程中有可能会残缺不全,而且,后发出的信也有可能会先收到,它对应的是 UDP协议[6]。流方式的特点是,通讯可靠,对数据有校验和重发的机制,通常用来作数据文件的传输如 ftp、telnet等;数据报文方式由于取消了重发校验机制,能够达到较高的通讯速率,可以用作一些对数据可靠性要求不高的通讯 ,如实时的语音、像转送、播消息等。由于两台计算机之间采用的是客户机/服务器模式,为保证数据的可靠性,可以采用了基于流方式的套接字编程[7]。
1.5 需求分析及可行性研究
1.5.1 时间要求
本项目作为大学本科毕业设计题目,从3月8号接受选题开始,在5月20号之前完成系统设计,编码实现工作,在6月01号之前完成毕业设计论文初稿,6月10号之前最终完成论文。
1.5.2 功能要求
(1)用户端之间的信息发送,本程序需要实现的最基本的功能
(2)在线用户主机名列表的维护。
(3)在C/S模式中,服务器与客户端是相互依赖的。在客户端启用以后,需要查看服务器端是否在线,服务器在线才能正常使用客户端,如果服务器不在线,则在检测一定次数以后自动退出客户端程序。在使用过程中,客户端在指定时间内未向服务器端发送信息的,服务器认为客户端下线;客户端在一定时间内未收到服务器端信息的,认为服务器已经下线,则提示用户并建议退出,在用户一定时间后没有退出的则自动关闭客户端程序。
1.5.3 系统基本流程图
图1-3 聊天系统工作流程图
1.5.4 性能要求
首先要求程序要完全可靠,可以应付种种由于系统问题产生的错误,比如初始网络失败,对方突然下线等。要求提前设想到类似的尽可能多的可能发生的事件,做出相应的应对措施,并向用户提交简单易懂清晰明白的提示信息。
程序要有良好的容错性,当用户进行非法操作时或者系统本身出现问题时要能以最好的方式退出程序,避免发生程序假死现象。
开发文档要有好的易理解性,如果系统又要交由别人接手开发,或者自己由于种种原因需要进行二次开发,那么要保证以后能够清晰的理解整个系统的设计思路以及实现细节。
要求程序对所运行之系统的硬件条件要求尽可能低,运行时内存占用尽可能小,响应速度要尽可能快。并且不发生内存泄漏之类影响系统运行的错误事件。并且要求易于维护及扩展。所以应该采用模块化开发,各个模块之间不要有太多的联系,以免维护困难。
1.5.5 测试环境规定
在开发完成以后,自己进行一个全面的测试。
1.5.6 可行性研究
(1)成本可行性分析
因为本软件只做开发学习使用,所以暂且不考虑经济成本及盈利问题。
(2)技术可行性分析
首先我已经搭建好开发所需要的软硬件平台,并进行了合理而完善的需求分析,做好了充分的前期准备工作,其次因为本程序的平台将基于WINDOWS,将要使用网络通信技术,而WINDOWS有完善成熟的网络通信接口,以及与VC开发环境的严密契合能力,加之相类似的更大规模的INTERNET通信工具产品也已有例在先,所以这个程序的开发可行性在技术上是完全可行的。
2 聊天系统的设计
2.1 聊天系统的设计
2.1.1 客户机/服务器模式
通信的两个应用程序间相互作用的主要模式是客户机/服务器模式,即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。客户机/服务器模式的建立基于以下两点:首先。建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步[8]。
客户机/服务器模式在操作过程中采取的是主动请求方式:首先服务器方要先启动,并根据请求提供相应服务:
(1) 打开通信通道并告知本地主机,它愿意在某一公认地址上接收客户请求;
(2) 等待客户请求到达该端口;
(3) 接收到服务请求,处理该请求并发送应答信号。服务完成后,关闭与客户的通信链路,并终止;
(4)返回第二步,等待客户请求;
(5)关闭服务器。
客户方:
(1) 打开一通信通道,并连接到服务器所在主机的特定端口;
(2) 向服务器发服务请求,等待并接收应答;
(3) 请求结束后关闭通信通道并终止。
上一篇:
基于VC的智能回转支承现场监控软件开发学士学位论文(2003doc)
下一篇:
采用VC的伺服电机控制毕业论文(2003doc)