您好,欢迎访问三七文档
一、软件简介本软件主要完成简单的多客户端实时通信,基于TCP协议的局域网聊天软件。首先启动服务器,服务器启动后等待客户端的请求,同时显示出离线用户列表。客户端通过输入账号和密码进行登录,如果登录成功,则进入聊天界面,同时显示当前在线好友列表和离线好友列表,如果登录失败,则提示用户账号或者密码错误。当多个客户端进入聊天室后,客户之间可以进行群聊,用户同时可以选择与当前在线的某一好友进行私聊。二、需求分析2.1、任务概述随着信息化时代的快速发展,互联网的应用越来越广泛,同时实时聊天通信技术变得日益重要,不论在学校、家庭或者是公司,局域网聊天已经离不开我们的日常生活。本软件所设计的局域网聊天系统能够实现局域网的聊天、群聊、私聊等功能。2.2、需求规定该软件可以完成多客户端的通信,服务器端包括:服务器启动,离线用户列表和在线用户列表,同时还要完成客户端登录信息的验证,当有用户登录成功时,服务器端实时刷新在先用户列表。客户端包括:用户登录,当用户登录成功后,进入聊天界面,用户之间可以进行群聊和私聊。2.3、对性能的规定2.3.1、时间特性要求所有发送操作的响应的时间一般不超过1秒,大量的信息发送后,应该在5秒内显示,如果未发送失败,会提示出相关的错误信息。当存在离线用户上线时,用户在线列表更新时间在3秒内响应。2.3.2、运行环境规定该软件只能在windows环境平台下运行,内存在256M以上,硬盘1G空余空间。三、总体设计3.1、软件总体功能结构图图(3.1)软件总体功能结构图如图(3.1)所示为该软件总体功能结构图,其中主要包括两大部分:服务器端和客户端。其中服务器端主要包括:连接数据库、用户列表更新、客户端信息处理。客户端包括:客户端登录、在线用户列表、离线用户列表、用户群聊、用户私聊。3.2、软件工作流程图图(3.2)软件工作流程图如图(3.2)所示,为整个软件工作的流程图,首先开启服务器,服务器等待客户端的请求连接,然后客户端发送连接请求(发送账号和密码),然后等待服务器的回应,服务器收到连接请求后,验证客户信息,如果信息验证成功,则连接建立成功,好友之间通过服务器端向客户端发送好友信息。3.3、服务器总体设计服务器端主要功能:(1)数据库设计:设计数据库,用户存储客户信息,例如用户的账号、密码、昵称等。(2)客户端请求信息处理:主要用来处理用户登录验证,如果验证成功,则给客户端回复登录成功信息。(3)客户端信息转发:主要完成客户之间通信时,首先客户发送信息给服务器,服务器端然后在转发给其他的客户。(4)用户列表更新:主要用来处理当有新客户端登录成功后,对现在用户列表和离线用户列表进行更新。3.4、客户端总体设计客户端主要功能:(1)客户端登录:主要完成客户端的登录,客户端输入用户名和密码,然后进行登录,如果登录成功,则跳转到聊天模块,如果登录失败,则提醒用户名或者密码错误。(2)连接服务器:通过当前输入的账号和密码,连接服务器开启的端口号。(3)实时通信模块:主要完成在线用户之间进行群聊和私聊。(4)用户列表更新:主要显示当前在线好友列表和离线好友列表。四、详细设计4.1、软件详细的功能流程图服务器端初始化套接字AfxSocketInit()创建Socket对象:CServerSocket*m_pSocket设置绑定Socket端口号:9999m_pSocket-Create(9999)开始监听客户端的请求m_pSocket-Listen()客户端初始化套接字AfxSocketInit()动态分配Socket套接字CSocketClient*clientSocket动态分配登录对话框CDlgLogin*loginDlg用户、密码是否为空验证IdentifyNull(name,password,server)创建套接字并且连接服务器CreateSocket(server)Connect(socketServer,9999)向服务器发送用户登录信息Head.type=LOGIN_IOhead.type=PASS_SUCCESS建立连接服务器端接收OnAccept(intnErrorCode)服务器端处理消息OnReceive(intnErrorCode)If(type==LOGIN_IO)if(type==PASS_SUCCESS)Send(Header)用户信息验证成功HeaderheadHead.type=PASS_SUCCESS更新在线用户列表:UpdateUser()Send(Header)OnReceive(intnErrorCode)登录成功if(type==PASS_SUCCESS)进入聊天界面在线用户列表更新UpdateUser()客户端信息转发if(type==SEND_MESSAGE)接收服务器端转发的消息if(type==SEND_MESSAGE)chatDlg-GetSendMessage()Send(Header)…………图(4.1)软件详细功能流程图4.2、数据库设计该系统采用的是微软的Access数据库,用来存放用户信息,数据字典如下表所示:表(一)用户信息字段名称备注账号昵称StrName密码strPass真实姓名strRealName性别strSex本系统将数据库操作封装为一个类,方便开发人员的操作,相关的函数介绍如下所示:打开数据库函数:voidOpenDataBase();关闭数据库函数:voidCloseDataBase();打开记录集:_RecordsetPtr&OpenRecordset(CStringsql);关闭记录集:voidCloseRecordset();4.3、程序中定义的核心数据结构1、定义消息头的数据结构typedefstructtagHeader{chartype;intlen;}Header,*pHeader;以上结构体主要包含两个部分内容,type为char型字符,用来存储用户发送的是什么类型的消息,type定义的取值如下所示:#defineLOGIN_IO1//用户登录消息#defineSEND_MESSAGE3//用户发送消息#definePRIVATE_MESSAGE4//用户私聊消息#definePASS_SUCCESS5//用户密码验证成功消息#definePASS_FAILED6//用户密码验证失败消息#defineSERVER_STOP7//服务器停止消息#defineASK_NUM8//应答消息#defineASKNUM_FAILED9//应答失败消息#definePRIVATE_ASK10//私聊应答消息#definePRIVATE_REFUSE11//私聊拒绝消息以上为该软件定义的头消息结构的类型,主要包括:用户登录消息、用户发送消息、用户私聊消息、用户密码验证成功消息、用户密码验证失败消息、服务器停止消息、应答消息、应答失败消息、私聊应答消息、私聊拒绝消息。用户通过发送不同的消息类型给服务器,服务器收到消息类型后进行判断,依据不同的消息类型进行不同的处理。2、定义用户登录信息数据结构typedefstructLogonUser{CStringname;CStringpassword;}User,*pUser;以上结构体主要包含两部分:用户名和密码。当用户登录时,客户端将用户发送给服务器端,服务器端接收到后,对用户名和密码进行验证。4.4、客户端详细设计1、用户登录模块(1)用户登录模块流程图登录账号密码是否为空输入账号和密码账号或密码为空输入不为空账号、密码是否正确验证成功账号或密码错误进入聊天主界面结束图(4.2)用户登录模块流程图(2)程序描述对在用户登录信息界面中输入的各项信息进行初步检验。若发现错误,提示用户输入错误,让用户重新输入一次。若未发现错误,转入主界面。其中的错误种类有:输入数据不匹配、账号(数据库没有该账号)、密码(与对应账号的密码不匹配)。在登录界面中,主要的函数为:判断是否为空:IdentifyNull(name,password,server);创建套接字:CreateSocket(server);发送账号:SendName(name);发送密码:SendPssword(password);其中发送账号和密码的函数为://发送用户名voidCDlgLogin::SendName(CStringname){//设置发送类型head.type=LOGIN_IO;//发送长度head.len=name.GetLength();//发送登陆LOGIN_IO命令字m_pSocket-Send((char*)&head,sizeof(Header));//发送账号m_pSocket-Send(name,name.GetLength());}//发送密码voidCDlgLogin::SendPssword(CStringpassword){head.type=PASS_SUCCESS;head.len=password.GetLength();//发送验证密码PASS_SUCCESS命令字m_pSocket-Send((char*)&head,sizeof(Header));m_pSocket-Send(password,password.GetLength());}2、群聊模块(1)群聊模块流程图用户一服务器用户三用户二发送消息发送消息发送消息图(4.3)群聊模块流程图(2)程序描述群聊主要完成多客户端之间的通信,主要的函数及其功能如下:更新用户列表:UpdateUser()接收消息:GetSendMessage()发送消息:OnButtonSend()其中发送消息的详细程序代码如下:voidCChatClientDlg::OnButtonSend(){//TODO:Addyourcontrolnotificationhandlercodehere//得到发送的消息内容CStringmessaegeContent;m_sendMessage.GetWindowText(messaegeContent);//判断发送的消息是否为空消息if(messaegeContent==){AfxMessageBox(不能发送空消息!);//设置鼠标的焦点CEdit*pEdit=(CEdit*)GetDlgItem(IDC_EDIT_SENDINFO);pEdit-SetFocus();return;}//发送消息的结构体Headerhead;//发送消息的命令字head.type=SEND_MESSAGE;//发送消息的长度head.len=messaegeContent.GetLength();//当前时间CTimetime=CTime::GetCurrentTime();//时间格式CStringt=time.Format(%H:%M:%S);//昵称CStringnikeName=theApp.m_strName;CStringstr=nikeName++t+\r\n++messaegeContent;//发送命令字m_pSocket-Send((char*)&head,sizeof(Header));//发送消息if(m_pSocket-Send((LPCTSTR)str,str.GetLength())){//清空消息框m_sendMessage.SetWindowText();CEdit*pEdit=(CEdit*)GetDlgItem(IDC_EDIT_CHATINFO);pEdit-SetFocus();}else{AfxMessageBox(网络传输错误!);}}3、私聊模块(1)私聊模块流程图用户一用户二发送私聊请求是否同意私聊接收私聊请求等待应答同意开始进行聊天不同意发送拒绝请求消息聊天结束发送图(4.4)私聊模块流程图(2)程序描述私聊模块主要实现点对点之间的通信,相关的函数如下所示:发送消息:OnButtonSend()获取消息:GetMessage(CStringstrPri
本文标题:详细功能分析报告
链接地址:https://www.777doc.com/doc-5323554 .html