详细功能分析报告_第1页
详细功能分析报告_第2页
详细功能分析报告_第3页
详细功能分析报告_第4页
详细功能分析报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、一、软件简介 本软件主要完成简单的多客户端实时通信,基于TCP协议的局域网聊天软件。首先启动服务器,服务器启动后等待客户端的请求,同时显示出离线用户列表。客户端通过输入账号和密码进行登录,如果登录成功,则进入聊天界面,同时显示当前在线好友列表和离线好友列表,如果登录失败,则提示用户账号或者密码错误。当多个客户端进入聊天室后,客户之间可以进行群聊,用户同时可以选择与当前在线的某一好友进行私聊。二、需求分析2.1、任务概述 随着信息化时代的快速发展,互联网的应用越来越广泛,同时实时聊天通信技术变得日益重要,不论在学校、家庭或者是公司,局域网聊天已经离不开我们的日常生活。本软件所设计的局域网聊天系统

2、能够实现局域网的聊天、群聊、私聊等功能。2.2、需求规定 该软件可以完成多客户端的通信,服务器端包括:服务器启动,离线用户列表和在线用户列表,同时还要完成客户端登录信息的验证,当有用户登录成功时,服务器端实时刷新在先用户列表。客户端包括:用户登录,当用户登录成功后,进入聊天界面,用户之间可以进行群聊和私聊。2.3、对性能的规定2.3.1、时间特性要求 所有发送操作的响应的时间一般不超过1秒,大量的信息发送后,应该在5秒内显示,如果未发送失败,会提示出相关的错误信息。当存在离线用户上线时,用户在线列表更新时间在3秒内响应。2.3.2、运行环境规定 该软件只能在windows环境平台下运行,内存在

3、256M以上,硬盘1G空余空间。三、总体设计3.1、软件总体功能结构图图(3.1) 软件总体功能结构图 如图(3.1)所示为该软件总体功能结构图,其中主要包括两大部分:服务器端和客户端。其中服务器端主要包括:连接数据库、用户列表更新、客户端信息处理。客户端包括:客户端登录、在线用户列表、离线用户列表、用户群聊、用户私聊。3.2、软件工作流程图图(3.2) 软件工作流程图 如图(3.2)所示,为整个软件工作的流程图,首先开启服务器,服务器等待客户端的请求连接,然后客户端发送连接请求(发送账号和密码),然后等待服务器的回应,服务器收到连接请求后,验证客户信息,如果信息验证成功,则连接建立成功,好友

4、之间通过服务器端向客户端发送好友信息。3.3、服务器总体设计服务器端主要功能: (1)数据库设计:设计数据库,用户存储客户信息,例如用户的账号、密码、昵称等。(2)客户端请求信息处理:主要用来处理用户登录验证,如果验证成功,则给客户端回复登录成功信息。(3)客户端信息转发:主要完成客户之间通信时,首先客户发送信息给服务器,服务器端然后在转发给其他的客户。(4)用户列表更新:主要用来处理当有新客户端登录成功后,对现在用户列表和离线用户列表进行更新。3.4、客户端总体设计客户端主要功能:(1)客户端登录:主要完成客户端的登录,客户端输入用户名和密码,然后进行登录,如果登录成功,则跳转到聊天模块,如

5、果登录失败,则提醒用户名或者密码错误。(2)连接服务器:通过当前输入的账号和密码,连接服务器开启的端口号。(3)实时通信模块:主要完成在线用户之间进行群聊和私聊。(4)用户列表更新:主要显示当前在线好友列表和离线好友列表。四、详细设计4.1、软件详细的功能流程图图(4.1)软件详细功能流程图4.2、数据库设计 该系统采用的是微软的Access数据库,用来存放用户信息,数据字典如下表所示:表(一)用户信息字段名称备注账号昵称StrName密码strPass真实姓名strRealName性别strSex 本系统将数据库操作封装为一个类,方便开发人员的操作,相关的函数介绍如下所示: 打开数据库函数:

6、void OpenDataBase(); 关闭数据库函数:void CloseDataBase(); 打开记录集:_RecordsetPtr& OpenRecordset(CString sql); 关闭记录集:void CloseRecordset();4.3、程序中定义的核心数据结构1、定义消息头的数据结构typedef struct tagHeaderchar type;intlen; Header, *pHeader; 以上结构体主要包含两个部分内容,type为char型字符,用来存储用户发送的是什么类型的消息,type定义的取值如下所示:#define LOGIN_IO 1 /用户登

7、录消息#define SEND_MESSAGE 3/用户发送消息#define PRIVATE_MESSAGE 4/用户私聊消息#define PASS_SUCCESS 5/用户密码验证成功消息#define PASS_FAILED 6/用户密码验证失败消息#define SERVER_STOP 7/服务器停止消息#define ASK_NUM 8/应答消息#define ASKNUM_FAILED 9/应答失败消息#define PRIVATE_ASK 10/私聊应答消息#define PRIVATE_REFUSE 11/私聊拒绝消息 以上为该软件定义的头消息结构的类型,主要包括:用户登录消

8、息、用户发送消息、用户私聊消息、用户密码验证成功消息、用户密码验证失败消息、服务器停止消息、应答消息、应答失败消息、私聊应答消息、私聊拒绝消息。用户通过发送不同的消息类型给服务器,服务器收到消息类型后进行判断,依据不同的消息类型进行不同的处理。2、定义用户登录信息数据结构typedef struct LogonUserCString name;CString password; User, *pUser; 以上结构体主要包含两部分:用户名和密码。当用户登录时,客户端将用户发送给服务器端,服务器端接收到后,对用户名和密码进行验证。4.4、客户端详细设计1、用户登录模块(1)用户登录模块流程图图(

9、4.2) 用户登录模块流程图(2)程序描述 对在用户登录信息界面中输入的各项信息进行初步检验。若发现错误,提示用户输入错误,让用户重新输入一次。若未发现错误,转入主界面。其中的错误种类有:输入数据不匹配、账号(数据库没有该账号)、密码(与对应账号的密码不匹配)。在登录界面中,主要的函数为: 判断是否为空:IdentifyNull(name,password,server); 创建套接字:CreateSocket(server); 发送账号:SendName(name); 发送密码:SendPssword(password); 其中发送账号和密码的函数为:/发送用户名void CDlgLogin

10、: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;head.len = password.GetLength(); /发送验证密码P

11、ASS_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() / TODO: Add your c

12、ontrol 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

13、 = SEND_MESSAGE;/发送消息的长度head.len = messaegeContent.GetLength();/当前时间CTime time = CTime:GetCurrentTime();/时间格式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_pSocke

14、t-Send(LPCTSTR)str, str.GetLength()/清空消息框m_sendMessage.SetWindowText();CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_CHATINFO);pEdit-SetFocus();elseAfxMessageBox(网络传输错误!);3、私聊模块(1)私聊模块流程图图(4.4) 私聊模块流程图(2)程序描述 私聊模块主要实现点对点之间的通信,相关的函数如下所示: 发送消息:OnButtonSend() 获取消息:GetMessage(CString strPrivtMsg) 其中发送消息的详细

15、代码如下所示:void CPrivateDlg:OnButtonSend() / TODO: Add your control notification handler code hereCString sendMsg;m_sendMessage.GetWindowText(sendMsg);if(sendMsg = )AfxMessageBox(不能发送空消息!);CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_SEND);pEdit-SetFocus();return;Header head;if(theApp.PrivateOrLeave)head.

16、type = LEAVE_MESSAGE;head.len = sendMsg.GetLength();CTime time = CTime:GetCurrentTime();CString t = time.Format(%H:%M:%S);CString str1 = theApp.m_strName + + t + rn + +sendMsg+rn;CString str =theApp.m_strLeaveDesName+&+ theApp.m_strName +&+theApp.m_strName+t+rn + +sendMsg+rn+&;/目的主机名+本地主机名+时间+回车换行+消

17、息m_pSocket-Send(char *)&head,sizeof(Header); /发送离线消息命令字 LEAVE_MESSAGE,发送用户名+时间+消息内容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-SetFo

18、cus();elseAfxMessageBox(网络传输错误!);.4.5、服务器端详细设计1、启动服务器,等待客户连接 /创建socket对象CServerSocket *m_pSocket;m_pSocket = new CServerSocket;if(!m_pSocket-Create(9999)AfxMessageBox(创建Socket失败!);return FALSE;if(!m_pSocket-Listen()AfxMessageBox(创建侦听发生错误!);return FALSE;2、用户列表更新(1)用户列表更新流程图图(4.5) 用户列表更新流程图(2)程序描述 在线用户列表和离线用户列表实时更新: UpdateUser(CServerClientSocket *pSocket,

温馨提示

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

评论

0/150

提交评论