已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于eclipse平台的即时通信设计与开发毕业论文目 录摘 要IAbstractII引言11 绪论211即时通信的发展背景21.2 即时通信现状21.3 本课题研究内容31.4 本论文的主要内容32即时通信系统开发环境和关键技术42.1 即时通信开发环境42.2 关键技术42.2.1 java语言42.2.2 WINDOWS SOCKETS网络编程接口42.2.3 WSAAsyncSelect模型开发52.2.4 TCP/IP协议、TCP协议62.2.5 Client/Server结构(客户机/服务器模式)83即时通信系统分析与设计93.1 即时通信系统分析93.1.1 系统需求93.1.2 需求分析103.2 即时通信系统设计113.2.1 设计原则113.2.3 工作流程113.2.4 功能设计123.2.5 共享数据类设计134即时通信系统实现164.1 服务器端设计实现164.1.1 服务器端静态类图164.1.2 服务器主要类介绍164.1.3 服务器端主要过程介绍194.2 客户端设计实现234.2.1 客户端静态类图234.2.2 客户端主要类介绍234.2.3客户端主要过程介绍254.3系统测试284.3.1 测试意义284.3.2软件测试的目标284.3.2软件测试的方法284.3.3 测试用例29总结与展望31致 谢33参考文献34III引 言即时通信就是能够通过软件来与好友进行通讯,发送或者接受好友通过互联网消息,主要是完成点对多点的通信。现在因为网络的不断发展,在全世界人与人之间的距离越来越短,怎样与别人之间可以更好更方便快捷地交流,这个问题已经是我们越来越关心的问题。我们现在生活中有许许多多的网站,他们已经很好的融入我们的生活。我们可以通过网站发出自己的遇到的实时动态,与朋友之间可以更好地交流,和我们的公司的客户可以建立良好的互动。所以说开发一个聊天软件的必要性越来越高,开发这么一个交流的平台这就是我这次设计的目标。在现代这个社会随着互联网的快速发展,大家需要在网上越来越多的沟通。所以应运而生许许多多的聊天软件,来帮助我们就行实时的信息交流。就目前的情况来看,我们国家的网络发展不断提高我们公司的内部网络也基本上建设完成了。我们想要快输的解决我们在公司事务上遇到的问题,许许多多的企业开始在公司的内部建立属于自己的内部网络来开展工作。在内网的成功运行过程中,公司通过家属内部员工的协调与交流,加快信息的交换速度,得以提高自己的工作效率。但是随之也产生了很多问题,公司的规模逐步地增大,业务也不断的扩展,公司消息的机密性越来越强,公司开始觉得需要用内网来交流,避免公司内部的机密泄露。要如何解决这个我们在社会发展中遇到的问题,于是人们产生了开发专门公司内部使用的用于聊天的软件,通过自己的软件,公司可以通过这个软件来传输实时消息和召开网络视频会议等等这样可以提高我们的工作效率还能保护公司的一些商业秘密。1 绪论1.1即时通信的发展背景在现代这个社会随着互联网的快速发展,大家需要在网上越来越多的沟通。所以应运而生许许多多的聊天软件,来帮助我们就行实时的信息交流。就目前的情况来看,我们国家的网络发展不断提高我们公司的内部网络也基本上建设完成了。我们想要快输的解决我们在公司事务上遇到的问题,许许多多的企业开始在公司的内部建立属于自己的内部网络来开展工作。在内网的成功运行过程中,公司通过家属内部员工的协调与交流,加快信息的交换速度,得以提高自己的工作效率。但是随之也产生了很多问题,公司的规模逐步地增大,业务也不断的扩展,公司消息的机密性越来越强,公司开始觉得需要用内网来交流,避免公司内部的机密泄露。要如何解决这个我们在社会发展中遇到的问题,于是人们产生了开发专门公司内部使用的用于聊天的软件,通过自己的软件,公司可以通过这个软件来传输实时消息和召开网络视频会议等等这样可以提高我们的工作效率还能保护公司的一些商业秘密。 现在我们要做一个基于Socket通信的一个具有在线聊天和发送离线消息的聊天软件。这个通信基础是我们可以拥有一个安全,优秀和快速的通信机制。这个软件不需要硬件上的改造和扩展,为我们大大的节约成本。这个软件也可以减少网络带宽,提高我们的网络带宽的利用率,再次基础上可以完成我们的需求。Socket通信软件在各个方面的前景也是非常广阔的,比如在线的网络教学,视频会议等等。Socket通信接受消息和发送消息的速度比较快,对消息的保护性能比一般比较好,并且不怎么占网络带宽。所以聊天软件的开发中对socket的应用是很有必要的。 这个聊天软件的发展前景也是很有前途的,不但对新型的网络通信需求也有恒大的扩展,也能对传统的消息进行处理,比如网络在线的教育,数字数据影音视屏的传输等的前途都是不可限量的,所以说我们还是比较看好他的发展前景。 1.2 即时通信现状对于即时通信软件的开发与研究,已经是我们现在生活中补课缺少的一部分,例如QQ、微信、微博以及各种社交软件。他们现在也实现了许多各具特色的功能,比如就腾讯公司开发出的QQ而言,有许多附加产品构成了一个完整的产业链最基础的有聊天软件,不但可以进行文字聊天,还能视频聊天,语音聊天,多人会议模式,他们也开发了不少的快捷功能例如使用Ctrl+Alt+A可以在电脑屏幕上面快速截图。还有QQ空间、QQ游戏以及各种大型游戏的合作开发。使他站在国内这一领域的最前端,后续他们还退了微信以微信红包和朋友圈迅速占据了市场,目前已经做得比较成功了。与此同时在国内市场。新浪微博也在国内市场占领了比较大的份额,他们是目前国内来说即时通信软件开发的一个典范和目标,它大大的丰富了我们的生活,他们可以迅速的将消息传遍全国各地,也产生了不少的网络红人,也是他们成功的重要的推动因素。目前这些开发的方式还出于保密阶段,并不适合所有公司使用。但我想他们大致的目标和方向是一定的,就是利用各个开发平台上的的communication interface。是基于TCP协议来完成的软件,这个协议在软件开发中应用是很广泛的。1.3 本课题研究内容我们的课题是eclipse平台下的应用java语言开发的软件、我们的这个软件是由客户端程序、服务器端程序以及服务器端的数据库的搭建这三部分构成的,我们这个课题主要为了实现在不同客户端之间的互相通信,以及发送离线文字消息,还有对好友的一些简单的操作。主要研究开发内容是:学会java程序开发,学习多线程开发技术,搭建eclipse开发平台来做我们的编程,在mysql上搭建所需要的数据库。探索在eclipse平台下,如何使用Socket编程、TCP/IP协议等实现该软件的开发和设计。1.4 本论文的主要内容目前来看衡量一个实时通信聊天软件的条件大概有:稳定性、扩展性。安全性和。所以,我要做的这个实时聊天软件是在eclipse平台上用java语言来开发,研究在该平台下的socket通信技术是我们的关键。使用配置文件作为数据管理。为了完成在多个客户端之间互相通信,我们在客户端上做了用户注册账号、登录界面。具有发送实时及离线消息功能以及对好友进行添加、查找和删除的功能。本文第1章主要介绍了即时通信的发展的背景及意义、课题研究现状和目前比较流行的成功的产品还有课题内容。对我要做的软件的功能与要求进行了简单的描述。本文第 2 章向大家叙述了实时聊天系统的开发平台和语言以及主要的技术。本文第 3 章是软件的分析与设计。完成了这个聊天软件的需求分析以及对技术的理解,对组成这个软件的各个部分进行仔细的划分和分析。如何设计了这个聊天软件的系统和数据结构。本文第4章是系统使怎么样实现,对各个功能区的详细执行过程进行了分析,各个功能区的结构图接行了介绍。本文第 5 章介绍系统测试。本文结尾对这次设计的参考文献和对老师的致谢,并且总结了一下本次设计。2 即时通信系统开发环境和关键技术 2.1 即时通信开发环境我所设计的是一个面向中小型机构内部通信需求的网络即时信息软件,要在短时间内开发出来并且要满足客户要求,无论是硬件还是软件都要选择合适,要求如下:开发设备应该完备;开发机器的性能必须稳定;操作系统的选择应该适当;开发出的程序可以在尽可能多的平台上运行;要求运行机配置尽可能低档。对此,我们选择的硬件环境和软件环境如下: 1、硬件环境 处理器:Intel Pentium PIII或更高处理器 内存:256MB或更高 开发该系统应尽可能采用高档的硬件。因此,在应用时应采用更好的配置。2、软件环境 操作系统:Windows 2000 /Windows XP / Windows 2003 开发平台:eclipse/myeclipse开发语言:java2.2 关键技术2.2.1 java语言Java 编程语言的风格十分接近C、C+语言。Java是一个纯的面向对象的程序设计语言,它继承了 C+ 语言面向对象技术的核心,Java舍弃了C +语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 2.2.2 WINDOWS SOCKETS网络编程接口选定WINDOWS平台开发网络通信程序,可以选择WINDOWS的SOCKETS编程接口,Windows Sockets是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。Windows sockets无疑是我们进行网络编程的利器。所有的Windows Sockets实现都支持流套接口和数据报套接口。应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图2.1所示: 图2.1 Windows Sockets实现通讯工作的各层关系图2.2.3 WSAAsyncSelect模型开发WSAAsyncSelect()调用允许应用程序程序注册一个或多个感兴趣的网络事件。这一API调用用来取代探寻网络I/O调用。在select()或非阻塞I/O例程(例如send()和recv())已经被调用或将要被调用的情况下都可以使用WSAAsyncSelect()调用。在这种情况下,在声明感兴趣的网络事件时,你必须提供一个通知时使用的窗口句柄。那么在你声明的感兴趣的网络事件发生时,对应的窗口将收到一个基于消息的通知。其过程如图2.2所示。应用进程WSAAsyncSelect线程继续运行 Recv()复制数据期间阻塞处理数据 内核 等待数据数据准备好复制数据将数据复制到拥护空间 完成复制系统调用返回消息系统调用返回成功指示图2.2 WSAAsyncSelect模型2.2.4 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.5 Client/Server结构(客户机/服务器模式)Client/Server结构(C/S结构)是大家熟知的客户机和服务器结构。通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构。C/S结构软件分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的网络内使用。C/S结构的优点是能充分发挥客户端的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个:只适用于网络。而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。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所示:ClientServerClientClientClient更新成员列表成员列表请求应答发送消息图3.1 关系功能图3.2 即时通信系统设计3.2.1 设计原则考虑到系统的可重用性和伸缩性,需要将本系统的网络通信底层和应用系统分离开。这样,基于可重用的网络通信层,可以实现其他各种实时性较高的应用系统。本系统在架构设计上将分4个层次,如图3.2所示。CAsyncSocketCSocket聊天、游戏等应用系统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_strNameCString名称m_strPasswordCstring密码m_eStatusUSERSTATUE状态m_lIP DWORDI P地址m_timeCTime时间C数据包类设计在程序中声明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 服务器主要类介绍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保存离线消息CListenSocket类 :派生于MFC的CSocket 类,用于接受客户端的连接请求,在该类中重写了CAsyncSocket类OnAccept()虚函数。当客户端连接服务器时,OnAccept()函数被调用。表4.2成员函数函 数 名 称 返 回 值功 能CListenSocket(CServerDlg* pServerDlg) 无 构造函数 ClistenSocket() 无 析构函数VoidOnAccept(intnErrorCode) void 接受连接请求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 服务器登陆如界面初始化:列表试图控件初始化用户列表初始化读取离线消息;离线消息包括:发送消息的用户,接收消息的用户,接收和发送消息的时间接受客户端请求:CListenSocket:OnAccept()-CServerDlg:ProcessPendingAccept().接收数据:在FD_READ网络事件发生时,CClienSocket:OnReceive()被调用.在该函数中与CSocket, CArchive, CSocketFile 协同工作完成文件的工作,同时调用CSocket 类的Receive()函数:图4.4接受过程流程图处理数据:l 保存离线消息l 保存用户信息l 更新用户列表更新用户列表的过程如图4.5: 图4.5 更新用户列表的过程发送用户链表转发离线消息更新服务器界面用户离线:更新服务器用户列表中该用户信息将该用户从在线用户列表中删除通知在线用户更新该用户的状态更新服务器界面删除为该用户分配的内存空间退出:调用OnDestroy()函数保存用户信息保存离线消息清理资源4.2 客户端设计实现4.2.1 客户端静态类图图4.8 静态类图4.2.2 客户端主要类介绍CClientDlg类:创建客户端主窗口,创建聊天窗口,接收离线消息,发送离线消息和保存聊天记录等。表4.1成员函数 函 数 名 称返 回 值功 能 CClientDlg(CWnd *pParent=NULL) 无构造函数CClientDlg() 无析够函数Init() BOOL初始化InitListCtrlSetting() BOOL初始列表控件ConnectToServer() BOOL连接服务器BegingListen() BOOL监听ProcessPendingAccept() Void接受对方连接ProcessPendingRead() Void接受数据包SendPacket(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,LRESULT *pResult) Void双击列表视图控件的消息响应函数l CChatDlg类:编辑和显示消息。该类有三个构造函数用于创建3种不同情况下的窗口:(1) 用与主动与其他用户聊天。对方可以是在线,也可以是离线状态。(2) 显示离线消息窗口。(3) 被动聊天窗口,其他用户向该用户发起的聊天请求所创建的窗口。表4.2成员函数 函数名称返回值功能CChatDlg(CWnd *pParent=NULL)无被动聊天窗口CChatDlg(CWnd *pParent,const CUser &pPacketConst CUserInfo &userInfo)无在线/离线窗口CChatDlg(CWnd *pParent,CChatPacket *pPacket)无显示离线聊天窗口CChatDlg()无析构函数PreTranslateMessage(MSG *pMsg)BOOL处理键盘消息InitSocket()BOOL创建套接字ConnectToPeer()BOOL 连接对方ProcessPendingRead()Void接收数据DisplayRecvMessage(CChatPacket *pPacket)Void显示消息DisplayOfflineMessage(CChatPacket *pPacket)Void显示接收到的离线消息SendPeerMessage()Void发送消息InitArchive()Void初始化读入对象etPeerInfo(CUserInfo &peerInfo)Void设置对方信息SetUserInfo(CUserInfo &userInfo)Void设置用户信息*GetChatSocket()Void返回CChatSocket指针DisPlaySentMessage(CChatPacket *pPacket)Void显示发送的离线消息OnDestroy()Void消息响应函数DisPlaySentMessage()Void显示发送的在线消息CListenSocket类:派生与CSocket类,用于监听其他用户的连接请求,该类重写了OnAccept()函数。CChatSOcket类:派生与CSocket类,用于监听其他用户的通信,该类重写了OnReceive()函数;l CClientLoginDlg类:派生与CDialog类,用与创建服务器对话框。4.2.3客户端主要过程介绍客户端主要去实现的是功能:初始化,创建初始化窗口,接收窗口,接收离线聊天消息以及登陆控制。初始化:初始化列表图控件开始监听连接服务器,连接服务器的过程如图4.8所示 图4.8 登陆用户图 图4.9连接服务器创建聊天窗口如图4.10所示: 图4.10 创建聊天窗口在线聊天:按情况CChatDlg类构造函数连接对方发送消息接受消息发送离线消息被动聊天:创建聊天窗口保存聊天记录 图4.11接收离线消息4.3系统测试4.3.1 测试意义本章对我们的系统做具体的测试,验证系统的功能是否得以实现。4.3.2软件测试的目标(1).测试是为了发现程序中的错误而执行的程序的过程;(2).好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3) 成功的测试时发现了至今为止尚未发现的错误的测试。从上述规则可以看出,测试的正确定义是“为了发现程序中的错误而执行程序的过程”。正确认识测试是非常重要的,测试目标决定了测试方案的设计。没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。4.3.2软件测试的方法软件的测试分为两种:黑盒测试和白盒测试。黑盒测试:黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试地,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试。它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身有问题或规格说明的规定有误,用墨盒测试方法是发现不了的。白盒测试:软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:1、对程序模块的所有独立的执行路径至少测试一遍。2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。3、在循环的边界和运行的界限内执行循环体。4、测试内部数据结构的有效性,等等。4.3.3 测试用例黑盒测试:主要是同学帮助一起测试系统的功能,看看主要功能是否能得以实现。白盒测试:主要是在编写代码的过程中对各个类进行测试,检查各个类的功能是否实现,最后是对整个系统的测试,进一步检查各个类的功能。经过以上测试,系统基本完成所需功能。表格 4.3测试用例功能描述用户登录用例目的测试用户登录功能是否正常前提条件客户端程序和服务器端程序处于运行状态输入/动作期望的输出/相应实际情况示例1:输入正确的用户名、密 码、服务器IP和端口号用户成功登陆,关闭登陆窗体,弹出客户端主界面与期望输出相同示例2:不输入用户名密码、输入服务器IP和端口号提示用户“用户名不能为空!”或“密码不能为空!” 与期望输出相同示例3:输入正确的用户名、密码,输入错误服务器IP和端口号用户登陆失败,提示连接服务器失败与期望输出相同示例4:输入错误的用户名或密码,输入正确服务器IP和端口号用户登录失败,提示用户名或密码输入错误与期望输出相同34结 论在过去的几个月中间,我通过老师和同学们的帮助完成了关于eclipse平台上的软件的开发,现在已经完工了,并且预想的功能都已经实现了,也成功通过了测试。可以实现新用户注册以及登录,发送离线消息,发送文字消息,添加、查找、删除好友,并且可以在服务器上查看用户数据以及聊天消息,这个软件操作比较简单,并且方便使用。刚开始进行本次设计的时候需要学习很多东西,有很多理论知识比如java环境的配置,socket编程技术,Mysql数据库的配置与安装,还由客户端与服务器之间的联系实验都需要学习,在后边编写的过程中也节省了很多时间。在我做之前也对这个软件进行了需求分析,具体的把软件的需求以及规格进行了编写。还有系统的概要说明书,这些东西对后续的过程都有很多作用。接下来就是对软件程序的编写以及详细的设计,这段时间里,由于对开发平台的不熟悉以及自己的动手能力的欠缺,当然会遇到很多问题,比如怎么在注册表中添加新的选项,如何在用户发送到服务器上的数据进行离线存储,如何在C/S这种模式下添加新的模块,如何利用多线编程等等问题。这个过程中积累了很多软件开发的经验,这次设计为我在以后的工作和学习中奠定了一个好的开始,这次经历大大的丰富了我的经历。 这些日子中我学习了在这大学四年没有的一些知识,同时把这些东西用到这次软件开发上。不但对我的理论知识有很大的提高,也充分的发挥了我的动手能力,让我在以后的各种中积累了不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 轮滑刷街活动免责协议书
- 2026年面向高铁工作的求职策略及面试准备
- 2026年软件工程管理与编程实践检测试题集软件开发
- 2026年企业危机管理与风险控制研究题库
- 2026年航海技术专业海事面试特殊区域航行
- 2026年软件测试基础与进阶教程
- 2026年学校美育浸润行动应知应会知识题
- 2026年机关干部劳动安全卫生规定常识测试
- 2026年监狱监区长竞聘监管改造与安全稳定能力题库
- 2026年社会热点问题探讨与解读手册
- 2026浙江台州市椒江区科技事业中心招聘编制外工作人员1人备考题库附答案详解(a卷)
- 2026国家电投集团二级单位总会计师选聘笔试历年参考题库附带答案详解
- 株洲市2026事业单位联考-综合应用能力A类综合管理模拟卷(含答案)
- 任务7.1 智能饲喂控制系统的PLC控制
- 2026中国太平洋人寿保险股份有限公司校园招聘考试参考题库及答案解析
- 2026湖南益阳市中心医院人才引进67人考试参考试题及答案解析
- 2026春季新人教版历史八年级下册全册教案11新版
- 成都兴蓉环境股份有限公司笔试题
- 排水沟施工方案
- 基本公共卫生知识考试题库及答案
- 清淤工程施工记录表
评论
0/150
提交评论