




已阅读5页,还剩61页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业设计(论文)全套资料扣扣:194535455即时通讯系统摘 要:局域网即时聊天通过进行文本聊天来实现彼此沟通、交流信息。本次局域网即时聊天程序设计主要用了 Visual C+编程环境,实现了在 LAN 中在线用户的文本。在设计里涉及到了网络通信基本原理和 Socket 编程 API 技术。由程序是在TCP/IP 环境下运行,所以分服务器端和客户端。服 务器端和客户端是通过建立 Socket链接来实现聊天功能。本次设计主要着重于文本聊天部分,在本次论文里主要以文本聊天的流程和各模块之间的关系及 Socket 处理为主说明。关键字:Visual C+编程环境 网络通信基本原理 Socket 编程 API 本科毕业设计(论文)全套资料扣扣:194535455Instant messaging systemAbstract:The local area network chats immediately through carries on the text to chat with the pronunciation chats realizes each other communication, the exchange information. This local area network chatted the programming mainly to use Visual immediately the C+ programming environment, has realized in LAN the on-line users text the pronunciation interactiveInvolved in the design to the network correspondence basic principle and the socket programming and the pronunciation processes the API technology. Because the procedure is in TCP Under the IP environment moves, therefore divides the server end and the client side. The server end and the client side are through establishes Socket to link realizes chats the function.This design mainly emphatically chats in the pronunciation the part, mainly between the flow and various modules relations and the socket processing which chats by the pronunciation primarily explained in this paper.Keywords: Visual C+ programming environment network communication fundamentals Socket programming API.本科毕业设计(论文)全套资料扣扣:194535455目 录1 引言2 系统总体设计2.1 系统设计要求 22.2 系统设计思路 22.3 系统设计框图 .23 系统开发环境和关键技术3.1 系统开发环境 33.2 关键技术 33.2.1 Visual C+和面向程序设计 33.2.2 MFC 43.2.3 WINDOWS SOCKETS 网络编程借口 43.2.4 TCP/IP 协议、TCP 协议 54 系统分析与设计4.1 系统分析 74.1.1 系统需求 74.1.2 需求分析 84.2 系统设计 94.2.1 设计原理 94.2.2 客户端工作流程 104.2.3 服务端工作流程 114.2.4 功能设计 125 系统实现5.1 服务器端设计实现 145.1.1 服务器端静态类图 145.1.2 服务器主要类介绍 145.1.3 服务器端主要过程介绍 165.2 客服端设计实现 195.2.1 客服端静态类图 195.2.2 客服端主要类介绍 195.2.3 客服端主要过程介绍 215.3 系统测试 245.3.1 测试意义 245.3.2 测试的目标 245.3.3 测试的方法 245.3.4 测试结果 25本科毕业设计(论文)全套资料扣扣:1945354556 结论 26参考文献 28致谢 29附录 30本科毕业设计(论文)全套资料扣扣:194535455即时通讯系统1 引 言随着现代技术的不断输入和信息化的广泛普及,网络作为一种新兴事物,在近些年得到了前所未有的普及和深入,网络上的各种应用层出不穷,给各个阶层、各个年龄段的用户提供了不同的个性化的服务。而现代中小型企业的领导认识到进一步提高企业信息化的必要性。为使企业能在瞬息万变的信息时代生存下去,适应激烈的市场竞争,现代企业要求正加员工之间的交流和通信能力,尤其是领导和员工之间的共同能力,实时的交流系统就是在这种条件下诞生的。系统开发是一个十分复杂的系统工程。这里对系统开发的基本过程和方法进行介绍,列出相关文档的示例并加以说明。要提高市场竞争力,就要对市场作充分的调查和详细的研究,同时也要有好的客户服务。企业要在复杂的环境下作出对策。员工与员工 员工与领导间的即时交流尤为重要,网络在线聊天系统对于企业来说就是一种交流和通信的平台,本系统能够成为中小型企业的交流通信的理想平台。如能做到信息的及时的反馈,即时的处理并作出相应的行动,将能进一步提高中小型企业在现代经济市场的竞争能力。网络通信是网络应用的重要体现方面。网上即时通信则是网络应用的重要体现方面。本聊天系统主要应用于小型企业,学校或小型局域网内部使用。本应用程序使短距离交流更加快捷和便利。更能高效率的体现现代即时通信的特点。本系统能够满足中小型企业,学校的内部网络即时通信的需要,在内部网络正常环境的运营下,提供即时通信的能力,本系统使用 Visual C+开发,本系统能够为中小型企业协同工作,相互间的交流提供了有力的工具,运用在局域网的本系统,能够为企业员工的交流提供帮助,有利于提高工作效率。本科毕业设计(论文)全套资料扣扣:1945354552 系统总设计2.1 系统设计要求本课题的设计要求1.以 VC6.0 为开发工具 MFC 编写的一个聊天系统2.系统具有服务器和客户端3.系统具有局域网连接功能4.系统具有局域网聊天功能2.2 系统设计思路利用 VC6.0 和 MFC 搭建系统开发平台, 在 此 开 发 平 台 下 , 利 用 socket 编程技术、多线程开发技术、TCP、UDP 协议等进 行 局 域 网 聊 天 软 件 的 实 际 开 发 。2.3 系统设计框图本科毕业设计(论文)全套资料扣扣:1945354553 系统开发环境与关键技术3.1 开发环境该设计的是一个面向中小型机构内部通信需求的局域网即时信息软件,要在短时间内开发出来并且要满足客户要求,无论是硬件还是软件都要选择合适,要求如下:开发设备应该完备;开发机器的性能必须稳定;操作系统的选择应该适当;开发出的程序可以在尽可能多的平台上运行;要求运行机配置尽可能低档。对此,选择的硬件环境和软件环境如下: 1、 硬件环境 处理器:Intel Pentium PIII 或更高处理器 内存:256MB 或更高 网络:局域网开发该系统应尽可能采用高档的硬件。因此,在应用时应采用更好的配置。2、 软件环境 操作系统:Windows 2000 /Windows XP / Windows 2003 开发平台:Microsoft Visual C+ 6.0开发语言:MFC3.2 关键技术3.2.1 .Visual C+介绍和其他编程工具相比,Visual C+在提供可视化编程方法的同时,适应于编写直接对系统进行底层操作的程序.其生成代码的质量,也要优于许多其他开发工具.Visual C+所提供的 MFC(Microsoft 基本类库),对 Window98/NT/2000 所用的Win32 API(应用程序接口 )进行了彻底的封装 ,这使得可以使用完全的面向对象的编程方法来进行 Windows 程序的开发 ,并能够大大缩短程序的开发周期,降低开发成本,把 Windows 程序员从大量复杂的劳动中解放出来 .Visual C+给应用程序的开发人员提供了丰富的功能, Visual C+通过 MFC 库提供了一个完整的应用程序的骨架,开发人员可以忽略应用程序的入口点和结束地点,并且可以忽略消息在应用程序的流动顺序,通过 MFC 的支持 Visual C+也提供了 Document-View(文档视图)的应用程序的结构,开发人员可以将数据保存在本科毕业设计(论文)全套资料扣扣:194535455Document 类的对象上,而在屏幕的显示的数据由 View 类的对象来负责。通过 MFC的支持 Visual C+也实现了面向对象领域的 RTTI(RunTime Type Information 运行时类型识别) 、Dynamic Creation(动态创建) 、 (Persitence)永久保存机制,同时他也实现了 Windows 下的 Message Mapping(消息映射)和 Command Routing(命令传递) ,通过 MFC 的 Cdatabase 和 Crecordset 类 Visual C+可以实现数据库的应用,通过 ChtmlStream、CHttpFilter、CHttpFilterContext、ChttpServer 等ISAPI(Internet Server API)可以很好的支持 Internet 上的 http 协议相关的操作。由于 MFC 涉及到应用程序开发的各个领域,其 Visual C+成为倍受欢迎的开发工具。3.2.2 M F CMFC,微软基础类(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+专配的。3.2.3 WINDOWS SOCKETS 网络编程接口选定 WINDOWS 平台开发网络通信程序,可以选择 WINDOWS 的 SOCKETS 编程接口,Windows Sockets 是一套开放的、支持多种协议的 Windows 下的网络编程接口。现在的 Winsock 已经基本上实现了与协议无关,你可以使用 Winsock 来调用多种协议的功能,但较常使用的是 TCP/IP 协议。Windows sockets 无疑是我们进行网络编程的利器。所有的 Windows Sockets 实现都支持流套接口和数据报套接口。应用程序调用 Windows Sockets 的 API 实现相互之间的通讯。Windows Sockets 又利用下层本科毕业设计(论文)全套资料扣扣:194535455的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图 3.1 所示:应用程序 1 应用程序 2网路编程界面,例如 Window Scokets网络通讯协议服务界面,例如 TCP/IP操作系统,例如 Windows物理通讯介质图 3.1Windows Sockets 实现通讯工作的各层关系图3.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 服务通常有一个客户/服务器的关系。两个系统间的多重连接是这样本科毕业设计(论文)全套资料扣扣:194535455相互确认并协调一致的,TCP 或 UDP 连接唯一地使用每个信息中的如下四项进行确认: 源 IP 地址 发送包的 IP 地址。 目的 IP 地址 接收包的 IP 地址。源端口 源系统上的连接的端口。 目的端口 目的系统上的连接的端口。端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个 16 比特的数。服务进程通常使用一个固定的端口,例如,SMTP 使用 25。这些端口号是“广为人知”的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯,图如 3.2 所示。本科毕业设计(论文)全套资料扣扣:1945354553.2 面向连接的(TCP)连接过程4 系统分析与设计4.1 系统分析4.1.1 系统需求聊天交流是目前互联网提供的主要内容。聊天系统有多种实现方式,类似 ICQ属于一种点对点的聊天系统;还有一种是基于 Socket 的集中式聊天系统,这种聊天系统需要登陆统一的聊天服务器。在基于 Socket 的聊天系统中,主要有两种角色:服务器和客户端,不同的客户端登陆集中式的服务器,通过服务器将一个客户端发本科毕业设计(论文)全套资料扣扣:194535455出的信息推送到其他所有客户端。基于 Socket 的聊天系统最早实现是使用网页刷新方式,通过客户端不断地自动刷新,服务器端整个页面内容下载到客户端显示,这种方式的聊天速度慢,而且有刷屏现象,很快被更新的聊天技术所替代。 聊天系统在客户端和服务器之间主要传送的是文字信息,服务器端只需要把最近的文字信息推送到客户端,这样减少了网络传输内容,节省了网络传输的时间,无疑提高了聊天速度。这种“推”技术是目前基于 Socket 聊天系统的主要实现技术。在基于 Socket 的聊天系统,客户端和服务器必须保持随时随地的连接。这有别于普通 Web 浏览的连接方式。在使用浏览器访问服务器时,先由客户端发出 HTTP 协议,然后服务器响应处理这个客户端的响应,再返回处理结果;请求(Request)和响应(Response)是一种一对一的前后因果关系。而在基于 Socket 的聊天系统中,客户端发出聊天信息的同时,客户端也在接受服务器发送过来的其他人的聊天信息,因此,请求和响应不存在那种前后对应关系,是两种分别独立进行的进程。因为服务器任何时候都可能发送信息到客户端,因此,客户端和服务器一旦建立连接,必须能让服务器在以后发送中寻找定位到这个连接。局 域 网 聊 天 系 统 使 该 系 统 的 用 户 能 够 通 过 客 户 端 登 入 到 该 系 统 , 然 后 直 接 与 系统 交 互 。 首先,需启动服务器,进行服务器的配置,进行正确的服务器配置和数据库连接并测试成功后,开启服务器。接下来,在客户端,该系统的用户能够通过登陆界面进入,然后直接与系统交互,进行文字传送。4.1.2 需求分析该聊天程序分为服务器端和客户端两个部分。服务器端: 能够正确地、无冲突地启动服务器。 监听指定的端口,等待用户的连接。 建立与客户端的逻辑连接,并能通知其他好友。 向新进入的好友发出已上线的好友名单。本科毕业设计(论文)全套资料扣扣:194535455 接收客户端的消息请求,并能正确无误地处理消息,并能发出消息到客户端。 反映当前在线人数和在线好友状况。 及时地反映发出地消息和聊天消息。 当好友断开与服务器端地连接时,服务器能够正确地断开连接,并通知其他用户。 当用户违反聊天系统规定时,服务器系统管理员能够断开与此用户的连接。客户端: 能够正确启动应用程序,并能向服务器发出连接请求。 反映当前好友在线情况。 能够向群体或指定好友发出消息 能够及时接收好友发出消息,并通知用户。 能够正确地断开与服务器端地的连接。关系图如图 4.1 所示:Client Server ClientClientClient更新成员列表成员列表请求应答发送消息图 4.1 关系功能图4.2 系统设计4.2.1 设计原理考虑到系统的可重用性和伸缩性,需要将本系统的网络通信底层和应用系统分离开。这样,基于可重用的网络通信层,可以实现其他各种实时性较高的应用系统。本系统在架构设计上将分 4 个层次,如图 4.2 所示。本科毕业设计(论文)全套资料扣扣:194535455CAsyncSocketCSocket聊天应用系统Window Sockets API 图 4.2 架构层次本系统最底层是 Socket 通信层,将负责客户端和服务器之间快速的数据交换,它通过接口层和最上面应用层保持实时数据联系。用户从客户端进入到本系统前,将实现统一的用户登录验证机制。Socket 底层设计分两大部分:协议设计和连接处理设计:协议设计和连接处理设计;CSocket 层的目的是提供底层和应用蹭一个中介媒体的作用,但是不能设计得太复杂,以免延误数据传送时间。4.2.2 客户端工作流程本科毕业设计(论文)全套资料扣扣:194535455图 4.3 连接服务器(1)用户输入服务器端的 IP 和昵称后,单击连接聊天服务器按钮,客户端程序将建立一个连接套接字 Socket 与服务器端连接,如果成功,将昵称通过这个 Socket发送到服务器端。(2)用户输入聊天信息后,单击发送信息按钮,通过这个 Socket 来发送给服务器。(3)用户如果单击“私聊”复选框,单击发送信息按钮后,先判断是否选择私聊对象,在发出“PrivChat| 私聊对象|私聊内容” 。(4)当客户端单击“离开聊天室”按钮断开连接前向服务器发出“CLOSEUSE | 昵称”信息。本科毕业设计(论文)全套资料扣扣:1945354554.2.3 服务器段工作流程图 4.4 启动服务器流程(1)单击启动按钮,服务器端通过 create()调用创建一个侦听套接字 Socket 后与指定的本地端口 6767 绑定,就可以在该端口进行侦听 listen()。(2)如果有客户端连接请求,将触发侦听套接字的 OnAccept 事件,在事件处理函数中,创建新的连接套接字,用于与客户端的通信。并将该连接套接字 Socket 加入链表类 CClientSocketList 指针 List(&CCSL)所指的链表中。(3)每当一个连接套接字 Socket 接收到信息,都将会触发服务器端对应的连接套接字的 OnReceive 事件。在 OnReceive 事件处理函数中,读取客户端发送的聊天信息,根据细化聊天室程序通信规程进行分析。如果是新用户登录或用户离开或公开聊天信息,则再把接收到的信息发送给每一个连接套接字 Socket。如果是新用户登录或用户离开或私聊信息,则发给找到的私聊对象。(4)当客户端断开连接前向服务器发出“CLOSEUSE | 昵称” 。服务器在 OnReceive事件处理函数中在 List 所指的链表中释放该连接套接字,并同时将更新在线用户列表发给所有客户端。(5)当单击聊天室服务器“停止”按钮,停止端口侦听,广播聊天服务器停止消息,释放链表 CCSL 中套接字,清除服务器在线用户列表。本科毕业设计(论文)全套资料扣扣:1945354554.2.4 功能设计局域网聊天系统以局域网内的用户为应用对象,经过各方面需求分析,该系统主要由服务器端和客户端两部分构成,各功能模块如图 4.5、4.6 所示。图 4.5 服务器端系统功能模块图发出用户登陆成功消息接收消息接收连接请求消息接收传输数据消息接收客户端退出消息发出消息发出用户重名消息发出传输数据消息发出好友名单消息发出添加好友消息发出好友离开消息发出聊天室关闭消息聊天系统服务器端启动本科毕业设计(论文)全套资料扣扣:194535455图 4.6 客户端系统功能模块图接收消息发出用户登陆成功消息发出用户重名消息发出传输数据消息发出好友名单消息发出好友离开消息发出聊天室关闭消息发出消息接收连接请求消息接收传输数据消息接收客户端退出消息聊天系统服务器端本科毕业设计(论文)全套资料扣扣:1945354555 系统实现5.1 服务器端设计实现5.1.1 服务器端静态类图图 5.1 服务器静态类图5.1.2 服务器主要类介绍 CServerDlg 类:创建服务器主窗口,管理用户信息链表,管理在线用户链表,管理离线用户链表,读取保存用户信息,读取保存离线消息等。表 5-1 类成员函数函 数 名 称 返 回 值功 能CserverDlg 无 构造函数CServerDlg() 无 析构函数StartService() BOOL 启动服务Init() BOOL 初始化ProcessPendingRead(CArchive *pArchiveIn, CArchive *pArchiveOut,CClientSocket)BOOL 接收数据ReleaseChatter(CClientSocket *pClientSocket)Void 离线时删除用户DeleteTempUserList(CObList &obList) Void 删除临时链表UpdateUserList(constCUserInfo&userInfo,CClientSocket *pClientSocket)BOOL 更新用户链表TransmitMsg(constCChatPacket&packet,CClientSocket*pClientSocket)BOOL 转发离线消息UpdateServerListCtl(const CObList &obList)Void 更新服务器界面OnInitDialog() BOOL 初始化对话框本科毕业设计(论文)全套资料扣扣:194535455 CListenSocket 类 :派生于 MFC 的 CSocket 类,用于接受客户端的连接请求,在该类中重写了 CAsyncSocket 类 OnAccept()虚函数。当客户端连接服务器时,OnAccept()函数被调用。表 5-2 成员函数函 数 名 称 返 回 值 功 能CListenSocket(CServerDlg*pServerDlg)无 构造函数ClistenSocket() 无 析构函数VoidOnAccept(intnErrorCode)void 接受连接请求 CClientSocket 类:派生与 MFC 的 CSocket 类,用于接收客户端和向其发送数据。在该类中重写 CAsyncSocket 类 OnReceive()和 OnClose()虚函数。表 5-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 关闭套接字 CServerAddressDlg: 用与设置服务器地址和断口。 CServerApp:用于生成唯一实例。本科毕业设计(论文)全套资料扣扣:1945354555.1.3 服务器端主要过程介绍服务端界面设计如下图 5.2 所示。聊天室服务器窗口有两个列表框,一个显示用户聊天信息,另一个显示在线用户昵称信息。其中“启动”按钮、 “停止”按钮分别是启动和中止聊天服务的。5.2 服务器窗口其实现过程:(1)首先利用 MFC AppWizardEXE建立一个新的 MFC 程序,取名为ChatRoomServer,在 MFC AppWizard Step 1 的时候我们选择 Dialog based,注意一定不要忘记在 Step 2 时钩上 Windows Sockets。(2) 需要在默认建立的主对话框上删除已有控件,用 Class Wizard 为这两个按钮增加上对应的函数:OnButtonStart() 、OnButtonStop()。按钮对应的函数中ListenSocket 成员变量是 CListenSocket 类类型。(3) 创建侦听套接字 CListenSocket 类利用类向导创建一个基类为 Csocket 的 CListenSocket 类,在 CListenSocket 类中增加 CClientSocketList CCSL 变量;增加一个虚函数 OnAccept。(4) 创建套接字链表类 CClientSocketList利用类向导创建一个为生成客户 Sockets 队列的链表类 CClientSocketList 类,“Class Type”列表框选择 Generic Class,如下图 5.3 所示。本科毕业设计(论文)全套资料扣扣:194535455图 5.3 基类 Generic Class 的派生类其中的成员变量 Head 指针是由 CSocket 直接派生出来的 CClientSocket 类。CClientSocketList 类构造函数完成 head 初始化,同时增加将 Socket 加入链表队列 Add()函数、仅仅向私聊用户发送信息 OnlySend()函数、链表队列中删除Socket 的 Del()函数、所有用户发送聊天信息 Sends()函数。(5) 创建连接套接字 CClientSocket 类利用类向导创建一个基类为 Csocket 类的 CClientSocket 类,CClientSocket类中增加 CClientSocket(CClientSocketList *)构造函数;增加一个虚函数OnReceive() 。它接收客户端的信息,根据细化聊天室程序通信规程来转发聊天信息或更新在线用户列表。启动服务器:启动服务器的过程就是创建套接字并开始监听客户端连接的过程。主要函数: CSocket:Create()函数;执行过程: CSocket:Cretate -CAsyncSocket-CAsyncSocket-CAsyncSocket:Socket()-CAsyncSocket:Bind()-CAsyncSocket: AtachHandle()-CAsyncSocket:Asyncselect()MFC 的底部函数在 AttachHandle()中完成,流程图 5.4 所示:本科毕业设计(论文)全套资料扣扣:194535455图 5.4 服务器启动流程图初始化: 列表试图控件初始化 用户列表初始化 读取离线消息;离线消息包括:发送消息的用户,接收消息的用户,接收和发送消息的时间接受客户端请求:CListenSocket:OnAccept()-CServerDlg:ProcessPendingAccept().接收数据:在FD_READ 网络事件发生时,CClienSocket:OnReceive()被调用.在该函数中与CSocket, CArchive, CSocketFile 协同工作完成文件的工作,同时调用 CSocket 类的Receive()函数。本科毕业设计(论文)全套资料扣扣:1945354555.2 客户端设计实现5.2.1 客户端静态类图图 5.5 静态类图5.2.2 客户端主要类介绍 CClientDlg 类:创建客户端主窗口,创建聊天窗口。表 5-4 成员函数函 数 名 称 返 回 值 功 能 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 双击列表视图控件的消息响应函数本科毕业设计(论文)全套资料扣扣:194535455 CChatDlg 类:编辑和显示消息。该类有三个构造函数用于创建 3 种不同情况下的窗口:(1) 用与主动与其他用户聊天。对方可以是在线,也可以是离线状态。(2) 显示离线消息窗口。(3) 被动聊天窗口,其他用户向该用户发起的聊天请求所创建的窗口。表 5-5 成员函数函数名称 返回值 功能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()函数; CClientLoginDlg 类:派生与 CDialog 类,用与创建服务器对话框。本科毕业设计(论文)全套资料扣扣:1945354555.2.3 客户端主要过程介绍客户端分需要输入一些登录信息,如下图 5.6 所示。其中上方有两个编辑框,其中一个输入用户昵称信息,另一个用于输入服务器 IP 地址信息。聊天室客户端窗口中间有两个列表框,一个显示用户聊天信息,另一个显示在线用户昵称信息。下方发言边的编辑框,用于输入聊天信息。两个按钮,一个用来发送信息,另一个用来关闭聊天室客户端窗口,退出聊天室。图 5.6 聊天室客户端窗口其实现过程:(1) 启动 VC,利用 MFC AppWizardEXE建立一个新的 MFC 程序,取名为ChatRoom,在 MFC AppWizard Step 1 的时候我们选择 Dialog based,在 Step 2 时我们一定要选择上 Windows Sockets 选项,之后的几步我们就可以使用默认值了。聊天室客户端窗口是 AppWizard 生成的时候建立的。本科毕业设计(论文)全套资料扣扣:194535455图 5.7 MFC AppWizard Step 2(2) 创建连接套接字 CClientSocket 类按 CTRL+W 利用类向导添加一个基类为 CSocket 类的 CClientSocket 类,其中有一个很重要的是重载虚成员函数 OnReceive() ,它调用了主对话框的成员函数GetMessage 来实现了立即显示从服务器获得的聊天信息到聊天室客户端窗口对话框中的功能。在 CClientSocket 类中添加一个指向对话框类的数据成员myDlg,NikeName。一个成员函数 SetDlg(3)对话框类中的函数聊天客户端 CChatRoomDlg 对话框初始化 OnInitDialog()函数中添加代码实现“发送信息”按钮状态为无效;“离开聊天室”按钮状态为无效。添加客户端窗口的“连接服务器”按钮响应响应函数 OnConnectButton()。它处理网络连接,如果连接服务器成功,发送成功登陆者昵称给服务器端接收,服务器端判断 NEW_USER,知道新用户登陆,将更新在线用户列表字符串后,转发给各个客户端中显示。添加客户端窗口的“发送信息”按钮单击响应函数 OnButton1()。它首先判断私聊复选框是否选中,如果选中则要保证选择私聊对象,将发出的信息以“PrivChat|+私聊对象+|登陆昵称+悄悄对+私聊对象+说+发送信息框的内容”的形式发给服务器端。服务器端判断首为 PrivChat 从而知道按私聊信息处理。如果未选中,则不含自定义格式。仅仅以“登陆昵称+说+发送信息框的内容”的形式发给服务器端。本科毕业设计(论文)全套资料扣扣:194535455添加聊天室客户端窗口“退出聊天室”按钮的单击响应函数 OnButton2()。它首先发送断开信息“CLOSEUSE|登陆昵称”后,关闭对话框。添加聊天室客户端窗口对话框的成员函数 GetMessage() 。它通过调用连接套接字的 Receive()接收服务器端信息,根据细化聊天室程序通信规程来显示聊天信息或更新在线用户列表。本科毕业设计(论文)全套资料扣扣:1945354555.3 系统测试5.3.1 测试意义本章对我们的系统做具体的测试,验证系统的功能是否得以实现。5.3.2 测试的目标(1).测试是为了发现程序中的错误而执行的程序的过程;(2).好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3) 成功的测试时发现了至今为止尚未发现的错误的测试。从上述规则可以看出,测试的正确定义是“为了发现程序中的错误而执行程序的过程” 。正确认识测试是非常重要的,测试目标决定了测试方案的设计。没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。5.3.3 测试的方法软件的测试分为两种:黑盒测试和白盒测试。黑盒测试:黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试地,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试。它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身有问题或规格说明的规定有误,用墨盒测试方法是发现不了的。白盒测试:软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:1、对程序模块的所有独立的执行路径至少测试一遍。2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。本科毕业设计(论文)全套资料扣扣:1945354553、在循环的边界和运行的界限内执行循环体。4、测试内部数据结构的有效性,等等。5.3.4 测试结果黑盒测试:主要是同学帮助一起测试系统的功能,看看主要功能是否能得以实现。白盒测试:主要是在编写代码的过程中对各个类进行测试,检查各个类的功能是否实现,最后是对整个系统的测试,进一步检查各个类的功能。经过以上测试,系统基本完成所需功能。表格 4.3 测试用例功能描述 用户登录用例目的 测试用户登录功能是否正常前提条件 客户端程序和服务器端程序处于运行状态输入/动作 期望的输出/相应 实际情况示例 1:输入正确的用户名、服务器 IP 和端口号用户成功登陆,显示连接服务器成功 与期望输出相同示例 2:不输入用户名、输入服务器 IP 和端口号提示用户“请输入 IP!” 与期望输出相同示例 3:输入正确的用户名,输入错误服务器 IP 和端口号用户登陆失败,提示连接服务器失败 与期望输出相同示例 4:输入错误的端口号,输入正确服务器 IP用户登录失败,提示连接服务器失败 与期望输出相同 本科毕业设计(论文)全套资料扣扣:1945354556 总结经过 4 个月紧张的毕业设计,局域网聊天软件已基本完成,系统基本功能已经实现,测试运行也完全正常。该系统完成了服务器端的配置与开启,客户端用户的登陆、文字传送的功能。该系统操作简便、易于使用。在毕业设计的初期阶段,主要学习了与本课题相关的理论知识,包括:VC+的设置与开发,MFC 下的软件开发过程等相关技术,socket 编程技术和多线程开发技术,并完成客户端和服务器端文字信息传递实验。在查阅大量资料逐渐了解系统需求后,编写了系统的需求分析规格说明书和系统概要说明书。接着便进入了系统详细设计和编码阶段,在这个阶段,由于自己动手经验不足和对开发工具的陌生,系统遇到了很多大大小小的问题,比如如何向注册表中写入连接字符传,如何将所有留言状态置为已读,如何利用多线程、非堵塞I/O 技术提高系统性能,在一次次克服困难的过程中,得到了极大的锻炼,基 本 上掌 握 了 一 些 的 编 程 技 巧 , 同 时 也 获 得 了 许 多 宝 贵 的 软 件 开 发 经 验 和 技 巧 , 这 为 今后 的 学 习 工 作 打 下 了 坚 实 的 基 础 。 而这是一次丰富的收获。 在这段时间里学到了很多以前没有学到的知识,同时也将以前所学过的知识运用到实践项目中,在提高理论知识的基础上,也充分地锻炼了自己的动手能力。当然这个系统还存在许多有待完善之处:功能相对较少,有待于添加,比方说像文件传输,查找等功能。在文字传送的同时增加表情发送的功能;应使用户能够实现个人信息如昵称、密码等的修改;界面设计的不够精致美观。由于自己经验不足且时间有限,所以界面设计不尽人意;用户的权限设置应更加严谨,层次更加清晰,多功能的实现不同权限的用户对系统不同功能的操作。除了以上列举的一些不足之处外,此系统还有其它很多功能需要增强,由于个人水平有限,时间也比较紧,只能实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46168-2025建筑和土木工程密封胶可操作时间的测定
- 2025江西赣州市宁都县选调县内教师190人考前自测高频考点模拟试题及1套完整答案详解
- 2025年长春急救中心公开招聘编外聘用制工作人员(10人)考前自测高频考点模拟试题附答案详解(完整版)
- 安全培训教师年度述职课件
- 2025福建三明市清流县金星园建设发展有限公司招聘消防驾驶员2人模拟试卷附答案详解(考试直接用)
- 广汽安全驾驶培训课程课件
- 2025江苏徐州东创新能源科技有限公司招聘19人模拟试卷及1套参考答案详解
- 安全培训教室的特殊名字课件
- 安全培训教室单人面积课件
- 安全培训教学配乐课件
- 幼儿园红色小故事PPT:抗日小英雄王二小的故事
- 如何理解欧盟MDR临床评价要求
- 监理业务手册(范本)
- 2022年国家公务员考试申论真题及答案解析(地市级)
- 名师成长的路径与修炼(教师版)课件
- 案外人执行异议之诉课件
- T-CSCS 015-2021 钢结构深化设计制图标准-(高清版)
- 西方经济学导论全套课件
- “基础教育精品课”PPT课件模板
- 第8部分消防设施标识可视化
- 简约医院医疗工作汇报工作总结PPT模板
评论
0/150
提交评论