基于局域网的即时通讯聊天室系统设计毕业设计论文

上传人:仙*** 文档编号:45986663 上传时间:2021-12-09 格式:DOC 页数:43 大小:1.16MB
收藏 版权申诉 举报 下载
基于局域网的即时通讯聊天室系统设计毕业设计论文_第1页
第1页 / 共43页
基于局域网的即时通讯聊天室系统设计毕业设计论文_第2页
第2页 / 共43页
基于局域网的即时通讯聊天室系统设计毕业设计论文_第3页
第3页 / 共43页
资源描述:

《基于局域网的即时通讯聊天室系统设计毕业设计论文》由会员分享,可在线阅读,更多相关《基于局域网的即时通讯聊天室系统设计毕业设计论文(43页珍藏版)》请在装配图网上搜索。

1、本科毕业设计(论文)题 目 基于局域网的即时通讯聊天室系统设计 部 系 地方生部 专 业 电子信息工程 基于局域网的即时通讯聊天系统的设计摘 要随着计算机科学和Internet 的飞速发展, 网上聊天已成为人们相互交流的一种方式, 与E-mail、电话相比, 聊天服务更具有实时性和有效性。本论文提出一个运行于VC平台上的局域网聊天软件的解决方案。该聊天软件包括服务器端和客户端两个模块,客户端通过服务器端进行通信。服务器端模块主要实现了服务器的配置和数据的传递;客户端模块主要实现了用户注册、登录、文字聊天等功能。该软件采用异步套接字的非阻塞模式,并实现对象的序列化和MFC文件对象实现数据的保存。

2、 该软件能够帮助企业在局域网内搭建起自己的聊天系统,避免企业内部员工使用类似QQ等软件泄露内部信息,但是该软件只实现了聊天的基本功能,还有很多不足之处需要改进。关键字:局域网、即时通信、套接字、异步模式An instant messaging chat system based of LANAbstractAlong with the high-speed development of the computer science and Internet, chatting on line has been an important method in our communication. Co

3、mparing with E-mail and telephone, the chat-line service is more real-time and effective.This thesis proposes a solution of a LAN chatting software based on C+ language, which is operated on the VC platform. This chatting software includes two modules: the server and the client, which can communicat

4、e with each other. The server module mainly completes the sever devices configuration. The client module mainly completes the users login, registration, instant messaging and so on. The software used model of non-blocking asynchronous socket , And to achieve the object and MFC series documents the p

5、reservation of the object data. This software can help the company to build their own chatting system in the local area network, and it also can avoid the staff of the company disclosing the insider information by using the other software such as QQ, but this software has only completed the basic fu

6、nction as a chatting system, so it need much more improvement.Key words:LAN 、Instant messaging、Socket、asynchronous modleIII目 录摘 要IAbstractII1 概 述11.1 系统现状11.2 系统内容与目标21.3 系统综述22系统开发环境和关键技术32.1 开发环境32.2 关键技术32.2.1 .Visual C+和面向对象程序设计32.2.2 M F C42.2.3 WINDOWS SOCKETS网络编程接口42.2.4 WSAAsyncSelect模型开发52.

7、2.5 TCP/IP协议、TCP协议62.2.6 Client/Server结构(客户机/服务器模式)83系统分析与设计93.1 系统分析93.1.1 系统需求93.1.2 需求分析103.2 系统设计113.2.1 设计原则113.2.3 工作流程123.2.4 功能设计133.2.5 共享数据类设计134系统实现164.1 服务器端设计实现164.1.1 服务器端静态类图164.1.2 服务器主要类介绍164.1.3 服务器端主要过程介绍194.2 客户端设计实现254.2.1 客户端静态类图254.2.2 客户端主要类介绍254.2.3客户端主要过程介绍274.3系统测试324.3.1

8、测试意义324.3.2软件测试的目标324.3.2软件测试的方法324.3.3 测试用例33总结与展望34参考文献36致 谢371 概 述近年来,随着全球信息化进程的不断发展,网络也在飞速发展。出于高效、快速地处理各种事务的目的,越来越多的企业在其内部使用局域网来进行工作。在内部局域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。然而,随着企业规模的扩大,业务量的增加,企业内部的信息越来越私密,企业只希望员工通过内部局域网进行沟通与交流,避免企业内部机密通过Internet泄露到外部。为了解决上述矛盾,人们提出了开发局域网聊天软件的构想,通过局域网聊天软件,企业员工可以

9、随时的进行即时消息传递,召开网络会议等,有利于提高工作消息效率,同时又保护了企业内部信息的安全性。 本系统采用基于Socket的局域网通信工具的设计与实现的方法。基于Socket的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决企业内部局域网的各种通信需求。 基于Socket的局域网聊天工具很好地诠释了Socket通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。它具有信息收发速度快,保密性好,占用网络带宽

10、资源低,占用服务器吞吐能力低,易于编程实现等优点。 基于Socket的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的应用前景。 1.1 系统现状 基于局域网的即时通信工具,实际上是互联网即时通信工具的一个小规模版本,广域网上的即时通信工具,如今一般采用UDP或者 TCP协议体系来实现 ,开发技术已经比较成熟,比如较早的ICQ,MSN Messenger, Yahoo。除了这些国外开发的产品,还有国产的有名的QQ,新浪UC,LAVA-LAVA等,这些工具统统都实现了广域网上的即时通信,尽管都是即时通信,实现了即时聊

11、天,以及文件传输的主要功能,但是也各有各的特色,比如ICQ的巨大客户群,MSN的个性化表情,YAHOO通的易操作性等。而QQ也具有一个相当方便的屏幕截图功能,另外就是,所有上述软件都实现了网络即时的视频,语音聊天功能。这些软件,在使用方面各有特色,在实现方面也各有所长,但基于这些产品正在商业运营阶段,其实现方式属于商业机密,具体细节不一定得知,但是它在大的方面无非就是各种利用各种平台上的网络通信接口,建构基于下层TCP/IP,或者UDP协议的软件产品。1.2 系统内容与目标本课题主要研究的是局域网聊天软件,此聊天软件分为服务器程序和客户端程序,本课题的目标是能实现用户在客户端与服务器端传递文字

12、信息。主要研究开发内容是:熟悉C+和VC的操作,搭配系统开发平台,探索在此开发平台下,利用socket编程技术、多线程开发技术、TCP、UDP协议等进行局域网聊天软件的实际开发。1.3 系统综述现在,多渠道的信息源、网络化的数据分布、快捷医用的交互操作、智能化的分析决策等特点越来越成为衡量有两聊天软件的关键,因此,本人开发一个局域网聊天软件,该聊天软件是基于C+语言运行于VC平台上,利用的技术主要是Socket通信,使用配置文件作为数据管理。为实现和方便客户端间通信,在客户端进行了人性化的界面设计,用户可以注册号码,登陆界面,具有发送离线消息功能。第1章对本次课题的背景及意义、课题现状、课题内

13、容与目标进行了深入的阐述。第 2 章介绍了系统的开发环境和关键技术,例如Socket编程技术,非阻塞开发模式等等。第 3 章是系统分析与设计。将对系统进行需求分析,对组成系统的功能模块进行划分,对每个模块将要实现的功能进行阐述和说明。对系统的结构进行设计,设计共享数据结构。第4章是系统实现,分别介绍了服务器端和客户端每个功能的执行过程,画出主要模块的流程图。第 5 章介绍系统测试。最后,对本设计进行归纳总结,全面阐述本次设计中的体会。2 系统开发环境和关键技术 2.1 开发环境我所设计的是一个面向中小型机构内部通信需求的局域网即时信息软件,要在短时间内开发出来并且要满足客户要求,无论是硬件还是

14、软件都要选择合适,要求如下:开发设备应该完备;开发机器的性能必须稳定;操作系统的选择应该适当;开发出的程序可以在尽可能多的平台上运行;要求运行机配置尽可能低档。对此,我们选择的硬件环境和软件环境如下: 1、 硬件环境 处理器:Intel Pentium PIII或更高处理器 内存:256MB或更高 网络:局域网开发该系统应尽可能采用高档的硬件。因此,在应用时应采用更好的配置。2、 软件环境 操作系统:Windows 2000 /Windows XP / Windows 2003 开发平台:Microsoft Visual C+ 6.0开发语言:C+2.2 关键技术2.2.1 .Visual C

15、+和面向对象程序设计VC基于C,C+语言,主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC在 Windows平台无所不能。从20世纪70年代第一次提出面向对象的概念开始,到现在面向对象技术发展成为一种比较成熟的编程思想,通过面向对象技术,可以将现实世界直接影射到对象空间,从而为系统的设计和开发带来革命性的影响。Visual C+是一个典型的面向对象程序的设计语言,它也是目前为止功能最强、最受欢迎、应用最广泛、高效的Windows应用程序开发工具,它是在C 语言基础之上发展起来的,是C语言的超集。Visual C+是功能

16、最为强大可视化开发工具,它不仅支持传统的软件开发方法,更重要的是它能支持面向对象、可视化的开发风格。因此Visual C+又称作是一个集成开发工具,它提供了软件代码自动生成和可视化的资源编辑功能。Visual C+具有的优点:提供了面向对象的应用程序框架MFC(Microsoft Foundation Class),简化了程序员的编程工作,提高了模块的可重用性;提供了基于CASE技术的可视化软件的自动生成和维护工具AppWizard、ClassWizard、Visual Studio、WizardBar等,实现了直观、可视的程序设计风格,方便地编和管理各种类,维护程序的源代码;封装了Windo

17、ws的API函数、USER、KERNEL、GDI函数,简化了编程时创建、维护窗口的许多复杂的工作。2.2.2 M F CMFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C+环境下编写应用程序的一个框架和引擎,VC+是WinDOS下开发人员使用的专业C+ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC 就是挂在它之上的一个辅助软件开发包,MFC作为与VC+血肉相连的部分(注意C+和VC+的区别:C+是一种程序设计语言,是一种大家都承认的 软件编制的通用规范,而VC+只是一个编译器,或

18、者说是一种编译器+源程序编辑器的IDE,WS,PlatForm,这跟Pascal和Delphi的关系一个道理,Pascal是Delphi的语言基础,Delphi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的 关系,Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言),MFC同BC+集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微 软为VC+专配的.2.2.3 WINDOWS SOCKETS网络

19、编程接口选定WINDOWS平台开发网络通信程序,可以选择WINDOWS的SOCKETS编程接口,Windows Sockets是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。Windows sockets无疑是我们进行网络编程的利器。所有的Windows Sockets实现都支持流套接口和数据报套接口。应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工

20、作。它们之间的关系如图2.1所示: 图2.1Windows Sockets实现通讯工作的各层关系图2.2.4 WSAAsyncSelect模型开发WSAAsyncSelect()调用允许应用程序程序注册一个或多个感兴趣的网络事件。这一API调用用来取代探寻网络I/O调用。在select()或非阻塞I/O例程(例如send()和recv())已经被调用或将要被调用的情况下都可以使用WSAAsyncSelect()调用。在这种情况下,在声明感兴趣的网络事件时,你必须提供一个通知时使用的窗口句柄。那么在你声明的感兴趣的网络事件发生时,对应的窗口将收到一个基于消息的通知。其过程如图2.2所示。应用进程

21、WSAAsyncSelect线程继续运行 Recv()复制数据期间阻塞处理数据 内核 等待数据数据准备好复制数据将数据复制到拥护空间 完成复制系统调用返回消息系统调用返回成功指示 图2.2WSAAsyncSelect模型2.2.5 TCP/IP协议、TCP协议网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。 IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层-TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有

22、发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向上传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。UDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询-应答的服务.TCP和UDP服务通常有一个客户/服务器的关系。两个系统间的多重连接是这样相互确认并协调一致的,TCP或UDP连接唯一地使用每个信息中的如下四项进行确认: 源IP地址 发

23、送包的IP地址。 目的IP地址 接收包的IP地址。源端口 源系统上的连接的端口。 目的端口 目的系统上的连接的端口。端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25。这些端口号是“广为人知”的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯,图如2.3所示。 2.3面向连接的(TCP)连接过程2.2.6 Client/Server结构(客户机/服务器模式)Client/Server结构(C/S结构)是大家熟知的客户机和服务器结构。通过它可以充分利用两端硬件环境的优势,将任务合理

24、分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构。C/S结构软件分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用。C/S结构的优点是能充分发挥客户端的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个:只适用于局域网。而随着互

25、联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。3 系统分析与设计 3.1 系统分析3.1.1 系统需求聊天交流是目前互联网提供的主要内容。聊天系统有多种实现方式,类似ICQ属于一种点对点的聊天系统;还有一种是基于Socket的集中式聊天系统,这种聊天系统需要登陆统一的聊天服务器。在基于Socket的聊天系统中,主要有两种角色:服务器和客户端,不同的客户端登陆集中式的服务器,通过服务器将一个客户端发出的信息推送到其他所有客户端。基于Socket的聊天系统最早实现是使用网页刷新方式,通过客户

26、端不断地自动刷新,服务器端整个页面内容下载到客户端显示,这种方式的聊天速度慢,而且有刷屏现象,很快被更新的聊天技术所替代。 聊天系统在客户端和服务器之间主要传送的是文字信息,服务器端只需要把最近的文字信息推送到客户端,这样减少了网络传输内容,节省了网络传输的时间,无疑提高了聊天速度。这种“推”技术是目前基于Socket聊天系统的主要实现技术。在基于Socket的聊天系统,客户端和服务器必须保持随时随地的连接。这有别于普通Web浏览的连接方式。在使用浏览器访问服务器时,先由客户端发出HTTP协议,然后服务器响应处理这个客户端的响应,再返回处理结果;请求(Request)和响应(Response)

27、是一种一对一的前后因果关系。而在基于Socket的聊天系统中,客户端发出聊天信息的同时,客户端也在接受服务器发送过来的其他人的聊天信息,因此,请求和响应不存在那种前后对应关系,是两种分别独立进行的进程。因为服务器任何时候都可能发送信息到客户端,因此,客户端和服务器一旦建立连接,必须能让服务器在以后发送中寻找定位到这个连接。局域网聊天系统使该系统的用户能够通过客户端登入到该系统,然后直接与系统交互。首先,需启动服务器,进行服务器的配置,进行正确的服务器配置和数据库连接并测试成功后,开启服务器。接下来,在客户端,该系统的用户能够通过登陆界面进入,然后直接与系统交互,进行文字传送。本系统支持的活动列

28、表如下:(1) 配置服务器,设置IP及端;(2) 开启服务器;(3) 对离线用户进行删除管理;(4) 用户登陆系统;(5) 用户与系统交互,进行文字传送;(6) 用户好友登陆后,自动刷新列表;(7) 传送文字,当好友不在线时,发送离线消息;(8) 上线接收离线消息;3.1.2 需求分析该聊天程序分为服务器端和课户端两个部分。客户端实现功能:(1) 向在线成员发送消息并接收消息。(2) 更新成员状态。当其他成员上线或下线时,客户端及时更新成员状态。(3) 更新成员列表,当其他成员加入或者偶成员被删除时,客户端及时更新成员列表。(4) 当对方不在线时,可以向该成员发送离线消息。(5) 当用户上线时

29、,接受其他用户的离线消息。(6) 保存聊天记录。服务器端实现功能:(1) 维护聊天室成员列表:包括接受新成员,删除已有成员。(2) 通知客户端更新成员状态。(3) 通知客户端更新成员列表。(4) 为离线用户保存离线消息。(5) 验证密码。(6) 禁止已登陆用户再次登陆。(7) 保存用户信息。(8) 为用户保存离线消息。关系图如图3.1所示:ClientServerClientClientClient更新成员列表成员列表请求应答发送消息 图3.1 关系功能图 3.2 系统设计3.2.1 设计原则考虑到系统的可重用性和伸缩性,需要将本系统的网络通信底层和应用系统分离开。这样,基于可重用的网络通信层

30、,可以实现其他各种实时性较高的应用系统。本系统在架构设计上将分4个层次,如图3.2所示。CAsyncSocketCSocket聊天、游戏等应用系统Window Sockets API 图3.2架构层次本系统最底层是Socket通信层,将负责客户端和服务器之间快速的数据交换,它通过接口层和最上面应用层保持实时数据联系。用户从客户端进入到本系统前,将实现统一的用户登录验证机制。Socket底层设计分两大部分:协议设计和连接处理设计:协议设计和连接处理设计;CSocket层的目的是提供底层和应用蹭一个中介媒体的作用,但是不能设计得太复杂,以免延误数据传送时间。3.2.3 工作流程只有充分地了解了聊天

31、程序的工作流程,才能对整个系统的理解更加深刻,聊天程序的工作流程如图3.5所示。加载套接字库初始化套接字绑定本地机到套接字向指定IP地址发送数据关闭套接字库结束聊天创建线程用于接受数据图3.5聊天程序的工作流程3.2.4 功能设计局域网聊天系统以局域网内的用户为应用对象,经过各方面需求分析,该系统主要由服务器端和客户端两部分构成,各功能模块如图3-6所示。局域网聊天系统服务器客户端开启服务器停止服务器配置服务器关闭服务器发送离线信息登陆文字传送接收离线信息用户管理图3-6局域网聊天系统功能模块图3.2.5 共享数据类设计A用户设计:1用户状态设计客户端与服务器端都拥有成员列表。该程序将成员列表

32、设计为三种状态登陆状态:当用户登陆服务器事,设置用户状态为登陆状态, 服务器根据该用户列表状态发送成员列表。在线状态:用户在线,当两个用户都在线时,可以相互发送和接受成员列表。离线状态:当用户离线时,不能发送和接受消息。在线用户之间可以直接发送消息;对离线离线用户需要服务器转发。转发关系如图3.7所示。 在线用户发送消息 在线用户给离线用户发送消息 图3.7转发关系图B用户类设计 在程序中声明CUserInfo信息类。在该类中声明USERSTATUE枚举类型,描述用户状态。l ONLINE:在线状态l OFFLINE:离线状态l LOGIN:登陆状态l UNKNOWN:未知状态,初始化状态。成

33、员函数如表3.1CUserInfo 成员函数,类成员变量如表3-2所示。表3.1成员函数函 数 名 称返 回 值 功 能 CUserInfo() 无 构造函数CUserInfo(constCUserInfo&userInfo) 无 复制构造数CUserInfo () 无 析构函数 Init() Void初始成员变量 Serialize(CArchive&ar) void 序列化Operator=(const CUserInfo&userInfo) CUserInfo& 赋值函数表3.2成员变量名 称 类 型说 明 m_strNameCString名称m_strPasswordCstring密码

34、m_eStatusUSERSTATUE状态m_lIP DWORDI P地址m_timeCTime时间B数据包类设计 在程序中声明CChatPacket类描述服务器和客户端接收和发送的数据包。在该类中声明PACKETTYPE枚举类型。l MESSAGE:客户端发送的消息l USERLIST:用户列表l SERVERMSG:服务器发送的消息l UNKNOWN:未知类型表3-3:CChatPakcet类成员函数函 数 名 称返 回 值功 能 CChatPacket() 无 构造函数CChatPacket() 无 析够函数Init()Viod 初始化成员变量Serialize(CArchive &ar

35、)Void 序列化表3-4:CChatPacket类成员变量名 称 类 型 说 明m_type PACKETTYPE 包类型 m_UserInfo CUserInfo 用户信息 m_strMsg CString 消息 m _pUserList CObList* 用户链表 m_OfflineUserInfo CUserInfo 离线用户信息 m_time CTime 日期和时间4 系统实现4.1 服务器端设计实现4.1.1 服务器端静态类图 图4.1 服务器静态类图4.1.2 服务器主要类介绍l CServerDlg类:创建服务器主窗口,管理用户信息链表,管理在线用户链表,管理离线用户链表,读取

36、保存用户信息,读取保存离线消息等。表4.1类成员函数 函 数 名 称 返 回 值 功 能CserverDlg 无构造函数 CServerDlg() 无析构函数StartService() BOOL启动服务Init() BOOL初始化ProcessPendingRead(CArchive *pArchiveIn, CArchive *pArchiveOut,CClientSocket) BOOL接收数据ProcessPendingAccept() Void接受客户端连接请求ReleaseChatter(CClientSocket *pClientSocket) Void离线时删除用户Delete

37、Chatter(CClientSocket *pClientSocket) Void用户登陆密码错误时删除用户DeleteAllChatter() Void删除所有在线用户InitListCtrlSetting() Void定义链表控件InitUserList() Void初始化用户链表SaveUserList(const CObList &obList) Void保存用户信息LoadUserList(CObList &obList) Void读取用户消息SendUserList() Void发送用户链表CopyUserList(CObList &obList) Void复制用户链表Delet

38、eTempUserList(CObList &obList) Void删除临时链表UpdateUserList(constCUserInfo&userInfo,CClientSocket *pClientSocket) BOOL更新用户链表TransmitMsg(constCChatPacket&packet,CClientSocket*pClientSocket) BOOL转发离线消息UpdateServerListCtl(const CObList &obList) Void更新服务器界面OnInitDialog() BOOL初始化对话框OnRclickClientList(NMHDR*

39、pNMHDR,LRESULT*pResult)Void选择列表控件消息响应函数OnServerListDeleteMenuitem() Void 删除用户消息响应函数 SaveUserList(const CObList &obList)void保存用户信息SaveOfflineMsg(const CObList &obList)void保存离线消息l CListenSocket类 :派生于MFC的CSocket 类,用于接受客户端的连接请求,在该类中重写了CAsyncSocket类OnAccept()虚函数。当客户端连接服务器时,OnAccept()函数被调用。表4.2成员函数函 数 名 称

40、 返 回 值功 能CListenSocket(CServerDlg* pServerDlg) 无 构造函数 ClistenSocket() 无 析构函数VoidOnAccept(intnErrorCode) void 接受连接请求l CClientSocket 类:派生与MFC的CSocket类,用于接收客户端和向其发送数据。在该类中重写CAsyncSocket类OnReceive()和OnClose()虚函数。表4.3成员函数函 数 名 称 返 回 值 功 能CClientSocket(CServerDlg *pServDlg 无构造函数CClientSocket() 无析构函数Init()

41、 Void初始化SendUserList(CChatPacket *pPacket) Void发送用户列表SendUserMsg(CChatPacket *pPacket) Void发送消息SaveUserInfo(SOCKADDR_IN clientAddr) Void保存用户地址SaveUserInfo(constCUserInfo &userInfo) Void保存用户状态信息GetUserInfo() CUserInfo获取用户信息OnReceive(int nErrorCode) Void接收数据OnClose(int nErrorCode) Void关闭套接字l CServerAd

42、dressDlg: 用与设置服务器地址和断口。l CServerApp:用于生成唯一实例。4.1.3 服务器端主要过程介绍启动服务器:启动服务器的过程就是创建套接字并开始监听客户端连接的过程。主要函数: CSocket:Create()函数;执行过程: CSocket:Cretate -CAsyncSocket-CAsyncSocket-CAsyncSocket:Socket()-CAsyncSocket:Bind()-CAsyncSocket: AtachHandle()-CAsyncSocket:Asyncselect()MFC 的底部函数在AttachHandle()中完成,流程图4.2

43、所示: 图4-2 启动服务器流程服务器登陆如界面如图4-3所示: 图4.3 服务器登陆如界面初始化:l 列表试图控件初始化l 用户列表初始化l 读取离线消息;离线消息包括:发送消息的用户,接收消息的用户,接收和发送消息的时间接受客户端请求:CListenSocket:OnAccept()-CServerDlg:ProcessPendingAccept().接收数据:在FD_READ网络事件发生时,CClienSocket:OnReceive()被调用.在该函数中与CSocket, CArchive, CSocketFile 协同工作完成文件的工作,同时调用CSocket 类的Receive()

44、函数:图4.4接受过程流程图处理数据:l 保存离线消息l 保存用户信息l 更新用户列表更新用户列表的过程如图4.5: 图4.5 更新用户列表的过程l 发送用户链表l 转发离线消息l 更新服务器界面删除用户:l 显示快捷栏l 删除用户 图4.6 删除用户 图4.7 禁止删除用户用户离线:l 更新服务器用户列表中该用户信息l 将该用户从在线用户列表中删除l 通知在线用户更新该用户的状态l 更新服务器界面l 删除为该用户分配的内存空间退出:l 调用OnDestroy()函数l 保存用户信息l 保存离线消息l 清理资源4.2 客户端设计实现4.2.1 客户端静态类图图4.8 静态类图4.2.2 客户端

45、主要类介绍l CClientDlg类:创建客户端主窗口,创建聊天窗口,接收离线消息,发送离线消息和保存聊天记录等。表4.1成员函数 函 数 名 称返 回 值功 能 CClientDlg(CWnd *pParent=NULL) 无构造函数CClientDlg() 无析够函数Init() BOOL初始化InitListCtrlSetting() BOOL初始列表控件ConnectToServer() BOOL连接服务器BegingListen() BOOL监听ProcessPendingAccept() Void接受对方连接ProcessPendingRead() Void接受数据包SendPac

46、ket(CChatPacket &packet) Void发送数据ReadPacket() Void接收服务器数据UpdateClientListCtl() Void更新用户列表ShowOfflineMsg(CChatPacket *pPacket) Void显示离线消息CreateUserList(CObList *pObList) Void创建用户链表CreateChatDlg(CString *pChatDlg) Void创建聊天窗口SaveChatLog(CChatDlg *pChatDlg) Void保存聊天记录OnDblclkClientList(NMHDR *pNMHDR,LRE

47、SULT *pResult) Void双击列表视图控件的消息响应函数l CChatDlg类:编辑和显示消息。该类有三个构造函数用于创建3种不同情况下的窗口:(1) 用与主动与其他用户聊天。对方可以是在线,也可以是离线状态。(2) 显示离线消息窗口。(3) 被动聊天窗口,其他用户向该用户发起的聊天请求所创建的窗口。表4.2成员函数 函数名称返回值功能CChatDlg(CWnd *pParent=NULL)无被动聊天窗口CChatDlg(CWnd *pParent,const CUser &pPacketConst CUserInfo &userInfo)无在线/离线窗口CChatDlg(CWnd

48、 *pParent,CChatPacket *pPacket)无显示离线聊天窗口CChatDlg()无析构函数PreTranslateMessage(MSG *pMsg)BOOL处理键盘消息InitSocket()BOOL创建套接字ConnectToPeer()BOOL 连接对方ProcessPendingRead()Void接收数据DisplayRecvMessage(CChatPacket *pPacket)Void显示消息DisplayOfflineMessage(CChatPacket *pPacket)Void显示接收到的离线消息SendPeerMessage()Void发送消息In

49、itArchive()Void初始化读入对象etPeerInfo(CUserInfo &peerInfo)Void设置对方信息SetUserInfo(CUserInfo &userInfo)Void设置用户信息*GetChatSocket()Void返回CChatSocket指针DisPlaySentMessage(CChatPacket *pPacket)Void显示发送的离线消息OnDestroy()Void消息响应函数DisPlaySentMessage()Void显示发送的在线消息l CListenSocket类:派生与CSocket类,用于监听其他用户的连接请求,该类重写了OnAcc

50、ept()函数。l CChatSOcket类:派生与CSocket类,用于监听其他用户的通信,该类重写了OnReceive()函数;l CClientLoginDlg类:派生与CDialog类,用与创建服务器对话框。4.2.3客户端主要过程介绍客户端主要去实现的是功能:初始化,创建初始化窗口,接收窗口,接收离线聊天消息以及登陆控制。初始化:l 初始化列表l 图控件开始监听l 连接服务器,连接服务器的过程如图4.8所示 图4.8 登陆用户图 图4.9连接服务器创建聊天窗口如图4.10所示: 图4.10 创建聊天窗口在线聊天:l 按情况CChatDlg类构造函数l 连接对方l 发送消息l 接受消息

51、l 发送离线消息被动聊天:l 创建聊天窗口l 保存聊天记录 图4.11在线聊天图4-12 发送离线消息 图4.13接收离线消息4.3系统测试4.3.1 测试意义本章对我们的系统做具体的测试,验证系统的功能是否得以实现。4.3.2软件测试的目标(1).测试是为了发现程序中的错误而执行的程序的过程;(2).好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3) 成功的测试时发现了至今为止尚未发现的错误的测试。从上述规则可以看出,测试的正确定义是“为了发现程序中的错误而执行程序的过程”。正确认识测试是非常重要的,测试目标决定了测试方案的设计。没有发现错误的测试也是有价值的,完整的测试是评定

52、测试质量的一种方法。4.3.2软件测试的方法软件的测试分为两种:黑盒测试和白盒测试。黑盒测试:黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试地,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试。它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身有问题或规格说明的规定有误,用墨盒测试方法是发现不了

53、的。白盒测试:软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:1、对程序模块的所有独立的执行路径至少测试一遍。2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。3、在循环的边界和运行的界限内执行循环体。4、测试内部数据结构的有效性,等等。4.3.3 测试用例黑盒测试:主要是同学帮助一起测试系统的功能,看看

54、主要功能是否能得以实现。白盒测试:主要是在编写代码的过程中对各个类进行测试,检查各个类的功能是否实现,最后是对整个系统的测试,进一步检查各个类的功能。经过以上测试,系统基本完成所需功能。表格 4.3测试用例功能描述用户登录用例目的测试用户登录功能是否正常前提条件客户端程序和服务器端程序处于运行状态输入/动作期望的输出/相应实际情况示例1:输入正确的用户名、密 码、服务器IP和端口号用户成功登陆,关闭登陆窗体,弹出客户端主界面与期望输出相同示例2:不输入用户名密码、输入服务器IP和端口号提示用户“用户名不能为空!”或“密码不能为空!” 与期望输出相同示例3:输入正确的用户名、密码,输入错误服务器

55、IP和端口号用户登陆失败,提示连接服务器失败与期望输出相同示例4:输入错误的用户名或密码,输入正确服务器IP和端口号用户登录失败,提示用户名或密码输入错误与期望输出相同 总结与展望经过3个月紧张的毕业设计,局域网聊天软件已基本完成,系统基本功能已经实现,测试运行也完全正常。该系统完成了服务器端的配置与开启,客户端用户的注册、登陆、文字传送、发送离线消息的功能。该系统操作简便、易于使用。在毕业设计的初期阶段,我主要学习了与本课题相关的理论知识,包括:VC+的设置与开发,MFC下的软件开发过程等相关技术,socket编程技术和多线程开发技术,并完成客户端和服务器端文字信息传递实验。在查阅大量资料逐

56、渐了解系统需求后,我编写了系统的需求分析规格说明书和系统概要说明书。接着便进入了系统详细设计和编码阶段,在这个阶段,由于自己动手经验不足和对开发工具的陌生,系统遇到了很多大大小小的问题,比如如何向注册表中写入连接字符传,如何将所有留言状态置为已读,如何利用多线程、非堵塞I/O技术提高系统性能,在一次次克服困难的过程中,我得到了极大的锻炼,基本上掌握了一些的编程技巧,同时也获得了许多宝贵的软件开发经验和技巧,这为我今后的学习工作打下了坚实的基础。而这对我来说是一次丰富的收获。 在这段时间里我学到了很多以前没有学到的知识,同时也将以前所学过的知识运用到实践项目中,在提高理论知识的基础上,也充分地锻

57、炼了自己的动手能力。当然这个系统还存在许多有待完善之处:功能相对较少,有待于添加,比方说像文件传输,查找等功能。在文字传送的同时增加表情发送的功能;应使用户能够实现个人信息如昵称、密码等的修改;界面设计的不够精致美观。由于自己经验不足且时间有限,所以界面设计不尽人意;用户的权限设置应更加严谨,层次更加清晰,多功能的实现不同权限的用户对系统不同功能的操作。除了以上列举的一些不足之处外,此系统还有其它很多功能需要增强,由于个人水平有限,时间也比较紧,只能实现系统的基本操作,对其它功能我想更进一步的学习并完善。这次毕业设计的时间虽然不算太长,但使我对很多东西有了更深刻的认识。总结如下:查阅资料和阅读相关文献的重要性。向老师和同学请教的重要性。勤动手的重要性,在以前我总是有“只学不练”的倾向,导致动手能力得不到提高,在这次的一次次编写代码、调试代码的过程中,我才明白“代码不是写出来的,是调出来的”的道理。对待任何事情都要有耐心和恒心,遇到问题要冷静地思考,积极找出症结所在,逐个

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!