收藏 分销(赏)

本科毕业论文---聊天系统.doc

上传人:可**** 文档编号:2797098 上传时间:2024-06-06 格式:DOC 页数:32 大小:143KB
下载 相关 举报
本科毕业论文---聊天系统.doc_第1页
第1页 / 共32页
本科毕业论文---聊天系统.doc_第2页
第2页 / 共32页
本科毕业论文---聊天系统.doc_第3页
第3页 / 共32页
本科毕业论文---聊天系统.doc_第4页
第4页 / 共32页
本科毕业论文---聊天系统.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、摘 要本文详细论述了在线聊天系统的开发和实现过程,从需求分析、系统功能分析、系统功能模块设计、系统功能的实现和运行调试等几大方面叙述了该管理系统的性能及功能的实现,其中也包括了在开发过程中出现的问题难点及解决方案等信息。本系统是在Windows2000下使用现在流行的编程工具Visual C+开发。以Visual C+的MFC(微软基本类库)作为基本的的开发基础。本系统使用Socket套接字作为开发的应用程序开发模型,使用Sockets原型开发,可以方便的建立连接,数据传输,和断开连接,从而实现网络在线聊天系统的在线好友查找,发送消息和接收消息.本文详细的介绍了网络在线聊天系统的开发背景、开发

2、工具、运行环境的选择,系统功能分析,客户端和服务器端的建立连接、消息的发送、消息的接收、消息的处理和断开连接、界面设计和功能实现方面的信息,并详细说明了在开发过程中的遇到的难点和问题,本系统实现了在用户需求分析阶段所提出的所有要求,用户可以随时和服务器建立和断开连接。方便的连接和断开连接的方法是Socket的优点所在。关键字:网络、通信、套接字、连接目录序言.1第一章 VisualC+及Socket套接字介绍.3 一 VisualC+ 介绍.3 二 Socket套接字介绍.4 第二章 软件需求分析.14 一 系统客户要求.14 二 系统详细设计.15三 系统开发目标.16四 系统开发思路.16

3、五 需求总结.17第三章 系统具体实现.20一 概要设计.20二 定义服务器端和客户端的通信结构及含义.21 三 服务器端的实现流图.24四 客户端的实现流图.28第四章 系统测试 .29第五章 系统运行和维护.31第六章 结束语.32参考文献.33序 言随着现代技术的不断输入和信息化的广泛普及,网络作为一种新兴事物,在近些年得到了前所未有的普及和深入,网络上的各种应用层出不穷,给各个阶层、各个年龄段的用户提供了不同的个性化的服务。而现代中小型企业的领导认识到进一步提高企业信息化的必要性。为使企业能在瞬息万变的信息时代生存下去,适应激烈的市场竞争,现代企业要求正加员工之间的交流和通信能力,尤其

4、是领导和员工之间的共同能力,实时的交流系统就是在这种条件下诞生的。系统开发是一个十分复杂的系统工程。这里对系统开发的基本过程和方法进行介绍,列出相关文档的示例并加以说明。网络通信是网络应用的重要体现方面。网上即时通信则是网络应用的重要体现方面。本聊天系统主要应用于小型企业,学校或小型局域网内部使用。本应用程序使短距离交流更加快捷和便利。更能高效率的体现现代即时通信的特点。本系统能够满足中小型企业,学校的内部网络即时通信的需要,在内部网络正常环境的运营下,提供即时通信的能力,本系统使用Visual C+开发,本系统能够为中小型企业协同工作,相互间的交流提供了有力的工具,运用在局域网的本系统,能够

5、为企业员工的交流提供帮助,有利于提高工作效率,第一章 VisualC+及Socket套接字介绍一 Visual C 介绍和其他编程工具相比,Visual C+在提供可视化编程方法的同时,适应于编写直接对系统进行底层操作的程序.其生成代码的质量,也要优于许多其他开发工具.Visual C+所提供的MFC(Microsoft基本类库),对Window98/NT/2000所用的Win32 API(应用程序接口)进行了彻底的封装,这使得可以使用完全的面向对象的编程方法来进行Windows程序的开发,并能够大大缩短程序的开发周期,降低开发成本,把Windows程序员从大量复杂的劳动中解放出来.Visua

6、l C+给应用程序的开发人员提供了丰富的功能,Visual C+通过MFC库提供了一个完整的应用程序的骨架,开发人员可以忽略应用程序的入口点和结束地点,并且可以忽略消息在应用程序的流动顺序,通过MFC的支持Visual C+也提供了Document-View(文档视图)的应用程序的结构,开发人员可以将数据保存在Document类的对象上,而在屏幕的显示的数据由View类的对象来负责。通过MFC的支持Visual C+也实现了面向对象领域的RTTI(RunTime Type Information 运行时类型识别)、Dynamic Creation(动态创建)、(Persitence)永久保存机

7、制,同时他也实现了Windows下的Message Mapping(消息映射)和Command Routing(命令传递),通过MFC的Cdatabase和Crecordset类Visual C+可以实现数据库的应用,通过ChtmlStream、CHttpFilter、CHttpFilterContext、ChttpServer等ISAPI(Internet Server API)可以很好的支持Internet上的http协议相关的操作。由于MFC涉及到应用程序开发的各个领域,其Visual C+成为倍受欢迎的开发工具。二 Socket套接字介绍Winsock是一套开放的,支持多种协议的Win

8、dows下网络编程接口,是Windows网络编程实是上的标准.应用程序通过调用Winsock的API实现相互间的通信,而Winsock利用下层的网络通信协议功能和操作系统调用实现实际的通信工作.1 套接字(Sockets)套接字是通信的基石,是支持TCP/IP协议的网络通信的操作单元.可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面.套接字存在于通信域中.通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念.套接字通过通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序).Winsock规范支持单一的通信

9、域,即Internet域.各种进程使用这个域互相之间用Internet协议簇来进行通信(Winsock 1.1以上的版本支持其他的域)。套接字可以根据通信性质分类,这种性质对于用户时可见的.应用程序一般仅在同一类的套接字间通信.不过只要底层的通信协议允许,不同类型的套接字间也照样可以通信进入九十年代后,随着计算机和网络技术的发展,很多数据处理系统都采用开放系统结构的客户机/服务器网络模式,即客户机提出任务请求,通过网络发送给服务器,由服务器做相应处理,执行被请求的任务,然后将结果返回给客户机。例如:银行ATM的前置机和数据处理的主机之间即构成客户机/服务器网络模式;电话银行的前置机和银行数据处

10、理机之间也构成这种网络模式结构等。这样,如何在前置机和数据主机之间进行信息交换,即进程网络通信,就成为实现这种网络模式的基础。而TCP/IP的套接字技术是解这一问题的有力工具。它从提出时就一直发挥着愈来愈重要的作用,并已成为UNIX操作系统下TCP/IP网络编程标准;甚至WINDOW、JAVA都配有它的通用接口。有了这个强有力的工具,我们可以实现异种机、异种操作系统应用程序间的相互连接和通信。套接字(sockets)是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点。它构成了在单个主机内及整个网际间的编程界面。一般来说,跨机应用进程之间要在网络环

11、境下进行通信,必须要在网络的每一端都要建立一个套接字,两个套接字之间是可以建立连接的,也是可以无连接的,并通过对套接字的“读”、“写”操作实现网络通信功能。类似于UNIX系统中的I/O概念,像文件那样有打开、读、写、关闭的方式。根据传输数据类型的不同,套按字可分为面向连接的数据套接字(streamsockets)和无连接的数据报套接字(datagramsockets)两种类型:(1)字节流套接字字节流不按记录定界,在TCP/IP协议簇中对应TCP协议,即传输控制协议(TransmitionControlProtocol)。它是一个提供给用户进程可靠的全双工的面向连接的协议,大多数INTERNE

12、T应用程序如ftp、telnet使用TCP协议。通信端点使用TCP对应的INTERNET地址互相连接,可保证按正确的顺序以及单一和可靠的地址传输数据。由于它是字节流,所以包长包没有限制,信包传输也不重复,因而是一种常用的套接字类型。流套接字提供双向的,有序的,无重复并且无记录边界的数据流服务,它适应于处理大量数据.网络传输层可以将数据分散或集中到合适尺寸的数据包中。 (2)数据报套接字数据报对应记录型数据流,在TCP/IP协议簇中对应UDP协议,即用户数据报协议(UserDatagramProtocol)。利用数据报服务可实现一些简单的网络服务,如网点检测程序PING。由于不建立连接,数据报协

13、议比连接协议快。但不能保证所有数据都准确有序地到达目的地。不保证顺序性、可靠性和无重复性。它是无连接的服务,以独立的信包进行传输,通信端点使用UDP对应的INTERNET地址。双方不需互连,按固定的最大长度进行传输,因而适用于单个报文传输,或较小文件的传输。数据报套接字支持双向的数据流,但不保证数据传输的可靠性,有序性,和无重复性.也就是说,一个从数据报套接字接受信息的进程有可能发现信息重复,或者和发出时间顺序不同的情况.此外,数据报套接字的一个重要特点是它保留了记录边界。2套接字的编程要点及过程不论何种套接字编程,均采用客户机/服务器方式,其运作过程基本类似,限于篇幅,这里仅介绍字节流套接字

14、。字节流套按字的服务进程和客户进程,在通信前必须创建各自的套接字以建立连接,然后对相应的套接字进行“读”、“写”操作,实现信息的交换。服务器进程创建套接字。服务进程总是先于客户进程启动,服务进程首先调用socket()函数创建自已端的一个字节流套接字,并提供三个参数:网络地址类型,一般取AF_INEF(AdressfamilyInterNET);套接字类型,这里取SOCK_STREAM;网络协议,缺省为TCP/IP协议,对应参数为0。给套接字地址变量赋初值。在生成套接字后,要用服务器的地址先对sockaddr_in结构变量赋初值。sockaddr_in它只适用INTERNET地址类型,含有IN

15、TERNET套接字地址类型、IP端口号、IP地址等信息。地址类型可取定为AF_INET,IP地址对服务器可取任意合法地址INADDR_ANY。IP端口号可由用户设定,但要注意主机字节顺序向网络字节顺序的转换。给套接字命名。由socket()函数创建的套接字是没有名字的。所谓命名,就是用bind()函数将服务器地址捆绑到创建的套接字上。服务器进程准备接受来自客户机的连接请求。首先调用listen()函数,让服务器进程进入监听状态;然后调用accept()函数,准备接受客户机的连接信号。无连接请求时,服务进程被阻塞。客户进程调用socket()函数创建已端的套接字。给客户端的sockaddr_in

16、结构体变量赋值。地址类型仍可取AF_INET,端口号和服务器方的端口号相同,欲连服务器的地址通过调用inet_addr()转换得到。也可通过gethostbyname()函数将名字转换为指向hostent结构变量的指针,再将hostent结构变量的地址成员用bcopy()复制到sockaddr_in结构变量上。客户方调用connect()函数向服务进程发出连接请求。当连接请求到来后,被阻塞服务进程的accpet()函数生成一个新的字节流套接字,并返回客户机的sockaddr_in结构变量,从而在服务器应用程序中用新的被赋予客户机地址的套接字同客户进程进行连接,然后向客户方返回接受信号。一旦客户

17、机的套接字收到来自服务器的接受信号,则表示客户机与服务器双方已实现连接。任一方均可向对方发送,也可接收对方发来的数据。这既可通过send()、recv()函数来实现。也可通过read()、write()函数来交换数据。服务进程和客户进程可通过调用shutdown()和colse()关闭套接字上的所有发送和接收操作,撤销套接字并中断连接3 基本概念(1)带外数据带外数据,也称为TCP紧急数据,它是相连的每一对流套接字间的一个逻辑上独立的传输通道,带外数据是独立于普通数据传输给用户的,这一抽象要求带外数据设备必须支持每一时刻仅有一个带外数据信息等候发送。对于仅支持带外数据的通信协议来说(例如紧急数

18、据是与普通数据在同一序列发送),系统通常把紧急数据从普通数据中分离出来单独存放。这就允许用户可以在顺序接受紧急数据和非顺序接收紧急数据之间作出选择。(2)广播数据报套接字可以用来向许多系统支持的网络发送广播数据包。要实现这种功能,网络必须支持广播功能。为此系统软件并不提供对广播功能的任何模拟。广播信息将会给网络造成极重的负担,为此它们要求网络上的每台主机都为他们服务,所以发送广播数据包的能力被限制于那些用显式标记了允许广播的套接字中。广播通常应用于以下两种情况:l 一个应用程序希望在本地网络中找到一个资源。而应用程序对该资源的地址又没有任何先验的知识。l 一些重要功能,例如路由要求把它们的信息

19、发送给所有可以找到的邻机。被广播信息的目的地址取决于这一信息将在何种网络上广播。Internet域中支持一个速记地址INADDR_BROADCAST用于广播。由于使用广播以前必须绑定一个数据包套接字,所以所有收到的广播消息都带有发送者的地址和端口。(3)字节顺序不同的计算机有时使用不同的字节顺序存储数据。例如,基于Intel处理器的计算机和Macintosh计算机使用了相反的字节排序顺序。Intel的字节顺序被成为“Little-Endian”,它与网络的字节排序顺序“Big-Endian”排序顺序相反。任何从Winsock函数对IP地址和端口号的引用和传送给Winsock函数的IP地址和端口

20、号均是按照网络顺序组织的,这也包括了sockaddr_in这一数据结构中的IP地址域和端口域考虑到一个应用程序通常用与“时间”服务对应的端口来和服务器连接,而服务器提供某些机制来通知用户使用另一端口。为此getservbyname函数返回的端口已经是网络顺序了,可以直接使用来组织成一个地址,而不需要进行转换。然而如果从主机顺序转换成网络顺序。相应地,如果应用程序希望显示包含于某一地址中地端口号,则这一端口号就必须在被显示前从网络顺序转换到主机顺序。(4)阻塞和非阻塞套接字可以处于阻塞模式或非阻塞模式。调用任何一个阻塞模式地函数,都回产生相同地后果-耗费或长或短地时间等待操作地完成。而当套接字处

21、于非阻塞模式时,API函数的调用会立即返回,大多数情况这些调用都回“失败”,并返回一个WASEWOULDBLOCK的错误,它意味着请求的操作在调用期间没有时间完成。Winsock的套接字I/O模型可以帮助应用程序判断一个套接字何时可供读写.套接字的行为在Windows 9X 和Windows NT中与在 Windows 3.1中不同.在32位操作系统中,可以采用多线程编程,在不同的线程中使用套接字,这样即使某个线程中的套接字被阻塞,也不会影响应用程序的其他操作,同时也不会在阻塞线程上耗费CPU时间。(5) Winsock编程原理进入20世纪90年代后,随着计算机和网络技术的发展,很多数据处理系

22、统都采用开放系统结构的客户机/服务器(Client/Server)网络模型,即客户机向服务器提交请求,服务器对请求做相应的处理兵执行被请求的任务,然后将结构返回给客户机。这种方式隐含了在建立客户机/服务器间通信是的非对称性。客户机/服务器模型工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供(或被接受),这一套惯例包含了一套协议,它必须在通信的两头都被实现。根据不同的实际情况,协议可能是对称的或非对称的。在对称的协议中每一方都有可能扮演主从角色;在非对称协议中一方被不可改变地认为是主机,而另一方则是从机。一个对称协议地例子是Internet中用于终端仿真地Telnet,而非对称协

23、议地例子是Internet中的http。无论具体的协议是对称的或是非对称的,当服务被提供时必然存在客户进程和服务进程。 (6) MFC Windows Socket类Visual C+对众多的socket函数进行了封装,MFC提供的封装类是:CAsyncSocket和CSocket类,它们使编程工作变得相对简单尤其是CSocket类:l CAsyncSocket类所提供的唯一的抽象就是将与套接字相联系的Windows消息以回调函数的形式表示,因此它带来的唯一方便就是程序员无需自行处理Winsock的I/O模型,而对于如阻塞处理、字节顺序差异以及Unicode等依然负有责任并有灵活的控制权。l

24、CSocket类是CAsyncSocket类的派生类,它提供了对通过Carchive对象使用套接字工作的更高级抽象。CSocket类的使用比CAsynCSocket类更加容易,它继承了CAsyncSocket类的许多封装了API的成员函数,并且管理了通信的大多数方面,这使得用户从原来不得不使用原始API或者CAsyncSocket类的烦杂的工作中解脱出来。更加重要的是CSocket和Carchive类提供了对于同步操作Carchive对象十分重要的阻塞功能,且CSocket通过与CSocketFile和Carchive一起使用来管理对象数据的发送和接收,使发送数据和操作变得简单明了。以下使CS

25、ocket对象与串行化技术及CSocket类的编程模型。第二章 软件需求分析一 系统客户要求需求分析是软件分析中的一个重要步骤。它的基本任务是要准确地分析出系统应用者的需要,以及系统目标必须具备哪些功能。这些功能必须准确地,完整地体现出用户的要求根据网络应用程序的特点,网络在线聊天系统应就有即时,快速的特点。服务器端和客户端应就有不同的功能特性。对于服务器端应能够正确地建立与客户端的连接并能正确地断开,能即时地接收、处理和发送接收到的数据。能及时地通知在线用户当前好友在线状况,能够处理非正常数据的能力。对于客户端应能够快速地检查是否能够连接到服务器端。能正确的获得和反映当前好友在线情况。能够正

26、确的与特定好友交流。能及时地接收到服务器端地数据,并能即时处理数据,并能将处理结果反映给用户。服务器端:l 能够正确地、无冲突地启动服务器。l 监听指定的端口,等待用户的连接。l 建立与客户端的逻辑连接,并能通知其他好友。l 向新进入的好友发出已上线的好友名单。l 接收客户端的消息请求,并能正确无误地处理消息,并能发出消息到客户端。l 反映当前在线人数和在线好友状况。l 及时地反映发出地消息和聊天消息。l 当好友断开与服务器端地连接时,服务器能够正确地断开连接,并通知其他用户。l 当用户违反聊天系统规定时,服务器系统管理员能够断开与此用户的连接。l 当服务器关闭时,应通知所有用户。客户端:l

27、能够正确启动应用程序,并能向服务器发出连接请求。l 反映当前好友在线情况。l 能够向群体或指定好友发出消息l 能够及时接收好友发出消息,并通知用户。l 能够正确地断开与服务器端地的连接。二 系统详细设计对现行管理业务进行了详细调查研究,了解了系统需求和进行了系统分析与设计工作。对员工进行全面、细致而充分的调查研究和到生产和管理的现场去,并通过座谈、询问后,自上而下逐步细化的进行了了解,调查的内容涉及到企业的发展目标、经营管理情况,通过系统流程图中的部分图形工具来描述管理业务活动,进行规范化说明。流程图如下:用户运行客户端端应用程序用户名存在,从新填写填写用户姓名 提交到服务器不存在同名,用户登

28、陆到聊天室,等待好友消息或向好友发出消息三 系统开发目标1 实时好友登陆 当好友登陆或离开聊天室,服务器端有能力通知所有其他在线用户。2 收发消息同步 当一用户向其他的好友发出消息,发送接收端的用户应能及时接收到消息。3 服务器关闭通知 当服务器因故障或维护需要暂时关闭,应有通知在线用户的能力。4 隐私消息模式 当用户选择发送消息为私聊的模式。其他在线用户不能看到此条消息。四 系统开发思路尽量采用公司现有的硬件环境,及先进的管理系统开发方案,从而达到充分利用公司现有资源,提高系统开发水平和应用效果的目的。1. 系统应符合员工日常的规定,满足公司日常工作需要,并达到操作过程中的直观、方便、实用、

29、安全等要求。2. 系统采用C/S模型。服务器端和客户端均使用Visual C+并使用Sockets模型开发实现3. 系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充和维护。五 需求的总结首先,经过和用户的讨论将系统要实现的功能列出来。主要模块有登陆模块、连接模块 、发送消息模块和接收和处理模块。其次,对软件的性能指标的需求。主要有人机界面交互反应时和运行时间限制在 2 秒之内,系统启动运行不超过 5 秒,占用内存不超过 20M,外存不超过 200M(不包括数据库部分) 。 然后,提出软件运行的环境需求。该公司的运行环境设置为:具有 1GB以上的cp

30、u , 128MB的内存, 20GB硬盘规模的服务器和数台普通可连网微机;软件采用windows 2000(服务器)和windows 98以上作为系统和网络软件。该软件的使用对象是公司的管理人员,只要会用一般的微机操作即可。 从数据流和数据结构出发,逐步细化所有的软件功能,找出系统各元素之间的联系,接口特性和设计上的限制,分析它们是否满足功能要求,是否合理。在该系统的分析和综合中,经过多次与用户的交流形成了如下所示的各功能模块图如下。发出添加好友消息发出好友名单消息发出传输数据消息发出用户重名消息发出消息接收客户端退出消息接收传输数据消息接收连接请求消息接收消息用户请求连接在线聊天系统服务器端

31、启动发出用户登陆成功消息发出聊天室关闭消息发出好友离开消息服务器端系统功能模块图接收消息在线聊天系统服务器端接收客户端退出消息接收传输数据消息接收连接请求消息发出消息发出好友离开消息发出聊天室关闭消息发出好友名单消息发出传输数据消息发出用户重名消息发出用户登陆成功消息客户端系统功能模块图第三章 系统具体实现一 概要设计根据调查和研究,得到系统所要处理的数据可流程,如图所示:用户名存在,从新填写用户运行客户端端应用程序填写用户姓名 提交到服务器不存在同名,用户登陆到聊天室 接收服务器端的在线用户列表接收好友消息接收好友下线或登陆消息发送消息给好友客户端数据流图服务器端正常启动 等待接收用户连接信

32、息若消息为用户登陆,则查看是否后同名用户登陆 若有,这发出此用户已存在消息,否则,发送登陆成功消息,并发送在线好友名单,并发送此用户名称给已在线用户若消息为用户通讯消息,则转发给该接收的用户若消息为用户退出消息,这断开连接,同时发送其他用户此用户退出消息服务器端数据流图二 定义服务器端和客户端的通信结构及含义struct CMessagechar m_strText200;char from20;char to20;int type;结构体的含义定义如下:type定义to20的含义m_strText20含义to20的含义MSG_FIRST用户请求建立连接方向由客户端到服务器端请求建立连接的好友

33、名称为空为空MSG_SUCCESS建立连接成功方向由服务器端到客户端建立成功的好友名称建立成功的好友名称为空MSG_MESSAGE好友间传输的消息服务器和客户端双向发出消息的好友名称默认接收消息好友名称聊天内容MSG_USER_ADD添加好友名称消息方向由服务器端到客户端为空添加的好友名称为空MSG_USER_REMOVE好友离开时删除好友名称方向由服务器到客户端为空删除地的好友名称为空MSG_QUIT_CLIENT客户端退出消息方向又客户端到服务器端退出的好友名称为空为空MSG_QUIT_SERVER客户端退出消息方向又服务器端到客户端为空为空为空MSG_RENAME通知用户此用户名已存在,

34、应更改用户名再登陆方向又服务器端到客户端存在重名的好友名称空空三 服务器端具体实现服务器端有个CSocket的派生类CListenSocket对象指针来监听端口等待用户登陆,而用另一个CSocket的派生类对象CClientSocket的指针组来处理和每一个客户端的交互过程。派生类 CListenSocket的回调函数OnAccpet()与客户端建立套接字层次的连接。派生类CClientSocket的回调函数OnReceive()与接收每一个已连接的数据传输。由于应用Visual C+的MFC编程,应体现View/Document体系结构,所以CListenSocket的OnAccpet和CC

35、lientSocket的OnReceive函数放到应用程序的Document的实现类实现,又由于服务器端是基于对话框的应用程序,所以以上两个函数的实际处理代码再工程的主体类CServerDlg的ProcessPendingAccept和ProcessPendingRead来处理工程中的cpp文件及其包含的重要函数:ListenSocket.cpp:(CListenSocket的实现文件)OnAccept(int nErrorCode)ClientSocket.cpp:(CClientSocket的实现文件)OnReceive(int nErrorCode)ServerDlg.cpp:(CSer

36、verDlg的实现文件) void InsertListAction(CMessage &msg,BOOL bDirection = FALSE);用于更新服务器端的消息列表。void NotifyName(LPCTSTR lpszText, int i)用于更新服务器端的在线用户显示void OnButtonKick()用于服务器端的管理员断开与指定用户的连接void OnInitDialog()用于初始化主窗体对话框,并且建立套接字并绑定端口,和一些界面的初始化工作。void ProcessPendingAccept()处理客户端和服务器端的连接工作。并将连接的套接字的对象指针保留到数组中

37、。void ProcessPendingRead()处理客户端发送到服务器端的数据。并对消息做一定的处理。SendUserNameToClient(CClientSocket *pSocket,CMessage msg)将用户名称发送到指定的套接字对应的用户UpdateClients(CMessage mmsg, int nBufferSize)将mmsg结构发送给所有用户,即模拟广播发送CPtrList m_connectionList; 连接到客户端的套接字指针链表CListenSocket * m_pSocket; 监听套接字的对象指针intm_iConnNum;当前连接数CServer

38、Dlg:OnInitDialog()m_pSocket = new CListenSocket(this);创建监听套接字m_pSocket-Create(1213);绑定本地的1213端口m_pSocket-Listen();开始监听m_pSocket = new CListenSocket(this);创建监听套接字m_pSocket-Create(1213);绑定本地的1213端口m_pSocket-Listen();开始监听分析包的内容,并查看是否存在同名用户CServerDlg:ProcessPendRead()接收客户端包含的WM_FIRST请求构造包含MSG_USER_ADD的C

39、Message对象,调用CSocket-Send(),发送给其他用户,通知新用户登陆构造包含MSG_USER_ADD的CMessage对象,调用CSocket-Send(),发送给该用户已进入聊天室的好友名单若存在同名构造包含MSG_RENAME的CMessage对象,调用CSocket:Send(),通知存在重名CServerDlg:ProcessPendAccept()CListenSocket:OnAccpet()客户端的请求连接若不存在同名 构造包含MSG_SUCCESS的CMessage对象,调用CSocket:Send()通知用户已建立连接服务器端具体的建立连接的过程触发退出聊天室

40、退出事件构造包含MSG_QUIT_SERVER的CMessage的对象,用UpdateClients来使所有连接的客户端都断开连接,服务器退出并通知用户过程接收到数据包CClientSocket:OnReceive()调用CServerDlg:ProcessPendRead()来分析获得的包的内容接收到的包的type为MSG_MESSAGE,则调用UpdateAllClients来通知所有用户构造包含MSG_USER_REMOVE的CMessage 对象,并调用UpdateClients()来通知当前在线好友好友离开接收到的包的type为MSG_QUIT_CLIENT,则将此用户对应的套接字从

41、套接字链表中删除,并断开连接服务器端接收到包含MSG_MESSAGE或MSG_QUIT_CLIENT消息的处理过程四 客户端的实现流图发送包含WM_FIRST和用户名的 CMessage的对象调用 CClientSocket的 Connect建立连接添加用户名称,调用CClientDlg:ConnectSocket启动应用程序CClientSocket:OnReceive()接收到数据包客户端的启动和尝试建立连接的过程CclientSocketDoc:ProcessPengingRead()包的标志位为MSG_MESSAGE,则处理好友的消息,并显示包的标志位位MSG_RENAME标记此用户名

42、称已被使用,包的标志为MSG_SUCCESS,标记者进入聊天室成功包的标志位为MSG_USER_REMOVE,则将好友名称从好友列表中删除包的标志位为MSG_USER_ADD,添加用户到好友列表包的标志位为MSG_QUIT_SERVER,断开与服务器的连接,并通知用户客户端接收到数据和处理过程第四章 系统测试一 系统验收测试经过对系统的软、硬件的验收测试系统满足用户的要求。其中硬件测试主要包括硬件设备的清单、启动运行正常与否等。重点是软件部分的测试,首先对软件的功能进行测试,然后进行了全系统的72小时连续运行测试,系统稳定性强。系统功能测试细则表序号测试项目功能与指标测试方法预期结果结论 1可

43、登陆性用户可以随时登陆,进入聊天室按界面提示输入名称出现主窗口和各个菜单项正确完 成 2发出消息给好友可以发出消息给好友在消息框输入消息,并选择好友好友收到消息,正确完 成 3接收到消息用户能接收到其他好友发出的消息当接受到数据时,在窗口显示显示接收到的消息正确完 成 4登陆后的好友上线或下线通知 在登陆状态下,能够接收上下线通知启动多个客户端,连接到服务器端,并退出其他好友先显示上线,然后在下线正确完 成二 使用说明书 由于该软件的操作人员具有较高的计算机使用水平,能够在使用指导时学会操作和控制该软件,并根据帮助正确的操作。所以使用说明书省写。三 交付使用 软件在开发编程过程中一直处在开发环境中,开发完后转换成运行环境中的可执行的软件后,交付测试和使用。 首先,生成了一个安装盘,内容包括安装说明、软件实体等。其次,提供了用户手册。整体交付包括软件开发阶段的需求报告、总体设计报告(概要设计)、技术设计文档(详细设计)等。第五章 系统运行与维护一 系统试运行 系统测试后,并没有立即投入正式运行,而是经过了一段时间的试运行的考验,为保证用户正常工作先保留了原系统。 注意了以下几点:(1) 在准工作模式下对新系统进行全负荷的实际测试,进一步发现系统

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服