详细功能分析报告

上传人:B**** 文档编号:113282980 上传时间:2022-06-24 格式:DOCX 页数:19 大小:205.75KB
返回 下载 相关 举报
详细功能分析报告_第1页
第1页 / 共19页
详细功能分析报告_第2页
第2页 / 共19页
详细功能分析报告_第3页
第3页 / 共19页
点击查看更多>>
资源描述
.一、软件简介本软件主要完成简单的多客户端实时通信,基于TCP 协议的局域网聊天软件。首先启动服务器, 服务器启动后等待客户端的请求,同时显示出离线用户列表。客户端通过输入账号和密码进行登录,如果登录成功,则进入聊天界面,同时显示当前在线好友列表和离线好友列表,如果登录失败, 则提示用户账号或者密码错误。当多个客户端进入聊天室后,客户之间可以进行群聊, 用户同时可以选择与当前在线的某一好友进行私聊。二、需求分析2.1 、任务概述随着信息化时代的快速发展,互联网的应用越来越广泛,同时实时聊天通信技术变得日益重要, 不论在学校、 家庭或者是公司, 局域网聊天已经离不开我们的日常生活。本软件所设计的局域网聊天系统能够实现局域网的聊天、群聊、私聊等功能。2.2 、需求规定该软件可以完成多客户端的通信,服务器端包括:服务器启动,离线用户列表和在线用户列表, 同时还要完成客户端登录信息的验证,当有用户登录成功时,服务器端实时刷新在先用户列表。客户端包括:用户登录,当用户登录成功后,进入聊天界面,用户之间可以进行群聊和私聊。2.3 、对性能的规定、时间特性要求所有发送操作的响应的时间一般不超过1 秒,大量的信息发送后, 应该在 5Word 资料 .秒显示,如果未发送失败,会提示出相关的错误信息。当存在离线用户上线时,用户在线列表更新时间在3 秒响应。、运行环境规定该软件只能在 windows环境平台下运行, 存在 256M 以上,硬盘 1G 空余空间。三、总体设计3.1 、软件总体功能结构图图(3.1)软件总体功能结构图如图( 3.1 )所示为该软件总体功能结构图,其中主要包括两大部分:服务器端和客户端。其中服务器端主要包括:连接数据库、用户列表更新、客户端信息处理。客户端包括:客户端登录、在线用户列表、离线用户列表、用户群聊、用户私聊。Word 资料 .3.2 、软件工作流程图图 (3.2)软件工作流程图如图( 3.2 )所示,为整个软件工作的流程图,首先开启服务器,服务器等待客户端的请求连接,然后客户端发送连接请求(发送账号和密码),然后等待服务器的回应,服务器收到连接请求后,验证客户信息,如果信息验证成功,则连接建立成功,好友之间通过服务器端向客户端发送好友信息。3.3 、服务器总体设计服务器端主要功能:(1)数据库设计:设计数据库,用户存储客户信息,例如用户的账号、密码、昵称等。(2)客户端请求信息处理:主要用来处理用户登录验证,如果验证成功,则给客户端回复登录成功信息。(3)客户端信息转发:主要完成客户之间通信时,首先客户发送信息给服务器,服务器端然后在转发给其他的客户。(4)用户列表更新:主要用来处理当有新客户端登录成功后,对现在用户Word 资料 .列表和离线用户列表进行更新。3.4 、客户端总体设计客户端主要功能:(1)客户端登录:主要完成客户端的登录,客户端输入用户名和密码,然后进行登录,如果登录成功,则跳转到聊天模块,如果登录失败,则提醒用户名或者密码错误。(2)连接服务器:通过当前输入的账号和密码,连接服务器开启的端口号。(3)实时通信模块:主要完成在线用户之间进行群聊和私聊。(4)用户列表更新:主要显示当前在线好友列表和离线好友列表。Word 资料 .四、详细设计4.1 、软件详细的功能流程图.服务器端初始化套接字AfxSocketInit()创建 Socket 对象:CServerSocket *m_pSocket设置绑定 Socket 端口号: 9999 m_pSocket-Create(9999)开始监听客户端的请求m_pSocket-Listen()服务器端接收OnAccept(int nErrorCode)服务器端处理消息OnReceive(int nErrorCode)If(type = LOGIN_IO)if(type = PASS_SUCCESS)用户信息验证成功Header headHead.type = PASS_SUCCESS更新在线用户列表:UpdateUser()客户端信息转发if(type = SEND_MESSAGE)建立连接Send(Header)Send(Header)Send(Header)客户端初始化套接字AfxSocketInit()动态分配 Socket 套接字 CSocketClient *clientSocket动态分配登录对话框CDlgLogin* loginDlg用户、密码是否为空验证IdentifyNull(name,password,server)创建套接字并且连接服务器CreateSocket(server)Connect(socketServer,9999)向服务器发送用户登录信息Head.type = LOGIN_IO head.type = PASS_SUCCESSOnReceive(int nErrorCode)登录成功if(type = PASS_SUCCESS)进入聊天界面在线用户列表更新UpdateUser()接收服务器端转发的消息if(type = SEND_MESSAGE)chatDlg-GetSendMessage()图(4.1) 软件详细功能流程图Word 资料 .4.2 、数据库设计该系统采用的是微软的Access数据库,用来存放用户信息,数据字典如下表所示:表(一)用户信息字段名称备注账号昵称StrName密码strPass真实strRealName性别strSex本系统将数据库操作封装为一个类,方便开发人员的操作,相关的函数介绍如下所示:打开数据库函数: void OpenDataBase();关闭数据库函数: void CloseDataBase();打开记录集: _RecordsetPtr& OpenRecordset(CString sql);关闭记录集: void CloseRecordset();4.3 、程序中定义的核心数据结构1、定义消息头的数据结构typedef struct tagHeaderchartype;intlen; Header, *pHeader;以上结构体主要包含两个部分容,type为 char 型字符,用来存储用户发送的是什么类型的消息,type 定义的取值如下所示:Word 资料 .#define LOGIN_IO1/ 用户登录消息#define SEND_MESSAGE3/ 用户发送消息#define PRIVATE_MESSAGE4/ 用户私聊消息#define PASS_SUCCESS5/ 用户密码验证成功消息#define PASS_FAILED6/ 用户密码验证失败消息#define SERVER_STOP7/ 服务器停止消息#define ASK_NUM8/ 应答消息#define ASKNUM_FAILED9/ 应答失败消息#define PRIVATE_ASK10/ 私聊应答消息#define PRIVATE_REFUSE11/ 私聊拒绝消息以上为该软件定义的头消息结构的类型,主要包括:用户登录消息、用户发送消息、用户私聊消息、用户密码验证成功消息、用户密码验证失败消息、服务器停止消息、应答消息、应答失败消息、私聊应答消息、私聊拒绝消息。用户通过发送不同的消息类型给服务器,服务器收到消息类型后进行判断,依据不同的消息类型进行不同的处理。2、定义用户登录信息数据结构typedef struct LogonUserCString name;CString password;Word 资料 . User, *pUser;以上结构体主要包含两部分:用户名和密码。当用户登录时,客户端将用户发送给服务器端,服务器端接收到后,对用户名和密码进行验证。4.4 、客户端详细设计1、用户登录模块( 1)用户登录模块流程图登录账号输入账号或密和密码码为空账号密码是否为空输入不为空账号、密码是否正确验证成功进入聊天主界面结束图 (4.2)用户登录模块流程图( 2)程序描述账号或密码错误对在用户登录信息界面中输入的各项信息进行初步检验。若发现错误,提示用户输入错误,让用户重新输入一次。若未发现错误,转入主界面。其中的错误种类有:输入数据不匹配、账号(数据库没有该账号)、密码(与对应账号的Word 资料 .密码不匹配)。在登录界面中,主要的函数为:判断是否为空: IdentifyNull(name,password,server);创建套接字: CreateSocket(server);发送账号: SendName(name);发送密码: SendPssword(password);其中发送账号和密码的函数为:/ 发送用户名void CDlgLogin:SendName(CString name)/ 设置发送类型head.type = LOGIN_IO;/ 发送长度head.len = name.GetLength();/ 发送登陆 LOGIN_IO 命令字m_pSocket-Send(char *)&head,sizeof(Header);/ 发送账号m_pSocket-Send(name,name.GetLength();/ 发送密码void CDlgLogin:SendPssword(CString password)head.type = PASS_SUCCESS;Word 资料 .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()其中发送消息的详细程序代码如下:void CChatClientDlg:OnButtonSend()Word 资料 ./ TODO: Add your control notification handler code here/ 得到发送的消息容CString messaegeContent;m_sendMessage.GetWindowText(messaegeContent);/ 判断发送的消息是否为空消息if(messaegeContent = )AfxMessageBox(不能发送空消息! );/ 设置鼠标的焦点CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_SENDINFO);pEdit-SetFocus();return;/ 发送消息的结构体Header head;/ 发送消息的命令字head.type = SEND_MESSAGE;/ 发送消息的长度head.len = messaegeContent.GetLength();/ 当前时间CTime time = CTime:GetCurrentTime();/ 时间格式Word 资料 .CString t = time.Format(%H:%M:%S);/ 昵称CString nikeName = theApp.m_strName;CString str = nikeName + + t + rn + +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();elseAfxMessageBox(网络传输错误! );3、私聊模块( 1)私聊模块流程图Word 资料 .用户一发送私聊请求等待应答开始进行聊天( 2)程序描述.用户二发送接收私聊请求同意是否同意私聊不同意发送拒绝请求消息聊天结束图 (4.4)私聊模块流程图私聊模块主要实现点对点之间的通信,相关的函数如下所示:发送消息: OnButtonSend()获取消息: GetMessage(CString strPrivtMsg)其中发送消息的详细代码如下所示:void CPrivateDlg:OnButtonSend()/ TODO: Add your control notification handler code here CString sendMsg; m_sendMessage.GetWindowText(sendMsg); if(sendMsg = )Word 资料 .AfxMessageBox(不能发送空消息! );CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_SEND);pEdit-SetFocus();return;Header head;if(theApp.PrivateOrLeave)head.type = LEAVE_MESSAGE;head.len = sendMsg.GetLength();CTime time = CTime:GetCurrentTime();CString t = time.Format(%H:%M:%S);CStringstr1 =theApp.m_strName+ + t + rn+ +sendMsg+rn;CStringstr=theApp.m_strLeaveDesName+&+theApp.m_strName+&+theApp.m_strName+t+rn+sendMsg+rn+&;/ 目的主机名 +本地主机名 +时间 +回车换行 +消息m_pSocket-Send(char *)&head,sizeof(Header);/ 发送离线消息命令字 LEAVE_MESSAGE,发送用户名 +时间 +消息容Word 资料 .if(m_pSocket-Send(LPCTSTR)str, str.GetLength()/ 清空发送文本框m_sendMessage.SetWindowText();/ 在接收文本框显示出来m_receiveMessage.ReplaceSel(str1);/ 在控件显示消息UpdateData(FALSE);CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_SEND);pEdit-SetFocus();elseAfxMessageBox(网络传输错误! ); .4.5 、服务器端详细设计1、启动服务器,等待客户连接/ 创建 socket对象CServerSocket *m_pSocket;Word 资料 .m_pSocket = new CServerSocket;if(!m_pSocket-Create(9999)AfxMessageBox(创建 Socket 失败! );return FALSE;if(!m_pSocket-Listen()AfxMessageBox(创建侦听发生错误! );return FALSE;2、用户列表更新( 1)用户列表更新流程图Word 资料 .服务器启动等待客户端连接是否有客户端请求连接是接收用户账号和密码验证用户身份是否成功否是想客户端发送刷新在线用户、离验证失败消息线用户列表图 (4.5)用户列表更新流程图( 2)程序描述在线用户列表和离线用户列表实时更新:UpdateUser(CServerClientSocketm_usrLeaveName,int type)离线用户列表显示: ListCloseUser()3、其他函数介绍.否等待客户端连接*pSocket,CString验证用户信息: IdentifyUser(CString name, CString password)通过账号得到用户名: GetNameByNum(CString num)通过账号得到密码: GetPassByNun(CString num)五、实现和运行结果1、服务器端Word 资料 .图 (5.1)服务器监听图 (5.2) 客户登录成功,服务器显示信息2、客户端图 (5.3) 客户端登录界面图 (5.4) 群聊模块Word 资料 .图 (5.5) 私聊请求模块图 (5.6) 私聊模块Word 资料 .
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿件


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!