学士学位论文--基于局域网的即时通讯聊天室系统设计正文.doc
《学士学位论文--基于局域网的即时通讯聊天室系统设计正文.doc》由会员分享,可在线阅读,更多相关《学士学位论文--基于局域网的即时通讯聊天室系统设计正文.doc(42页珍藏版)》请在咨信网上搜索。
本科毕业设计(论文) 题 目 基于局域网的即时通讯聊天室系统设计 部 系 地方生部 专 业 电子信息工程 基于局域网的即时通讯聊天系统的设计 摘 要 随着计算机科学和Internet 的飞速发展, 网上聊天已成为人们相互交流的一种方式, 与E-mail、电话相比, 聊天服务更具有实时性和有效性。 本论文提出一个运行于VC平台上的局域网聊天软件的解决方案。该聊天软件包括服务器端和客户端两个模块,客户端通过服务器端进行通信。服务器端模块主要实现了服务器的配置和数据的传递;客户端模块主要实现了用户注册、登录、文字聊天等功能。该软件采用异步套接字的非阻塞模式,并实现对象的序列化和MFC文件对象实现数据的保存。 该软件能够帮助企业在局域网内搭建起自己的聊天系统,避免企业内部员工使用类似QQ等软件泄露内部信息,但是该软件只实现了聊天的基本功能,还有很多不足之处需要改进。 关键字:局域网、即时通信、套接字、异步模式 An instant messaging chat system based of LAN Abstract Along with the high-speed development of the computer science and Internet, 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 software includes two modules: the server and the client, which can communicate with each other. The server module mainly completes the sever device’s 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 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 other 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 III 目 录 摘 要 I Abstract II 1 概 述 1 1.1 系统现状 1 1.2 系统内容与目标 2 1.3 系统综述 2 2 系统开发环境和关键技术 3 2.1 开发环境 3 2.2 关键技术 3 2.2.1 .Visual C++和面向对象程序设计 3 2.2.2 M F C 4 2.2.3 WINDOWS SOCKETS网络编程接口 4 2.2.4 WSAAsyncSelect模型开发 5 2.2.5 TCP/IP协议、TCP协议 6 2.2.6 Client/Server结构(客户机/服务器模式) 8 3 系统分析与设计 9 3.1 系统分析 9 3.1.1 系统需求 9 3.1.2 需求分析 10 3.2 系统设计 11 3.2.1 设计原则 11 3.2.3 工作流程 12 3.2.4 功能设计 13 3.2.5 共享数据类设计 13 4 系统实现 16 4.1 服务器端设计实现 16 4.1.1 服务器端静态类图 16 4.1.2 服务器主要类介绍 16 4.1.3 服务器端主要过程介绍 19 4.2 客户端设计实现 25 4.2.1 客户端静态类图 25 4.2.2 客户端主要类介绍 25 4.2.3客户端主要过程介绍 27 4.3系统测试 32 4.3.1 测试意义 32 4.3.2软件测试的目标 32 4.3.2软件测试的方法 32 4.3.3 测试用例 33 总结与展望 34 参考文献 36 致 谢 37 1 概 述 近年来,随着全球信息化进程的不断发展,网络也在飞速发展。出于高效、快速地处理各种事务的目的,越来越多的企业在其内部使用局域网来进行工作。在内部局域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。然而,随着企业规模的扩大,业务量的增加,企业内部的信息越来越私密,企业只希望员工通过内部局域网进行沟通与交流,避免企业内部机密通过Internet泄露到外部。为了解决上述矛盾,人们提出了开发局域网聊天软件的构想,通过局域网聊天软件,企业员工可以随时的进行即时消息传递,召开网络会议等,有利于提高工作消息效率,同时又保护了企业内部信息的安全性。 本系统采用基于Socket的局域网通信工具的设计与实现的方法。基于Socket的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决企业内部局域网的各种通信需求。 基于Socket的局域网聊天工具很好地诠释了Socket通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。 基于Socket的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的应用前景。 1.1 系统现状 基于局域网的即时通信工具,实际上是互联网即时通信工具的一个小规模版本,广域网上的即时通信工具,如今一般采用UDP或者 TCP协议体系来实现 ,开发技术已经比较成熟,比如较早的ICQ,MSN Messenger, Yahoo。除了这些国外开发的产品,还有国产的有名的QQ,新浪UC,LAVA-LAVA等,这些工具统统都实现了广域网上的即时通信,尽管都是即时通信,实现了即时聊天,以及文件传输的主要功能,但是也各有各的特色,比如ICQ的巨大客户群,MSN的个性化表情,YAHOO通的易操作性等。而QQ也具有一个相当方便的屏幕截图功能,另外就是,所有上述软件都实现了网络即时的视频,语音聊天功能。这些软件,在使用方面各有特色,在实现方面也各有所长,但基于这些产品正在商业运营阶段,其实现方式属于商业机密,具体细节不一定得知,但是它在大的方面无非就是各种利用各种平台上的网络通信接口,建构基于下层TCP/IP,或者UDP协议的软件产品。 1.2 系统内容与目标 本课题主要研究的是局域网聊天软件,此聊天软件分为服务器程序和客户端程序,本课题的目标是能实现用户在客户端与服务器端传递文字信息。 主要研究开发内容是:熟悉C++和VC的操作,搭配系统开发平台,探索在此开发平台下,利用socket编程技术、多线程开发技术、TCP、UDP协议等进行局域网聊天软件的实际开发。 1.3 系统综述 现在,多渠道的信息源、网络化的数据分布、快捷医用的交互操作、智能化的分析决策等特点越来越成为衡量有两聊天软件的关键,因此,本人开发一个局域网聊天软件,该聊天软件是基于C++语言运行于VC平台上,利用的技术主要是Socket通信,使用配置文件作为数据管理。为实现和方便客户端间通信,在客户端进行了人性化的界面设计,用户可以注册号码,登陆界面,具有发送离线消息功能。 第1章对本次课题的背景及意义、课题现状、课题内容与目标进行了深入的阐述。 第 2 章介绍了系统的开发环境和关键技术,例如Socket编程技术,非阻塞开发模式等等。 第 3 章是系统分析与设计。将对系统进行需求分析,对组成系统的功能模块进行划分,对每个模块将要实现的功能进行阐述和说明。对系统的结构进行设计,设计共享数据结构。 第4章是系统实现,分别介绍了服务器端和客户端每个功能的执行过程,画出主要模块的流程图。 第 5 章介绍系统测试。 最后,对本设计进行归纳总结,全面阐述本次设计中的体会。 2 系统开发环境和关键技术 2.1 开发环境 我所设计的是一个面向中小型机构内部通信需求的局域网即时信息软件,要在短时间内开发出来并且要满足客户要求,无论是硬件还是软件都要选择合适,要求如下:开发设备应该完备;开发机器的性能必须稳定;操作系统的选择应该适当;开发出的程序可以在尽可能多的平台上运行;要求运行机配置尽可能低档。对此,我们选择的硬件环境和软件环境如下: 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++和面向对象程序设计 VC基于C,C++语言,主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC在 Windows平台无所不能。从20世纪70年代第一次提出面向对象的概念开始,到现在面向对象技术发展成为一种比较成熟的编程思想,通过面向对象技术,可以将现实世界直接影射到对象空间,从而为系统的设计和开发带来革命性的影响。Visual C++是一个典型的面向对象程序的设计语言,它也是目前为止功能最强、最受欢迎、应用最广泛、高效的Windows应用程序开发工具,它是在C 语言基础之上发展起来的,是C语言的超集。 Visual C++是功能最为强大可视化开发工具,它不仅支持传统的软件开发方法,更重要的是它能支持面向对象、可视化的开发风格。因此Visual C++又称作是一个集成开发工具,它提供了软件代码自动生成和可视化的资源编辑功能。Visual C++具有的优点:提供了面向对象的应用程序框架MFC(Microsoft Foundation Class),简化了程序员的编程工作,提高了模块的可重用性;提供了基于CASE技术的可视化软件的自动生成和维护工具AppWizard、ClassWizard、Visual Studio、WizardBar等,实现了直观、可视的程序设计风格,方便地编和管理各种类,维护程序的源代码;封装了Windows的API函数、USER、KERNEL、GDI函数,简化了编程时创建、维护窗口的许多复杂的工作。 2.2.2 M F C MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinDOS下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC 就是挂在它之上的一个辅助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的 软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的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网络编程接口 选定WINDOWS平台开发网络通信程序,可以选择WINDOWS的SOCKETS编程接口,Windows Sockets是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。Windows sockets无疑是我们进行网络编程的利器。所有的Windows Sockets实现都支持流套接口和数据报套接口。应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络 通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图2.1所示: 图2.1Windows Sockets实现通讯工作的各层关系图 2.2.4 WSAAsyncSelect模型开发 WSAAsyncSelect()调用允许应用程序程序注册一个或多个感兴趣的网络事件。这一API调用用来取代探寻网络I/O调用。在select()或非阻塞I/O例程(例如send()和recv())已经被调用或将要被调用的情况下都可以使用WSAAsyncSelect()调用。在这种情况下,在声明感兴趣的网络事件时,你必须提供一个通知时使用的窗口句柄。那么在你声明的感兴趣的网络事件发生时,对应的窗口将收到一个基于消息的通知。其过程如图2.2所示。 应用进程 WSAAsyncSelect 线程继续运行 Recv() 复制数据期间 阻塞 处理数据 内核 等待数据 数据准备好 复制数据 将数据复制到 拥护空间 完成复制 系统调用 返回 消息 系统调用 返回成功指示 图2.2WSAAsyncSelect模型 2.2.5 TCP/IP协议、TCP协议 网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。 IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。 如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。 UDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务. TCP和UDP服务通常有一个客户/服务器的关系。两个系统间的多重连接是这样相互确认并协调一致的,TCP或UDP连接唯一地使用每个信息中的如下四项进行确认: 源IP地址 发送包的IP地址。 目的IP地址 接收包的IP地址。 源端口 源系统上的连接的端口。 目的端口 目的系统上的连接的端口。 端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25。这些端口号是“广为人知”的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯,图如2.3所示。 2.3面向连接的(TCP)连接过程 2.2.6 Client/Server结构(客户机/服务器模式) Client/Server结构(C/S结构)是大家熟知的客户机和服务器结构。通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构。 C/S结构软件分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用。 C/S结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个: 只适用于局域网。而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。 3 系统分析与设计 3.1 系统分析 3.1.1 系统需求 聊天交流是目前互联网提供的主要内容。聊天系统有多种实现方式,类似ICQ属于一种点对点的聊天系统;还有一种是基于Socket的集中式聊天系统,这种聊天系统需要登陆统一的聊天服务器。在基于Socket的聊天系统中,主要有两种角色:服务器和客户端,不同的客户端登陆集中式的服务器,通过服务器将一个客户端发出的信息推送到其他所有客户端。 基于Socket的聊天系统最早实现是使用网页刷新方式,通过客户端不断地自动刷新,服务器端整个页面内容下载到客户端显示,这种方式的聊天速度慢,而且有刷屏现象,很快被更新的聊天技术所替代。 聊天系统在客户端和服务器之间主要传送的是文字信息,服务器端只需要把最近的文字信息推送到客户端,这样减少了网络传输内容,节省了网络传输的时间,无疑提高了聊天速度。这种“推”技术是目前基于Socket聊天系统的主要实现技术。 在基于Socket的聊天系统,客户端和服务器必须保持随时随地的连接。这有别于普通Web浏览的连接方式。在使用浏览器访问服务器时,先由客户端发出HTTP协议,然后服务器响应处理这个客户端的响应,再返回处理结果;请求(Request)和响应(Response)是一种一对一的前后因果关系。而在基于Socket的聊天系统中,客户端发出聊天信息的同时,客户端也在接受服务器发送过来的其他人的聊天信息,因此,请求和响应不存在那种前后对应关系,是两种分别独立进行的进程。因为服务器任何时候都可能发送信息到客户端,因此,客户端和服务器一旦建立连接,必须能让服务器在以后发送中寻找定位到这个连接。 局域网聊天系统使该系统的用户能够通过客户端登入到该系统,然后直接与系统交互。首先,需启动服务器,进行服务器的配置,进行正确的服务器配置和数据库连接并测试成功后,开启服务器。接下来,在客户端,该系统的用户能够通过登陆界面进入,然后直接与系统交互,进行文字传送。本系统支持的活动列表如下: (1) 配置服务器,设置IP及端; (2) 开启服务器; (3) 对离线用户进行删除管理; (4) 用户登陆系统; (5) 用户与系统交互,进行文字传送; (6) 用户好友登陆后,自动刷新列表; (7) 传送文字,当好友不在线时,发送离线消息; (8) 上线接收离线消息; 3.1.2 需求分析 该聊天程序分为服务器端和课户端两个部分。 客户端实现功能: (1) 向在线成员发送消息并接收消息。 (2) 更新成员状态。当其他成员上线或下线时,客户端及时更新成员状态。 (3) 更新成员列表,当其他成员加入或者偶成员被删除时,客户端及时更新成员列表。 (4) 当对方不在线时,可以向该成员发送离线消息。 (5) 当用户上线时,接受其他用户的离线消息。 (6) 保存聊天记录。 服务器端实现功能: (1) 维护聊天室成员列表:包括接受新成员,删除已有成员。 (2) 通知客户端更新成员状态。 (3) 通知客户端更新成员列表。 (4) 为离线用户保存离线消息。 (5) 验证密码。 (6) 禁止已登陆用户再次登陆。 (7) 保存用户信息。 (8) 为用户保存离线消息。 关系图如图3.1所示: Client Server Client Client Client 更新成员列表 成员列表 请求 应答 发送消息 图3.1 关系功能图 3.2 系统设计 3.2.1 设计原则 考虑到系统的可重用性和伸缩性,需要将本系统的网络通信底层和应用系统分离开。这样,基于可重用的网络通信层,可以实现其他各种实时性较高的应用系统。 本系统在架构设计上将分4个层次,如图3.2所示。 CAsyncSocket CSocket 聊天、游戏等应用系统 Window Sockets API 图3.2架构层次 本系统最底层是Socket通信层,将负责客户端和服务器之间快速的数据交换,它通过接口层和最上面应用层保持实时数据联系。用户从客户端进入到本系统前,将实现统一的用户登录验证机制。Socket底层设计分两大部分:协议设计和连接处理设计:协议设计和连接处理设计;CSocket层的目的是提供底层和应用蹭一个中介媒体的作用,但是不能设计得太复杂,以免延误数据传送时间。 3.2.3 工作流程 只有充分地了解了聊天程序的工作流程,才能对整个系统的理解更加深刻,聊天程序的工作流程如图3.5所示。 加载套接字库 初始化套接字 绑定本地机到套接字 向指定IP地址发送数据 关闭套接字库结束聊天 创建线程用于接受数据 图3.5聊天程序的工作流程 3.2.4 功能设计 局域网聊天系统以局域网内的用户为应用对象,经过各方面需求分析,该系统主要由服务器端和客户端两部分构成,各功能模块如图3-6所示。 局域网聊天系统 服务器 客户端 开启服务器 停止服务器 配置服务器 关闭服务器 发 送 离 线信息 登陆 文字传送 接收 离 线信息 用 户 管 理 图3-6局域网聊天系统功能模块图 3.2.5 共享数据类设计 A.用户设计: 1.用户状态设计 客户端与服务器端都拥有成员列表。该程序将成员列表设计为三种状态 登陆状态:当用户登陆服务器事,设置用户状态为登陆状态, 服务器根据该用户列表状态发送成员列表。 在线状态:用户在线,当两个用户都在线时,可以相互发送和接受成员列表。 离线状态:当用户离线时,不能发送和接受消息。 在线用户之间可以直接发送消息;对离线离线用户需要服务器转发。 转发关系如图3.7所示。 在线用户发送消息 在线用户给离线用户发送消息 图3.7转发关系图 B.用户类设计 在程序中声明CUserInfo信息类。在该类中声明USERSTATUE枚举类型,描述用户状态。 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) CUserInfo& 赋值函数 表3.2成员变量 名 称 类 型 说 明 m_strName CString 名称 m_strPassword Cstring 密码 m_eStatus USERSTATUE 状态 m_lIP DWORD I P地址 m_time CTime 时间 B.数据包类设计 在程序中声明CChatPacket类描述服务器和客户端接收和发送的数据包。在该类中声明PACKETTYPE枚举类型。 l MESSAGE:客户端发送的消息 l USERLIST:用户列表 l SERVERMSG:服务器发送的消息 l UNKNOWN:未知类型 表3-3:CChatPakcet类成员函数 函 数 名 称 返 回 值 功 能 CChatPacket() 无 构造函数 ~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 服务器静态类图 4.1.2 服务器主要类介绍 l CServerDlg类:创建服务器主窗口,管理用户信息链表,管理在线用户链表,管理离线用户链表,读取保存用户信息,读取保存离线消息等。 表4.1类成员函数 函 数 名 称 返 回 值 功 能 CserverDlg 无 构造函数 ~CServerDlg() 无 析构函数 StartService() BOOL 启动服务 Init() BOOL 初始化 ProcessPendingRead(CArchive *pArchiveIn, CArchive *pArchiveOut,CClientSocket) BOOL 接收数据 ProcessPendingAccept() Void 接受客户端连接请求 ReleaseChatter(CClientSocket *pClientSocket) Void 离线时删除用户 DeleteChatter(CClientSocket *pClientSocket) Void 用户登陆密码错误时删除用户 DeleteAllChatter() Void 删除所有在线用户 InitListCtrlSetting() Void 定义链表控件 InitUserList() Void 初始化用户链表 SaveUserList(const CObList &obList) Void 保存用户信息 LoadUserList(CObList &obList) Void 读取用户消息 SendUserList() Void 发送用户链表 CopyUserList(CObList &obList) Void 复制用户链表 DeleteTempUserList(CObList &obList) Void 删除临时链表 UpdateUserList(constCUserInfo&userInfo, CClientSocket *pClientSocket) BOOL 更新用户链表 TransmitMsg(constCChatPacket&packet, CClientSocket*pClientSocket) BOOL 转发离线消息 UpdateServerListCtl(const CObList &obList) 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 类,用于接受客户端的连接请求,在该类中重写了CAsyncSocket类OnAccept()虚函数。当客户端连接服务器时,OnAccept()函数被调用。 表4.2成员函数 函 数 名 称 返 回 值 功 能 CListenSocket(CServerDlg* pServerDlg) 无 构造函数 ~ClistenSocket() 无 析构函数 VoidOnAccept(intnErrorCode) void 接受连接请求 l CClientSocket 类:派生与MFC的CSocket类,用于接收客户端和向其发送数据。在该类中重写CAsyncSocket类OnReceive()和OnClose()虚函数。 表4.3成员函数 函 数 名 称 返 回 值 功 能 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(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:: AtachHandle()--àCAsyncSocket::Asyncselect() MFC 的底部函数在AttachHandle()中完成,流程图4.2所示: 图4-2 启动服务器流程 服务器登陆如界面如图4-3所示: 图4.3 服务器登陆如界面 初始化: l 列表试图控件初始化 l 用户列表初始化 l 读取离线消息;离线消息包括:发送消息的用户,接收消息的用户,接收和发送消息的时间 接受客户端请求: CListenSocket::OnAccept()---------àCServerDlg::ProcessPendingAccept().接收数据:在FD_READ网络事件发生时,CClienSocket::OnReceive()被调用.在该函数中与CSocket, CArchive, CSocketFile 协同工作完成文件的工作,同时调用CSocket 类的Receive()函数: 图4.4接受过程流程图 处理数据: l 保存离线消息 l 保存用户信息 l 更新用户列表 更新用户列表的过程如图4.5: 图4.5 更新用户列表的过程 l 发送用户链表 l 转发离线消息 l 更新服务器界面 删除用户: l 显示快捷栏 l 删除用户 图4.6 删除用户 图4.7 禁止删除用户 用户离线: l 更新服务器用户列表- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学士学位 论文 基于 局域网 即时通讯 聊天室 系统 设计 正文
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文