《基于局域网的即时通讯聊天室系统设计_毕业设计论文(30页).doc》由会员分享,可在线阅读,更多相关《基于局域网的即时通讯聊天室系统设计_毕业设计论文(30页).doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-基于局域网的即时通讯聊天室系统设计_毕业设计论文-第 23 页本科毕业设计(论文)题 目 基于局域网的即时通讯聊天室系统设计 部 系 地方生部 专 业 电子信息工程 学 员 王锋 指导教员 朱四华 中国人民解放军海军航空工程学院2010 年 5 月基于局域网的即时通讯聊天系统的设计摘 要随着计算机科学和Internet 的飞速发展, 网上聊天已成为人们相互交流的一种方式, 与E-mail、电话相比, 聊天服务更具有实时性和有效性。本论文提出一个运行于VC平台上的局域网聊天软件的解决方案。该聊天软件包括服务器端和客户端两个模块,客户端通过服务器端进行通信。服务器端模块主要实现了服务器的配置和数
2、据的传递;客户端模块主要实现了用户注册、登录、文字聊天等功能。该软件采用异步套接字的非阻塞模式,并实现对象的序列化和MFC文件对象实现数据的保存。 该软件能够帮助企业在局域网内搭建起自己的聊天系统,避免企业内部员工使用类似QQ等软件泄露内部信息,但是该软件只实现了聊天的基本功能,还有很多不足之处需要改进。关键字:局域网、即时通信、套接字、异步模式An instant messaging chat system based of LANAbstractAlong with the high-speed development of the computer science and Interne
3、t, chatting on line has been an important method in our communication. Comparing 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 softw
4、are includes two modules: the server and the client, which can communicate 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 async
5、hronous socket , And to achieve the object and MFC series documents the preservation 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 oth
6、er software such as QQ, but this software has only completed the basic function as a chatting system, so it need much more improvement.Key words:LAN 、Instant messaging、Socket、asynchronous modle目 录摘 要IAbstractII1 概 述11.1 系统现状11.2 系统内容与目标21.3 系统综述22系统开发环境和关键技术32.1 开发环境32.2 关键技术32.2.1 .Visual C+和面向对象程序
7、设计32.2.2 M F C42.2.3 WINDOWS SOCKETS网络编程接口42.2.4 WSAAsyncSelect模型开发52.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 客
8、户端设计实现254.2.1 客户端静态类图254.2.2 客户端主要类介绍254.2.3客户端主要过程介绍274.3系统测试324.3.1 测试意义324.3.2软件测试的目标324.3.2软件测试的方法324.3.3 测试用例33总结与展望34参考文献36致 谢371 概 述近年来,随着全球信息化进程的不断发展,网络也在飞速发展。出于高效、快速地处理各种事务的目的,越来越多的企业在其内部使用局域网来进行工作。在内部局域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。然而,随着企业规模的扩大,业务量的增加,企业内部的信息越来越私密,企业只希望员工通过内部局域网进行沟通与
9、交流,避免企业内部机密通过Internet泄露到外部。为了解决上述矛盾,人们提出了开发局域网聊天软件的构想,通过局域网聊天软件,企业员工可以随时的进行即时消息传递,召开网络会议等,有利于提高工作消息效率,同时又保护了企业内部信息的安全性。 本系统采用基于Socket的局域网通信工具的设计与实现的方法。基于Socket的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决企业内部局域网的各种通信需求。 基于Socket的局域网聊天工具
10、很好地诠释了Socket通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。 基于Socket的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的应用前景。 1.1 系统现状 基于局域网的即时通信工具,实际上是互联网即时通信工具的一个小规模版本,广域网上的即时通信工具,如今一般采用UDP或者 TCP协议体系来实现 ,开发技术已经比较成熟,比如较早的ICQ,MSN Messenger, Yahoo。除了这些
11、国外开发的产品,还有国产的有名的QQ,新浪UC,LAVA-LAVA等,这些工具统统都实现了广域网上的即时通信,尽管都是即时通信,实现了即时聊天,以及文件传输的主要功能,但是也各有各的特色,比如ICQ的巨大客户群,MSN的个性化表情,YAHOO通的易操作性等。而QQ也具有一个相当方便的屏幕截图功能,另外就是,所有上述软件都实现了网络即时的视频,语音聊天功能。这些软件,在使用方面各有特色,在实现方面也各有所长,但基于这些产品正在商业运营阶段,其实现方式属于商业机密,具体细节不一定得知,但是它在大的方面无非就是各种利用各种平台上的网络通信接口,建构基于下层TCP/IP,或者UDP协议的软件产品。1.
12、2 系统内容与目标本课题主要研究的是局域网聊天软件,此聊天软件分为服务器程序和客户端程序,本课题的目标是能实现用户在客户端与服务器端传递文字信息。主要研究开发内容是:熟悉C+和VC的操作,搭配系统开发平台,探索在此开发平台下,利用socket编程技术、多线程开发技术、TCP、UDP协议等进行局域网聊天软件的实际开发。1.3 系统综述现在,多渠道的信息源、网络化的数据分布、快捷医用的交互操作、智能化的分析决策等特点越来越成为衡量有两聊天软件的关键,因此,本人开发一个局域网聊天软件,该聊天软件是基于C+语言运行于VC平台上,利用的技术主要是Socket通信,使用配置文件作为数据管理。为实现和方便客
13、户端间通信,在客户端进行了人性化的界面设计,用户可以注册号码,登陆界面,具有发送离线消息功能。第1章对本次课题的背景及意义、课题现状、课题内容与目标进行了深入的阐述。第 2 章介绍了系统的开发环境和关键技术,例如Socket编程技术,非阻塞开发模式等等。第 3 章是系统分析与设计。将对系统进行需求分析,对组成系统的功能模块进行划分,对每个模块将要实现的功能进行阐述和说明。对系统的结构进行设计,设计共享数据结构。第4章是系统实现,分别介绍了服务器端和客户端每个功能的执行过程,画出主要模块的流程图。第 5 章介绍系统测试。最后,对本设计进行归纳总结,全面阐述本次设计中的体会。2 系统开发环境和关键
14、技术 2.1 开发环境我所设计的是一个面向中小型机构内部通信需求的局域网即时信息软件,要在短时间内开发出来并且要满足客户要求,无论是硬件还是软件都要选择合适,要求如下:开发设备应该完备;开发机器的性能必须稳定;操作系统的选择应该适当;开发出的程序可以在尽可能多的平台上运行;要求运行机配置尽可能低档。对此,我们选择的硬件环境和软件环境如下: 1、 硬件环境 处理器:Intel Pentium PIII或更高处理器 内存:256MB或更高 网络:局域网开发该系统应尽可能采用高档的硬件。因此,在应用时应采用更好的配置。2、 软件环境 操作系统:Windows 2000 /Windows XP / W
15、indows 2003 开发平台:Microsoft Visual C+ 6.0开发语言:C+2.2 关键技术2.2.1 .Visual C+和面向对象程序设计VC基于C,C+语言,主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC在 Windows平台无所不能。从20世纪70年代第一次提出面向对象的概念开始,到现在面向对象技术发展成为一种比较成熟的编程思想,通过面向对象技术,可以将现实世界直接影射到对象空间,从而为系统的设计和开发带来革命性的影响。Visual C+是一个典型的面向对象程序的设计语言,它也是目前为止功能
16、最强、最受欢迎、应用最广泛、高效的Windows应用程序开发工具,它是在C 语言基础之上发展起来的,是C语言的超集。Visual C+是功能最为强大可视化开发工具,它不仅支持传统的软件开发方法,更重要的是它能支持面向对象、可视化的开发风格。因此Visual C+又称作是一个集成开发工具,它提供了软件代码自动生成和可视化的资源编辑功能。Visual C+具有的优点:提供了面向对象的应用程序框架MFC(Microsoft Foundation Class),简化了程序员的编程工作,提高了模块的可重用性;提供了基于CASE技术的可视化软件的自动生成和维护工具AppWizard、ClassWizard
17、、Visual Studio、WizardBar等,实现了直观、可视的程序设计风格,方便地编和管理各种类,维护程序的源代码;封装了Windows的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作
18、为与VC+血肉相连的部分(注意C+和VC+的区别:C+是一种程序设计语言,是一种大家都承认的 软件编制的通用规范,而VC+只是一个编译器,或者说是一种编译器+源程序编辑器的IDE,WS,PlatForm,这跟Pascal和Delphi的关系一个道理,Pascal是Delphi的语言基础,Delphi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的 关系,Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言),MF
19、C同BC+集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微 软为VC+专配的.2.2.3 WINDOWS SOCKETS网络编程接口选定WINDOWS平台开发网络通信程序,可以选择WINDOWS的SOCKETS编程接口,Windows Sockets是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。Windows sockets无疑是我们进行网络编程的利器。所有的Windows Sockets实现都支持流套接口和数据报套接口。应用程序调用Win
20、dows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图2.1所示: 图2.1Windows Sockets实现通讯工作的各层关系图2.2.4 WSAAsyncSelect模型开发WSAAsyncSelect()调用允许应用程序程序注册一个或多个感兴趣的网络事件。这一API调用用来取代探寻网络I/O调用。在select()或非阻塞I/O例程(例如send()和recv())已经被调用或将要被调用的情况下都可以使用WSAAsyncSelect()调用。在这种情况下,在声明感兴趣的网络事件时,
21、你必须提供一个通知时使用的窗口句柄。那么在你声明的感兴趣的网络事件发生时,对应的窗口将收到一个基于消息的通知。其过程如图2.2所示。应用进程WSAAsyncSelect线程继续运行 Recv()复制数据期间阻塞处理数据 内核 等待数据数据准备好复制数据将数据复制到拥护空间 完成复制系统调用返回消息系统调用返回成功指示 图2.2WSAAsyncSelect模型2.2.5 TCP/IP协议、TCP协议网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。 IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层-TCP或UDP层;相反,IP层也把从TCP或
22、UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向上传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。UDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询-应答的服务.TCP和UDP服务通常有一个客
23、户/服务器的关系。两个系统间的多重连接是这样相互确认并协调一致的,TCP或UDP连接唯一地使用每个信息中的如下四项进行确认: 源IP地址 发送包的IP地址。 目的IP地址 接收包的IP地址。源端口 源系统上的连接的端口。 目的端口 目的系统上的连接的端口。端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25。这些端口号是“广为人知”的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯,图如2.3所示。 2.3面向连接的(TCP)连接过程2.2.6 Client/Server结构(客户
24、机/服务器模式)Client/Server结构(C/S结构)是大家熟知的客户机和服务器结构。通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构。C/S结构软件分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用。C/S结构的优点是能充分
25、发挥客户端的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个:只适用于局域网。而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。3 系统分析与设计 3.1 系统分析3.1.1 系统需求聊天交流是目前互联网提供的主要内容。聊天系统有多种实现方式,类似ICQ属于一种点对点的聊天系统;还有一种是基于Socket的集中式聊天系统,这种聊天系统需要登陆统一的聊天服务器。在基于Socket的聊天系统中,主要有两种角色:服务器和客户端,不同的客
26、户端登陆集中式的服务器,通过服务器将一个客户端发出的信息推送到其他所有客户端。基于Socket的聊天系统最早实现是使用网页刷新方式,通过客户端不断地自动刷新,服务器端整个页面内容下载到客户端显示,这种方式的聊天速度慢,而且有刷屏现象,很快被更新的聊天技术所替代。 聊天系统在客户端和服务器之间主要传送的是文字信息,服务器端只需要把最近的文字信息推送到客户端,这样减少了网络传输内容,节省了网络传输的时间,无疑提高了聊天速度。这种“推”技术是目前基于Socket聊天系统的主要实现技术。在基于Socket的聊天系统,客户端和服务器必须保持随时随地的连接。这有别于普通Web浏览的连接方式。在使用浏览器访
27、问服务器时,先由客户端发出HTTP协议,然后服务器响应处理这个客户端的响应,再返回处理结果;请求(Request)和响应(Response)是一种一对一的前后因果关系。而在基于Socket的聊天系统中,客户端发出聊天信息的同时,客户端也在接受服务器发送过来的其他人的聊天信息,因此,请求和响应不存在那种前后对应关系,是两种分别独立进行的进程。因为服务器任何时候都可能发送信息到客户端,因此,客户端和服务器一旦建立连接,必须能让服务器在以后发送中寻找定位到这个连接。局域网聊天系统使该系统的用户能够通过客户端登入到该系统,然后直接与系统交互。首先,需启动服务器,进行服务器的配置,进行正确的服务器配置和
28、数据库连接并测试成功后,开启服务器。接下来,在客户端,该系统的用户能够通过登陆界面进入,然后直接与系统交互,进行文字传送。本系统支持的活动列表如下:(1) 配置服务器,设置IP及端;(2) 开启服务器;(3) 对离线用户进行删除管理;(4) 用户登陆系统;(5) 用户与系统交互,进行文字传送;(6) 用户好友登陆后,自动刷新列表;(7) 传送文字,当好友不在线时,发送离线消息;(8) 上线接收离线消息;3.1.2 需求分析该聊天程序分为服务器端和课户端两个部分。客户端实现功能:(1) 向在线成员发送消息并接收消息。(2) 更新成员状态。当其他成员上线或下线时,客户端及时更新成员状态。(3) 更
29、新成员列表,当其他成员加入或者偶成员被删除时,客户端及时更新成员列表。(4) 当对方不在线时,可以向该成员发送离线消息。(5) 当用户上线时,接受其他用户的离线消息。(6) 保存聊天记录。服务器端实现功能:(1) 维护聊天室成员列表:包括接受新成员,删除已有成员。(2) 通知客户端更新成员状态。(3) 通知客户端更新成员列表。(4) 为离线用户保存离线消息。(5) 验证密码。(6) 禁止已登陆用户再次登陆。(7) 保存用户信息。(8) 为用户保存离线消息。关系图如图3.1所示:ClientServerClientClientClient更新成员列表成员列表请求应答发送消息 图3.1 关系功能图
30、3.2 系统设计3.2.1 设计原则考虑到系统的可重用性和伸缩性,需要将本系统的网络通信底层和应用系统分离开。这样,基于可重用的网络通信层,可以实现其他各种实时性较高的应用系统。本系统在架构设计上将分4个层次,如图3.2所示。CAsyncSocketCSocket聊天、游戏等应用系统Window Sockets API 图3.2架构层次本系统最底层是Socket通信层,将负责客户端和服务器之间快速的数据交换,它通过接口层和最上面应用层保持实时数据联系。用户从客户端进入到本系统前,将实现统一的用户登录验证机制。Socket底层设计分两大部分:协议设计和连接处理设计:协议设计和连接处理设计;CSo
31、cket层的目的是提供底层和应用蹭一个中介媒体的作用,但是不能设计得太复杂,以免延误数据传送时间。3.2.3 工作流程只有充分地了解了聊天程序的工作流程,才能对整个系统的理解更加深刻,聊天程序的工作流程如图3.5所示。加载套接字库初始化套接字绑定本地机到套接字向指定IP地址发送数据关闭套接字库结束聊天创建线程用于接受数据图3.5聊天程序的工作流程3.2.4 功能设计局域网聊天系统以局域网内的用户为应用对象,经过各方面需求分析,该系统主要由服务器端和客户端两部分构成,各功能模块如图3-6所示。局域网聊天系统服务器客户端开启服务器停止服务器配置服务器关闭服务器发送离线信息登陆文字传送接收离线信息用
32、户管理图3-6局域网聊天系统功能模块图3.2.5 共享数据类设计A用户设计:1用户状态设计客户端与服务器端都拥有成员列表。该程序将成员列表设计为三种状态登陆状态:当用户登陆服务器事,设置用户状态为登陆状态, 服务器根据该用户列表状态发送成员列表。在线状态:用户在线,当两个用户都在线时,可以相互发送和接受成员列表。离线状态:当用户离线时,不能发送和接受消息。在线用户之间可以直接发送消息;对离线离线用户需要服务器转发。转发关系如图3.7所示。 在线用户发送消息 在线用户给离线用户发送消息 图3.7转发关系图B用户类设计 在程序中声明CUserInfo信息类。在该类中声明USERSTATUE枚举类型
33、,描述用户状态。l ONLINE:在线状态l OFFLINE:离线状态l LOGIN:登陆状态l UNKNOWN:未知状态,初始化状态。成员函数如表3.1CUserInfo 成员函数,类成员变量如表3-2所示。表3.1成员函数函 数 名 称返 回 值 功 能 CUserInfo() 无 构造函数CUserInfo(constCUserInfo&userInfo) 无 复制构造数CUserInfo () 无 析构函数 Init() Void初始成员变量 Serialize(CArchive&ar) void 序列化Operator=(const CUserInfo&userInfo) CUser
34、Info& 赋值函数表3.2成员变量名 称 类 型说 明 m_strNameCString名称m_strPasswordCstring密码m_eStatusUSERSTATUE状态m_lIP DWORDI P地址m_timeCTime时间B数据包类设计在程序中声明CChatPacket类描述服务器和客户端接收和发送的数据包。在该类中声明PACKETTYPE枚举类型。l MESSAGE:客户端发送的消息l USERLIST:用户列表l SERVERMSG:服务器发送的消息l UNKNOWN:未知类型表3-3:CChatPakcet类成员函数函 数 名 称返 回 值功 能 CChatPacket(
35、) 无 构造函数CChatPacket() 无 析够函数Init()Viod 初始化成员变量Serialize(CArchive &ar)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 服务器静态
36、类图4.1.2 服务器主要类介绍l CServerDlg类:创建服务器主窗口,管理用户信息链表,管理在线用户链表,管理离线用户链表,读取保存用户信息,读取保存离线消息等。表4.1类成员函数 函 数 名 称 返 回 值 功 能CserverDlg 无构造函数 CServerDlg() 无析构函数StartService() BOOL启动服务Init() BOOL初始化ProcessPendingRead(CArchive *pArchiveIn, CArchive *pArchiveOut,CClientSocket) BOOL接收数据ProcessPendingAccept() Void接受客
37、户端连接请求ReleaseChatter(CClientSocket *pClientSocket) Void离线时删除用户DeleteChatter(CClientSocket *pClientSocket) Void用户登陆密码错误时删除用户DeleteAllChatter() Void删除所有在线用户InitListCtrlSetting() Void定义链表控件InitUserList() Void初始化用户链表SaveUserList(const CObList &obList) Void保存用户信息LoadUserList(CObList &obList) Void读取用户消息Se
38、ndUserList() Void发送用户链表CopyUserList(CObList &obList) Void复制用户链表DeleteTempUserList(CObList &obList) Void删除临时链表UpdateUserList(constCUserInfo&userInfo,CClientSocket *pClientSocket) BOOL更新用户链表TransmitMsg(constCChatPacket&packet,CClientSocket*pClientSocket) BOOL转发离线消息UpdateServerListCtl(const CObList &ob
39、List) Void更新服务器界面OnInitDialog() BOOL初始化对话框OnRclickClientList(NMHDR* pNMHDR,LRESULT*pResult)Void选择列表控件消息响应函数OnServerListDeleteMenuitem() Void 删除用户消息响应函数 SaveUserList(const CObList &obList)void保存用户信息SaveOfflineMsg(const CObList &obList)void保存离线消息l CListenSocket类 :派生于MFC的CSocket 类,用于接受客户端的连接请求,在该类中重写了C
40、AsyncSocket类OnAccept()虚函数。当客户端连接服务器时,OnAccept()函数被调用。表4.2成员函数函 数 名 称 返 回 值功 能CListenSocket(CServerDlg* pServerDlg) 无 构造函数 ClistenSocket() 无 析构函数VoidOnAccept(intnErrorCode) void 接受连接请求l CClientSocket 类:派生与MFC的CSocket类,用于接收客户端和向其发送数据。在该类中重写CAsyncSocket类OnReceive()和OnClose()虚函数。表4.3成员函数函 数 名 称 返 回 值 功
41、能CClientSocket(CServerDlg *pServDlg 无构造函数CClientSocket() 无析构函数Init() Void初始化SendUserList(CChatPacket *pPacket) Void发送用户列表SendUserMsg(CChatPacket *pPacket) Void发送消息SaveUserInfo(SOCKADDR_IN clientAddr) Void保存用户地址SaveUserInfo(constCUserInfo &userInfo) Void保存用户状态信息GetUserInfo() CUserInfo获取用户信息OnReceive(
42、int nErrorCode) Void接收数据OnClose(int nErrorCode) Void关闭套接字l CServerAddressDlg: 用与设置服务器地址和断口。l CServerApp:用于生成唯一实例。4.1.3 服务器端主要过程介绍启动服务器:启动服务器的过程就是创建套接字并开始监听客户端连接的过程。主要函数: CSocket:Create()函数;执行过程: CSocket:Cretate -CAsyncSocket-CAsyncSocket-CAsyncSocket:Socket()-CAsyncSocket:Bind()-CAsyncSocket: AtachH
43、andle()-CAsyncSocket:Asyncselect()MFC 的底部函数在AttachHandle()中完成,流程图4.2所示:图4-2 启动服务器流程服务器登陆如界面如图4-3所示: 图4.3 服务器登陆如界面初始化:l 列表试图控件初始化l 用户列表初始化l 读取离线消息;离线消息包括:发送消息的用户,接收消息的用户,接收和发送消息的时间接受客户端请求:CListenSocket:OnAccept()-CServerDlg:ProcessPendingAccept().接收数据:在FD_READ网络事件发生时,CClienSocket:OnReceive()被调用.在该函数中
44、与CSocket, CArchive, CSocketFile 协同工作完成文件的工作,同时调用CSocket 类的Receive()函数:图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 清理资源