毕业设计(论文)网络实时聊天系统开发与设计_第1页
毕业设计(论文)网络实时聊天系统开发与设计_第2页
毕业设计(论文)网络实时聊天系统开发与设计_第3页
毕业设计(论文)网络实时聊天系统开发与设计_第4页
毕业设计(论文)网络实时聊天系统开发与设计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE26网络实时聊天系统开发与设计摘要随着现今计算机与英特网的飞速发展与普及,人与人之间的交流也随之越来越方便,使用网络聊天的人群也越来越大,人们对网络聊天的需求也日益显著。本文主要提出网络实时聊天系统的开发与设计,是一个基于VC开发平台设计与实现的聊天系统。能实现基于VC++的网络实时聊天,本系统具有单独的客户端和服务器端。服务器应用程序能够接受来自客户端的广播,然后向客户端发送本机的IP与服务端口号,让大家能通过客户端接入到服务器进行聊天。服务器负责接收来自客户端的聊天信息,然后通过不同的IP发送给指定的地址,同时服务器还可以监听客户端的登录与退出。主要使用WindowsSocket编程,建立Client/Server模型,实现一个服务器和多个客户端的一对多模式,各个客户端之间实现相互的通信。关键字:WindowsSocket、Client/Server、套接字、实时通信AbstractWiththerapiddevelopmentandpopularizationoftheInternetandthecomputers.Itwillbemoreandmoreconvenientofthecommunicationbetweenus.Theuseofnetworkchatbetweenpeoplealsobegingmoreandmorebig,andpeoplechattingonthenetworkaremoreandmorefrequently.Thispapermainlyputsforwardnetworkreal-timechatsystemdevelopmentanddesign,wasdesignedasadevelopmentplatformbasedonVCdesignandimplementationofthechatsystem.Canrealizereal-timechatbasedonvc++network,thissystemhasasingleclientandserver.Theserverisresponsibleforreceivinginformationfromclientchat,thenthroughdifferentIPsenttothedesignatedaddress,theservercanalsomonitoredclientloginandexit.ThischatsystemmainlyusesWindowsSocketprogramming,andsetupaClient/Servermodelandimplementaserverandmultipleclientone-to-manymodel.SothateachClientrealizemutualcommunicationbetween.

Keywords:WindowsSocket,Client/Server,Socket,real-timecommunication目录TOC\o"1-3"\h\u21197摘要 I4913Abstract II106目录 III83891绪论 1281751.1系统现状 119991.2本系统研究内容 2203902系统的开发环境与相关关键技术 3110202.1开发环境 3270152.2相关关键技术 3163192.2.1VisualC++与面向对象程序设计 3156312.2.2TCP/IP协议、UDP协议 5262192.2.3MFC(MicrososftFundationClasses,即微软的基本类库) 6119222.2.4WindowsSocket编程 718492Client/Server结构(客户机/服务器模式) 913203系统需求分析与设计开发 10286983.1系统需求分析 10194153.2系统设计 1176413.2.1设计原则 1118753.2.2工作流程 11160813.2.3功能设计 12177344系统的实现 14207424.1服务请求规范 1478374.1.1服务器端 14145314.1.2客户端 1485104.2主要模块的设计分析 14174024.2.1客户端模块 1411344.2.2服务器端类结构 18208774.3系统运行效果 19259704.3.1服务器端效果图 1910044.3.2客户端效果图 20302574.4系统测试 20250134.4.1测试意义 2055994.4.2软件测试的目标 2272194.4.3软件测试的方法 2219443总结 2413037致谢 258193参考文献 261绪论近年来计算机技术的快速发展,特别是计算机网络的发展,越来越深刻的改变了人们生活的方方面面。使得人们能以更低廉的价格,开发出更方便、更实用的网络工具。各种在线服务系统,更是深刻的影响了人们的联系方式,使得人们可以在远隔千里之遥随时通讯。网上聊天系统是为人们进行交流和联系提供的一个平台。利用现代的网络资源优势和技术优势,通过提供完善的网上聊天系统的管理,以达到增进人与人之间的信息交流和沟通的目的,并以此加快人们的信息化建设。在市场上,关于网上聊天室系统开发的软件有很多,本系统基于VC开发,通过套接字SOCKET实现,作为今后将从事软件开发的学生,即时了解和掌握流行的即时通讯机制并且应用到实践过程中,将极大的提高自己的设计和开发软件的积极性;提升自己的理论和技术水平,跟踪国内外最新的技术和开发模式,为以后类似的开发积累经验;同时,开发出来的作品也可以真正运用到实际当中。网络聊天室是当今广泛应用的一种网络服务,它为广大网民提供了一种方便快捷的沟通方式,在线聊天是上网的重要活动之一。1.1系统现状文本方式聊天室:基于Web的聊天室有其独特的优势。它不需要安装专门的软件,Web浏览器就可以使用聊天服务;它集成在Web服务器中,不需额外的硬件支持,便于广大中小型客户建设和使用。所以,基于Web的聊天室仍然被广泛采用。但是单纯聊天的一般内容比较单一,主要局限于角色认知过程中职业、地域、性别等方面的扩展,难以实现“失去他人注视的真实自我的展现”。

视频聊天室、语音聊天室、动画聊天室:随着富媒体技术的广泛应用,一种结合文本、语音和人脸动画或视频的三维语音视频聊天室在互联网上出现。复合聊天室:典型代表是UC聊天室,它打破了传统IM软件主要用于文字通讯的单一模式,将有声有色、图文并茂的场景融入聊天模式,加之视频、可断点续传的文件输、消息群发功能和在线游戏功能以及同学录(团体)等有机结合,形成一个完整的网上即时通讯娱乐平台,带来聊天新感觉。第十六次CNNIC调查结果显示:在网络用户经常使用的网络服务/功能调查中,网上聊天(聊天室、QQ、ICQ等)占被调查人群的42.6%,处于第四位,作为操作简便也是出现最早的网上聊天方式,聊天室聊天又是其中最普及的一种。在网站由窄带向宽带发展的今天,新一代的聊天室充分利用富媒体技术,以崭新的形象吸引受众视听。1.2本系统研究内容本系统主要研究内容是基于VC++的网络实时聊天软件,主要分为服务器端和客户端,本系统研究目标是实现用户通过登录客户端,可以与服务器端进行文字信息的传递。主要使用windowssocket编程,建立Client/Server模型,初始化套接字,然后建立一个监听的套接字,设定服务器地址信息,并将监听端口绑定到这个地址,最后开始监听,并且接收客户端的链接以及与客户端进行信息的传递。主要需要进行一下的准备工作与学习:了解本系统的特点以及所需要实现的功能;对本系统开发所需要的软件环境要有所了解和掌握基本编程能力,如:VisualC++6.0、VC++、MFC等。大量查阅相关资料,对本系统的研究有一个清晰的思路,了解相关具体技术,做好前期的准备工作。1.3研究方法与技术路线首先根据设计要求查询相关技术资料,充分了解本聊天软件的具体特点、各部分的组成等,查阅资料掌握如何利用协议分析工具分析IP数据报报文格式,体会数据报发送、转发的过程。其次,通过分析截获TCP报文首部信息,理解首部中的序号、确认号等字段是TCP可靠连接的基础。并通过分析TCP连接的三次握手建立和释放过程,理解TCP连接建立和释放机制。还要深入研究开发本系统所需要的相关理论知识和实际操作技术,通过需求分析确定本课题的总体设计方案。对比并确定所需要的软件开发工具,深入学习相关软件的使用和相应的编程技巧。最终确定采用SQL数据库访问技术和socket套接字实现系统软件的开发。对以上研究资料进行认真的整理并进行详细编写,完成论文的撰写工作。2系统的开发环境与相关关键技术2.1开发环境本系统是一个面向中小型企业内部使用的聊天软件,开发过程中必须选择合适的硬件和软件,应该具有完备的开发设备,性能稳定的开发机器,操作系统的选择要比较适当,如Windows2000/WindowsXP/Windows2003,开发平台要求MicrosoftVisualC++6.0,使用开发语言为C++。2.2相关关键技术VisualC++与面向对象程序设计面向对象编程(ObjectOrientedProgramming,OOP,面向对象程序设计)是一种计算机编程架构。OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。1)对象:对象是运行期的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实体。类:类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。封装:封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。继承:继承是让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码的重用:从已存在的类派生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性。多态:多态是指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。动态绑定:绑定指的是将一个过程调用与相应代码链接起来的行为。动态绑定是指与给定的过程调用相关联的代码只有在运行期才可知的一种绑定,它是多态实现的具体形式。消息传递:对象之间需要相互沟通,沟通的途径就是对象之间收发信息。消息内容包括接收消息的对象的标识,需要调用的函数的标识,以及必要的信息。消息传递的概念使得对现实世界的描述更容易。方法:方法(Method)是定义一个类可以做的,但不一定会去做的事。面向对象主要特征:封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。TCP/IP协议、UDP协议TCP/IP(TransmissionControlProtocol/InternetProtocol)协议Internet最基本的协议,是互联网络的基础。TCP/IP协议像其他网络协议一样,也是按层次划分的,第一层都有各自功能。TCP/IP协议共分为四层,包括应用层(FTP/Email)、传输层(TCP/UDP)、网络层(IP/ICMP/IGMP)和链路层(设备驱动程序与接口卡)。链路层:链路层有时也被称为数据链路层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。他们一起处理与电缆(或其他任何传输媒介)的物理接口细节。网络层:网络层处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。传输层:传输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面,UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。应用层:应用层负责处理特定应用程序的细节。【面向连接的(TCP)连接过程】2.MFC(MicrososftFundationClasses,即微软的基本类库)MFC是一个编程框架,MFC(MicrosoftFoundationClassLibrary)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。MicrosoftVisualC++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。为了支持对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。总之,MFC封装了Win32API,OLEAPI,ODBCAPI等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。MFC是C++类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C++对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。WindowsSocket编程Windowssockets无疑是我们进行网络编程的利器。所有的WindowsSockets实现都支持流套接口和数据报套接口。应用程序调用WindowsSockets的API实现相互之间的通讯。Socket接口是网络编程(通常是TCP/IP协议,也可以是其他协议)的API。最早的Socket接口是Berkeley接口,在Unxi操作系统中实现。WinSock也是一个基于Socket模型的API,在MicrosoftWindows操作系统类中使用。它在Berkeley接口函数的基础之上,还增加了基于消息驱动机制的Windows扩展函数。Winscok1.1只支持TCP/IP网络,WinSock2.0增加了对更多协议的支持。这里,讨论TCP/IP网络上的API。Socket接口包括三类函数:第一类是WinSockAPI包含的Berkeleysocket函数。这类函数分两部分。第一部分是用于网络I/O的函数,如accept、Closesocket、connect、recv、recvfrom、Select、Send、Sendto。另一部分是不涉及网络I/O、在本地端完成的函数,如bind、getpeername、getsockname、getsocketopt、htonl、htons、inet_addr、inet_nton、ioctlsocket、listen、ntohl、ntohs、setsocketopt、shutdow、socket等。第二类是检索有关域名、通信服务和协议等Internet信息的数据库函数,如gethostbyaddr、gethostbyname、gethostname、getprotolbyname、getprotolbynumber、getserverbyname、getservbyport。第三类是Berkekleysocket例程的Windows专用的扩展函数,如gethostbyname对应的WSAAsynGetHostByName(其他数据库函数除了gethostname都有异步版本),select对应的WSAAsynSelect,判断是否阻塞的函数WSAIsBlocking,得到上一次WindsockAPI错误信息的WSAGetLastError,等等。从另外一个角度,这些函数又可以分为两类,一是阻塞函数,一是非阻塞函数。所谓阻塞函数,是指其完成指定的任务之前不允许程序调用另一个函数,在Windows下还会阻塞本线程消息的发送。所谓非阻塞函数,是指操作启动之后,如果可以立即得到结果就返回结果,否则返回表示结果需要等待的错误信息,不等待任务完成函数就返回。首先,异步函数是非阻塞函数;其次,获取远地信息的数据库函数是阻塞函数(因此,WinSock提供了其异步版本);在Berkeleysocket函数部分中,不涉及网络I/O、本地端工作的函数是非阻塞函数;在Berkeleysocket函数部分中,网络I/O的函数是可阻塞函数,也就是它们可以阻塞执行,也可以不阻塞执行。这些函数都使用了一个socket,如果它们使用的socket是阻塞的,则这些函数是阻塞函数;如果它们使用的socket是非阻塞的,则这些函数是非阻塞函数。WindowsSockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如下图所示:应用程序一应用程序二网络编程界面,例如WindowsSocket等应用程序一应用程序二网络编程界面,例如WindowsSocket等网络通讯协议服务界面,例如TCP/IP操作系统,例如Windows物理通讯介质【WindowsSockets实现通讯工作的各层关系图】Client/Server结构(客户机/服务器模式)Client/Server结构(C/S结构)即客户机和服务器结构。C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如ng/wiki/ORACLE"ORACLE、SYBASE、informix或SQLServer。客户端需要安装专用的客户端软件。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。C/S结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个:只适用于局域网。而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。3系统需求分析与设计开发3.1系统需求分析在基于Socket的聊天系统,客户端和服务器必须保持随时随地的连接。这有别于普通Web浏览的连接方式。在使用浏览器访问服务器时,先由客户端发出协议,然后服务器响应处理这个客户端的响应,再返回处理结果;请求(Request)和响应(Response)是一种一对一的前后因果关系。而在基于Socket的聊天系统中,客户端发出聊天信息的同时,客户端也在接受服务器发送过来的其他人的聊天信息,因此,请求和响应不存在那种前后对应关系,是两种分别独立进行的进程。因为服务器任何时候都可能发送信息到客户端,因此,客户端和服务器一旦建立连接,必须能让服务器在以后发送中寻找定位到这个连接。聊天系统在客户端和服务器之间主要传送的是文字信息,服务器端只需要把最近的文字信息推送到客户端,这样减少了网络传输内容,节省了网络传输的时间,无疑提高了聊天速度。这种“推”技术是目前基于Socket聊天系统的主要实现技术。该聊天程序分为服务器端和课户端两个部分。他们之间的关系图如下:ClientServerClientClientClient更新成员列表成员列表请求应答发送消息ClientServerClientClientClient更新成员列表成员列表请求应答发送消息3.2系统设计3.设计原则考虑到系统的可重用性和伸缩性,需要将本系统的网络通信底层和应用系统分离开。这样,基于可重用的网络通信层,可以实现其他各种实时性较高的应用系统。本系统在架构设计上将分4个层次,如下图所示。CAsyncSocketCAsyncSocketCSocket聊天、游戏等应用系统WindowSocketsAPI【架构层次】本系统最底层是Socket通信层,将负责客户端和服务器之间快速的数据交换,它通过接口层和最上面应用层保持实时数据联系。用户从客户端进入到本系统前,将实现统一的用户登录验证机制。Socket底层设计分两大部分:协议设计和连接处理设计:协议设计和连接处理设计;CSocket层的目的是提供底层和应用蹭一个中介媒体的作用,但是不能设计得太复杂,以免延误数据传送时间。3.2.2工作流程只有充分地了解了聊天程序的工作流程,才能对整个系统的理解更加深刻,聊天程序的工作流程如下图所示。加载套接字库加载套接字库初始化套接字绑定本地机到套接字向指定IP地址发送数据关闭套接字库结束聊天创建线程用于接受数据【聊天程序的工作流程】功能设计局域网聊天系统以局域网内的用户为应用对象,经过各方面需求分析,该系统主要由服务器端和客户端两部分构成,各功能模块如下图所示。局域网聊天系统局域网聊天系统服务器客户端开启服务器停止服务器配置服务器关闭服务器发送离线信息登陆文字传送接收离线信息用户管理【局域网聊天系统功能模块图】4系统的实现4.1服务请求规范服务器端(1)创建一个UDP的套接字,接受来自客户端的广播请求,当请求报文内容为“REQUESTFORIPADDRESSANDSERVERPORT”时,接受请求,给客户端发送本服务器TCP聊天室的端口号。(2)创建一个主要的TCP协议的套接字负责客户端TCP连接,处理它的连接请求事件。(3)在主要的TCP连接协议的套接字里面再创建TCP套接字保存到动态数组里,在主要的套接字接受请求后,就用这些套接字和客户端发送和接受数据。客户端(1)当用户按“连接”按钮时,创建UDP协议套接字,给本地计算机发广播,广播内容为“REQUESTFORIPADDRESSANDSERVERPORT”。(2)当收到服务器端的回应,收到服务器发来的端口号后,关闭UDP连接。根据服务器的IP地址和端口号重新创建TCP连接。故我思考:客户端一定要知道服务器的一个端口,我假设它知道服务器UDP服务的端口,通过发广播给服务器的UDP服务套接字,然后等待该套接字发回服务器TCP聊天室服务的端口号,IP地址用RECEIVEFROM也可以得到。4.2主要模块的设计分析客户端模块类模块如下:主要函数说明: ClassClientSocket:PublicCSocket BOOLCheckUserName(CStringstrUserName); //检查用户名是否重复 voidCutMessage(CStringstrText); //把消息分离开处理 voidDelOnlineUser(CStringstrUserName); //删除一个在线用户 voidAddChatContent(CStringstrText); //往内容框添加记录 voidAddOnlineUser(CStringstrUserName); //增加一个用户 voidHandleMsg(CStringstrMsg); //根据标志位进行消息处理 CWnd*m_pChatDlg; //指向窗口的指针,用于输出 voidSendUserName(); //TCP;连接后第一次发送用户名 voidSendToOne(CStringstrText); //把指定字符串发送给一个人("悄悄话”) voidSendToAll(CStringstrText); //把制定字符串发送给所有在想用户 voidGetUserName(); //从对话框获得用户名 BOOLCreateTCPSocket(); //创建TCP套接字并连接 BOOLCreateUDPSocket(); /创建UDP套接字并发广播客户端的数据处理模块://消息处理函数//通信格式约定如下:/********************************/* (0)用户名与服务器上的重复*//* STX+0+用户名+ETX *//* (ⅰ)首次传输在线用户名 *//* STX+1+用户名+ETX *//* (ⅱ)传输新到用户名 *//* STX+2+用户名+ETX *//* (ⅲ)传输离线用户名 *//* STX+3+用户名+ETX *//* (ⅳ)传输聊天数据 *//* STX+4+内容+ETX *//********************************/voidCClientSocket::HandleMsg(CStringstrMsg){ CStringstrTmp; switch(strMsg.GetAt(1)) { case'0'://用户名已存在 strMsg=strMsg.Mid(2,strMsg.GetLength()-3);//删掉头尾控制位 strMsg+="用户名已存在,请尝试用另外的用户名登陆!\r\n"+GetTime(); AddChatContent(strMsg);//用户名已存在 GetUserName();//重新获取用户名 SendUserName();//重新发送用户名 break; case'1'://首次传输在线用户名 strMsg=strMsg.Mid(2,strMsg.GetLength()-3); AddOnlineUser(strMsg);//用户名增加到在线列表框 break; case'2'://传输新到用户名 strMsg=strMsg.Mid(2,strMsg.GetLength()-3); AddOnlineUser(strMsg);//增加到在线列表框 strTmp=strMsg+"\t来了。。。\t"+GetTime(); AddChatContent(strTmp);//新用户名加入聊天内容 break; case'3'://传输离开用户名 strMsg=strMsg.Mid(2,strMsg.GetLength()-3); DelOnlineUser(strMsg);//在线列表删除相应用户名 strTmp=strMsg+"\t离开了。。。\t"+GetTime(); AddChatContent(strTmp);//聊天内容显示用户离开 break; case'4'://传输聊天内容,直接显示 strTmp=strMsg.Mid(2,strMsg.GetLength()-3); strTmp+=GetTime(); //消息末尾加上时间,直接显示 AddChatContent(strTmp); break; }}服务器端类结构主要类:CChatServerDlg,负责响应窗口输入输出CServerSocket,服务器的主服务套接字类型,负责监听客户端的TCP连接请求,并控制整个聊天室的总体数据接收与发送CClientSocket,它的对象定义在CServerSocket里,定义为动态数组对象,负责主服务套接字Accept后,由它来和客户端通信。CUDPSocket,一直开启,负责客户端一开的UDP连接请求,给客户端发送服务的端口号。CPortInput,输入端口号对话框。4.3系统运行效果服务器端效果图【服务器端效果图】客户端效果图【客户端效果图】4.4系统测试测试意义本章对我们的系统做具体的测试,验证系统的功能是否得以实现。【服务器端代码测试】【客户端代码测试】软件测试的目标(1)测试是为了发现程序中的错误而执行的程序的过程;(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试时发现了至今为止尚未发现的错误的测试。从上述规则可以看出,测试的正确定义是“为了发现程序中的错误而执行程序的过程”。正确认识测试是非常重要的,测试目标决定了测试方案的设计。没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。软件测试的方法软件的测试分为两种:黑盒测试和白盒测试。黑盒测试:黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试地,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试。它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。白盒测试:软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:1、对程序模块的所有独立的执行路径至少测试一遍。2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。3、在循环的边界和运行的界限内执行循环体。4、测试内部数据结构的有效性,等等。测试用例如下表:功能描述用户登录用例目的测试用户登录功能是否正常前提条件客户端程序和服务器端程序处于运行状态输入/动作期望的输出/相应实际情况示例1:输入正确的用户名、服务器IP和端口号用户成功登陆,关闭登陆窗体,弹出客户端主界面与期望输出相同示例2:不输入用户名、输入服务器IP和端口号无法登陆服务器与期望输出相同示例3:输入正确的用户名,输入错误服务器IP和端口

温馨提示

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

评论

0/150

提交评论