基于局域网的即时通讯聊天室系统设计_毕业设计论文(编辑修改稿)内容摘要:

应用进程 WSAAsyncSelect 线程继续运行 Recv() 复制数据期间 阻塞 处理数据 内核 等待数 据 数据准备好 复制数据 将数据复制到 拥护空间 完成复制 系统调用 返回 消息 系统调用 返回成功指示 7 源 IP 地址 发送包的 IP 地址。 目的 IP 地址 接收包的 IP 地址。 源端口 源系统上的连接的端口。 目的端口 目的系统上的连接的端口。 端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。 一个端口对应一个 16 比特的数。 服务进程通常使用一个固定的端口,例如, SMTP 使用 25。 这些端口号是 “ 广为人知 ” 的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯 ,图如 所示。 面 向连接的( TCP) 连接过程 8 Client/Server 结构 (客户机 /服务器模式) Client/Server 结构 ( C/S 结构 )是大家熟知的客户机和服务器结构。 通过它可以充分利用两端硬件环境的优势,将任务合理分配到 Client 端和 Server 端来实现,降低了系统的通讯开销。 目前大多数应用 软件 系统都是 Client/Server 形式的两层结构。 C/S 结构软件分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。 由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用。 C/S 结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。 对应的 优点就是客户端响应速度快。 缺点主要有以下几个: 只适用于局域网。 而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。 这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。 9 3 系统 分析与设计 系统分析 系统需求 聊天交流是目前互联网提供的主要内容。 聊天系统有多种实现方式, 类似 ICQ属于一种点对点的聊天系统;还有一种是基于 Socket 的集中式聊天系统,这种聊天系统需要登陆 统一 的聊天服务器。 在基于 Socket 的聊天系统中, 主要有两种角色:服务器和客户端,不同的客户端登陆集中式的服务器,通过服务器将一个客户端发出的信息推送到其他所有客户端。 基于 Socket 的聊天系统最早实现是使用网页刷新方式,通过客户端不断地自动刷新,服务器端整个页面内容下载到客户端显示,这种方式的聊天速度慢,而且有刷屏现象,很快被更新的聊天技术所替代。 聊天系统在客户端和服务器之间主要传送的是文字信息,服务器端只需要把最近的文字信息推送到客户端,这样减少了网络传输内容,节 省了网络传输的时间,无疑提高了聊天速度。 这种“推”技术是目前基于 Socket 聊天系统的主要实现技术。 在 基于 Socket 的聊天系统 , 客户端和服务器必须保持随时随地的连接。 这有别于普通 Web 浏览的连接方式。 在使用浏览器访问服务器时,先由客户端发出 HTTP 协议,然后服务器响应处理这个客户端的响应,再返回处理结果;请求( Request)和响应( Response)是一种一对一的前后因果关系。 而在基于 Socket 的聊天系统中,客户端发出聊天信息的同时,客户端也在接受服务器发送过来的其他人的聊天信息,因此,请求和响应不 存在那种前后对应关系,是两种分别独立进行的进程。 因为服务器任何时候都可能发送信息到客户端,因此,客户端和服务器一旦建立连接,必须能让服务器在以后发送中寻找定位到这个连接。 局域网聊天系统使该系统的用户能够通过 客户端登入到该系统,然后直接与系统交互。 首先,需启动服务器,进行服务器的配置,进行正确的服务器配置和数据库连接并测试成功后,开启服务器。 接下来, 在客户端,该系统 的用户能够通过登陆界面进入,然后直接 与系统交互,进行文字传送。 本 系统支持的活动列表如下: ( 1) 配置服务器, 设置 IP 及端 ; ( 2) 开启服务器; ( 3) 对离线用户进 行删除管理; ( 4) 用户登陆系统; ( 5) 用户与系统交互,进行文字传送 ; 10 ( 6) 用户好友 登陆后 ,自动 刷新列表; ( 7) 传送文字,当好友不在线时,发送离线消息 ; ( 8) 上线接收离线消息; 需求分析 该聊天 程序分为服务器端和课户端两个部分。 客户端实现功能: ( 1) 向在线成员发送消息并接收消息。 ( 2) 更新成员状态。 当其他成员上线或下线时,客户端及时更新成员状态。 ( 3) 更新成员列表,当其他成员加入或者偶成员被删除时,客户端及时更新成员列表。 ( 4) 当对方不在线时,可以向该成员发送离线消息。 ( 5) 当用户上线时,接受其他用户的离线消息。 ( 6) 保存聊天记录。 服务 器端实现功能: ( 1) 维护聊天室成员列表:包括接受新成员,删除已有成员。 ( 2) 通知客户端更新成员状态。 ( 3) 通知客户端更新成员列表。 ( 4) 为离线用户保存离线消息。 ( 5) 验证密码。 ( 6) 禁止已登陆用户再次登陆。 ( 7) 保存用户信息。 ( 8) 为用户保存离线消息。 关系图如图 所示: 11 图 关系功能图 系统设计 设计 原则 考虑到系统的可重用性和伸缩性,需要将本系统的网络通信底层和应用系统分离开。 这样,基于可重用的网络通信层,可 以实现其他各种实时性较高的应用系统。 本系统在 架构设计上将分 4 个层次,如图 所示。 图 架构层次 本系统最底层是 Socket 通信层,将负责客户端和服务器之间快速的数据交换,CAsyncSocket CSocket 聊天、游戏等应用系统 Window Sockets API Client Server Client Client Client 更新成员列表 成员列表 请求 应答 发送消息 12 它通过接口层和最上面应用层保持实时数据联系。 用户从客户端进入到本系统前,将实现统一的用户登录验证机制。 Socket 底层设计分两大部分:协议设计和连接处理设计:协议设计和连接处理设计; CSocket 层 的目的 是提供底层和应用蹭一个中介媒体的作用,但是不能设计得太复杂,以免 延误数据传送时间。 工作流程 只有充分地了解了聊天程序的工作流程,才能对整个系统的理解更加深刻,聊天程序的工作流程如图 所示。 图 聊天程序的工作流程 功能设计 局域网聊天系 统以局域网内的用户为应用对象,经过各方面需求分析,该系统主加载套接字库 初始化套接字 绑定本地机到套接字 向指定 IP 地址发送数据 关闭套接字库结束聊天 创建线程用于接受数据 13 要 由服务器端和客户端两部分构成,各功能模块如图 36 所示。 图 36 局域网聊天系统功能 模块 图 共享数据类设计 A.用户设计: 1.用户状态设计 客户端与服务器端都拥有成员列表。 该程序将成员列表设计为三种状态 登 陆 状 态 : 当 用 户 登 陆 服 务 器 事 , 设 置 用 户 状 态 为 登 陆 状 态 , 服务器根据该用户列表状态发送成员列表。 在线状态:用户在线,当两个用户都在线时,可以相互发送和接受成员列表。 离线状态: 当用户离线时,不能发送和接受消息。 在线用户之间可以直接发送消息;对离线离线用户需要服务器转发。 转发关系如图 所示。 C l i n e t消 息C l i e n t 在线用户发送消息 局域网聊天系统 服务器 客户端 开启服务器 停止服务器 配置服务器 关闭服务器 发 送 离 线信息 登陆 文字传送 接收 离 线信息 用 户 管 理 14 C l i n e t S e r v e r C l i e n t消 息 消 息 在线用户给离线用户发送消息 图 转发关系图 B. 用户类设计 在程序中声明 CUserInfo 信息类。 在该类中声明 USERSTATUE 枚举类型,描述用户状态。  ONLINE:在线状态  OFFLINE:离线状态  LOGIN:登陆状态  UNKNOWN:未知状态,初始化状态。 成员函数如 表 成员函数 , 类成员变量如表 32 所示。 表 成员函数 函 数 名 称 返 回 值 功 能 CUserInfo() 无 构造函数 CUserInfo(constCUserInfoamp。 userInfo) 无 复制构造数 ~CUserInfo () 无 析构函数 Init() Void 初始成员变量 Serialize(CArchiveamp。 ar) void 序列化 Operator=(const CUserInfoamp。 userInfo) CUserInfoamp。 赋值函数 表 成员变量 名 称 类 型 说 明 m_strName CString 名称 m_strPassword Cstring 密码 m_eStatus USERSTATUE 状态 m_lIP DWORD I P 地址 m_time CTime 时间 15 B.数据包类设计 在 程序中声明 CChatPacket 类描述服务器和客户端接收和发送的数据包。 在该类中声明 PACKETTYPE 枚举类型。  MESSAGE:客户端发送的消息  USERLIST:用户列表  SERVERMSG:服务器发送的消息  UNKNOWN:未知类型 表 33: CChatPakcet 类成员函数 函 数 名 称 返 回 值 功 能 CChatPacket() 无 构造函数 ~CChatPacket() 无 析够函数 Init() Viod 初始化成员变量 Serialize(CArchive amp。 ar) Void 序列化 表 34: CChatPacket 类成员变量 名 称 类 型 说 明 m_type PACKETTYPE 包类型 m_UserInfo CUserInfo 用户信息 m_strMsg CString 消息 m _pUserList CObList* 用户链表 m_OfflineUserInfo CUserInfo 离线用户信息 m_time CTime 日期和时间 16 4 系统实现 服务器端 设计 实现 服务器端 静态类图 C A r c h i v e C S o c k e t F i l e m _ h I c o n : H I C O NC S o c k e t F i l eC L i s t e n S o c k e t C C l i e n t S o c k e tC S e r v e r A d d r e s s D l gC S e r v e r A p p 联 合 P A C K E T T Y P EC C h a t P a c k e tC U s e r I n f。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。