




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘摘 要要 随着计算机网络应用的逐渐普及 网络已经成为人们掌握信息 交流信息以及 管理信息必不可少的重要工具 实时通信的出现给人们带来了极大的便捷 同时也 带来了时间和经济上的节省 如今 网络即时通信已经逐步发展成为应用于各行各 业的信息交流工具 通过设计和实现一款集即时通信与人事管理于一体的网络应用程序 讨论并分 析在 TCP IP 协议的基础上设计并实现一个 C S 结构的即时通信系统的详细过程 首先 介绍网络即时通信开发的必备技术知识 包括常用的即时通信系统的客户端 和服务器端的通讯协议 以及即时通信系统的功能设计 系统结构模式设计 数据 信息设计等 其次 分析和设计客户端与服务器端之间的通信协议 以规范系统中 端与端的数据传输过程 然后 对系统中最重要的部分即网络传输控制模块 进行 详细的设计说明以及简单的实现方案的阐述 最后 描述即时通信系统整体的逻辑 处理流程 以及该系统在人事管理方面的功能实现 以及其他部分已通过测试服务 器程序测试的客户端程序代码 即时通信系统的设计与实现在企业建立自己特色的集信息管理和即时通信为一 体的内部应用软件方面具有一定的应用前景 关键词 关键词 即时通信 网络应用程序 TCP IP 通信与办公系统 Abstract As the widespread of web application internet has become the indispensable tool for information acquisition communication and management The advent of real time communication has brought people great convenience as well as saving time and money Nowadays web based real time communication has been developed to a communication tool for many fields Analyzes and discuss the process of designing and implementing a real time communication system of C S structure based on TIP IP protocol through designing and implementing a network application combined the functions of instant communication tool and also a personnel management tool First to introduce some necessary technical knowledge and the functional designing system structure module designing and data information designing of development of the IM system Second analyze and design the communication protocol between Client and Server of the system to regular the data transportation process between ports Third describe the designing and implementation of the most important part of the system which is the web transportation controlling module Finally introduce the logic processing of the whole IM system and some client programs or code which have passed the testing of server program Designing and implementing of IM system has a definite applying prospect in the aspect of building an interior and own application which gather instant messaging and information managing Key words Instant Messaging Network Application TCP IP IM in Office 目目 录录 摘摘 要要 I Abstract II 1 绪论绪论 1 1 课题背景和意义 1 1 2 相关技术知识简介 1 1 3 论文的主要工作与章节安排 3 2 系统的结构与功能设计系统的结构与功能设计 2 1 系统结构的选择和设计 5 2 2 系统功能设计 7 2 3 数据信息及数据库设计 9 2 4 本章小结 11 3 IM Client 与与 IM Server 之间的通讯协议之间的通讯协议 3 1 数据收发方式与数据结构的设计和定义 13 3 2 通信协议数据包在实现过程中的定义 14 3 3 本章小结 18 4 网络数据传输控制模块的设计与实现网络数据传输控制模块的设计与实现 4 1 异步套接字与多线程同步介绍 19 4 2 网络传输管理模块的设计与实现 20 4 3 客户端网络传输模块的工作流程 23 4 4 服务端的网络传输管理方案 25 4 5 网络传输模块实现的关键代码 27 4 6 本章小结 30 5 系统整体逻辑处理流程与实现结果系统整体逻辑处理流程与实现结果 5 1 数据收发的逻辑处理流程 31 5 2 系统整体结构展示 32 5 3 系统功能处理过程逻辑描述 33 5 4 部分功能实现结果以及 CLIENT 端运行截图 35 5 5 本章小结 37 6 总结与展望总结与展望 6 1 全文总结 38 6 2 展望 38 致致 谢谢 40 参考文献参考文献 41 附附 录录 43 1 绪论绪论 1 1 课题背景课题背景和意义和意义 近年来 随着 Internet 的飞速发展 计算机网络得到了越来越广泛的应用 并 且已经逐步走进千家万户 自迈入信息时代以来 距离已经不再是人们之间联络沟 通的障碍 也正因为如此 人们对沟通交流的需求和依赖也越来越强烈 各行各业 对信息交流的要求也越来越高 如今 通过各种即时通信软件 人们已经可以在足 不出户的情况下 与远距离甚至世界各地的人进行实时的聊天交流 这样的交流不 仅满足了人们对交流沟通的需求 同时也给人与人之间的交流带来了极大的便捷和 大量的经济节省 因此 即时通信 Instant Messaging 在人们的生活工作和学习中 得到了更广泛的应用 目前 已经有不少即时通信软件在社会公众中流行 像 MSN 腾讯 QQ 新浪 UC 等 都是国内人们所熟知的知名流行即时通信软件 其技术方面也都处于国际 领先水平 同时 由于即时通信软件的便利 其应用已经由最初的简单的聊天交友 得到了巨大的拓展 适应各种场合的各式即时通信软件也开始出现在软件市场上 这就包括了一些与企业管理相关的即时通信软件 一个具有企业自己特色的集信息 管理和即时通信为一体的内部应用软件 能够使一个企业或者团队更像一个整体 同时也能够给企业的管理和信息交流带来极大的便利 在一定程度上提高工作效率 同样的 对于软件设计与开发的行业来说 过去的那种仅适用于 PC 机上的应 用程序的开发已经远远不能满足市场的多样化的需求 网络程序的广泛应用和广大 需求使学习与掌握与网络相关的编程技术显得尤为重要 本论文将结合一个具体的局域网即时通信系统的开发编写 以现有的各种技术 介绍讲解网络 IM 软件开发中的重要知识 并讨论其中关键环节的技术问题和各种 解决方案和设计策略 1 2 相关技术知识简介相关技术知识简介 1 2 1 基于基于 SOCKET 的网络编程的网络编程 SOCKET 在英文中的意思是插座 在网络编程中 其实际意义可以理解为网络 通信连接的插座 通常称之为套接字 如果将网络连接的各终端类比为电话 则 SOCKET 即相当于电话线插座 为各终端提供或者创建与其他终端通信连接的桥梁 或通道 所有的终端都必须接通此 插座 来完成与其他终端的连接或通信 否则 它将独立于网络之外 由此可以知道知道 SOCKET 是终端间建立连接的核心对象 那么 对于一个 SOCKET 对象 它到底具备什么样的功能呢 通常 用 WINSOCK 库来创建和使用 SOCKET 运用 WINSOCK 库的基本 API 就可以实现简单的数据输入和输出 即发送数据和接受数据 在创建一个 SOCKET 对象后 通过指定 IP 地址来确定该 SOCKET 与哪台机器发生交流 通过 指定机器端口号 一般为 1024 以上 确定与该机器上哪个应用程序进行交流 在 确定了交流对象后 便可以使用 SOCKET 与对象机器上的应用程序进行数据的传 输和信息的交流 在面向连接的网络通信中 还必须使用 SOCKET 进行连接的监 听和创建 只有创建了稳定的连接后 才开始进行数据的传输 由于交互方式的不同 SOCKET 也分为两种 一种是无连接的数据报形式的 一种则是面向连接的流式套接字 这也是接下来两小节要阐述的内容 1 2 2 UDP 协议与协议与 TCP 协议的简单介绍协议的简单介绍 UDP 协议是一个简单的面向数据报的运输层协议 进程的每个输出操作都正好 产生一个 UDP 数据报 并组装成一份待发送的 IP 数据报 这与面向流字符的协议 不同 如 TCP 应用程序产生的全体数据与真正发送的单个 IP 数据报可能没有什 么联系 UDP 不提供可靠性 它把应用程序传给 IP 层的数据发送出去 但是并不 保证它们能到达目的地 其过程可以比做投递信件 它只关心信件确实投放到信箱 至于对方是否正确 按时收到信件 UDP 并不关心 尽管 TCP 和 UDP 都使用相同的网络层 IP TCP 却向应用层提供与 UDP 完 全不同的服务 TCP 提供一种面向连接的 可靠的字节流服务 面向连接意味着两 个使用 TCP 的应用 通常是一个客户和一个服务器 在彼此交换数据之前必须先建 立一个 TCP 连接 这一过程与打电话很相似 先拨号振铃 等待对方摘机说 喂 然后才说明是谁并与之开始对话 1 2 3 WINSOCK 套接字套接字 API 调用的简单流程调用的简单流程 本论文所要讨论的即时通信系统则是通过 WINSOCK 库的应用来设计和实现基 于 TCP 的 C S 结构的网络即时通信程序 这里 用图的方式简单的表示出对 WINSOCK 库提供的 API 函数调用过程 面向连接的流方式调用过程如图 1 1 所示 调用 WSAStartup 初始化 SOCKET 调用 socket 创建 SOCKET 调用 bind 指定通讯端口 调用 listen 设置等待连接状态 调用 accept 接收连接并生成会话 socket 调用 send 和 recv 进行通讯会话 调用 closesocket 关闭会话 socket 调用 WSAStartup 初始化 SOCKET 调用 socket 创建 SOCKET 调用 accept 接收连接并生成会话 socket 调用 send 和 recv 进行通讯会话 调用 closesocket 关闭会话 socket SERVER 端CLIENT 端 图 1 1 面向连接的流式通信过程 面向无连接的数据报方式的调用过程如图 1 2 所示 调用 WSAStartup 初始化 SOCKET 调用 socket 创建 SOCKET 调用 sendto 和 recvfrom 进行通讯会话 调用 closesocket 关闭会话 socket 图 1 2 面向无连接的数据报过程 从图中可以看出 面向连接的流方式更能适应 C S 结构系统的非对称结构的实 现 1 3 论文的主要工作与章节安排论文的主要工作与章节安排 本论文旨在设计一个面向企业内部的功能实用 性能良好的即时通信系统 并 对其中关键模块做详细的分析和实现的说明 在系统的设计和实现中 要突出系统 的模块化 各模块间相对独立 通过模块间的接口交互工作 使整个系统层次 模 块清晰 在数据传输方面 要注意数据的封装 使数据尽可能结构化 保持良好的 一致性 根据上述要求 论文中详细阐述了系统的设计方案和关键模块的的实现方法 主要工作如下 1 在确定系统结构后 根据系统相关需求妄称对系统功能的设计和分析 并对应系统功能做出用户信息数据的设计 详细说明数据库表项的设计 2 对 CLIENT 与 SERVER 端的通信协议做详细的设计 并对协议数据包的 结构的定义做出详细的阐释 3 对系统中网络传输模块的设计做详细的说明 阐述网络传输模块在系统 中的工作流程以及该模块的实现方案 4 结合系统整体结构 说明系统在功能实现上的逻辑处理过程 选择最主 要的功能如登陆认证和聊天消息收发 并展示系统部分功能实现后的运行结果 按照上述的工作内容叙述 本论文共分 5 章来分别阐述有关问题 各章节安排 如下 第一章介绍论文背景 项目的意义 项目相关技术知识以及论文主要工作 第二章对系统结构的分析做简单的介绍 针对系统的定性对其功能做详细的设 计和分析 并设计出与系统功能相关的数据信息内容 第三章详细介绍 C S 系统中 CLIENT 与 SERVER 端之间的通信协议 并说明 在系统实现过程中 该数据包结构以及部分协议内容定义 第四章设计并分析系统中的核心模块 网络传输管理模块 对模块中重点对 象的设计做详细的说明 并介绍该模块的实现策略 以及其在系统中的工作流程 第五章介绍系统整体的结构模型 包含系统中各个模块中的对象 说明系统实 现关键功能即登陆认证 聊天消息收发等的逻辑处理流程 并展示系统运行过程中 的部分截图 2 系统的结构与功能设计系统的结构与功能设计 2 1 系统结构的选择和设计系统结构的选择和设计 2 1 1 系统通讯模式的选择系统通讯模式的选择 在前面 已经分别介绍了基于 UDP 和 TCP 的两种即时通信系统的基本模式 在两者相比之下 由于 TCP 协议能够很好的提供数据传输的可靠性 并在面向连接 的环境下提供更丰富的网络通信服务 而且 在面向连接的环境下 更有利于对网 络应用终端的实时管理 为使用客户提供更加便捷可靠的网络服务 所以 在网络 通信模式上 倾向于基于 TCP 的面向连接的流式通讯模式 2 1 2 集中式与分布式系统概述集中式与分布式系统概述 在目前的网络通信系统中 对于连接节点的管理有集中式和分布式两种管理模 式 对于集中式的管理模式 系统的数据存储和管理以及各功能在网络连接上的对 应操作 都集中在网络管理节点上进行处理和实现 即由单一服务器来完成网络数 据的集中管理 集中式网络管理模式最大的优点就是便于集中管理各端连接 易于 实现 维护工作较为简单 但是 由于管理信息全部集中汇总到管理节点上 这就 使得在通信高峰期会造成信息流拥挤 这对管理节点处的机器处理效率有很高的要 求 另外 由于所有的信息管理都依靠于一台服务器 当管理节点发生故障时 整 个网络系统都将停止工作 分布式管理模式 则是将网络管理客户机与一组服务器进行交互作用 由多个 服务终端来共同协作完成对网络信息的管理 由于有多个服务端协同工作 集中式 容易造成信息流拥挤 服务器负荷太大的问题可以得到很好的解决 同时 在多服 务器的环境下 服务端之间的分工设计可以由设计人员灵活设计 系统的可伸缩性 扩展性也较为良好 一般来说 采用的较多的则是多层管理或者服务器集群等技术 方式 2 1 3 系统的结构设计系统的结构设计 本论文所要讨论的系统是一个供中小型企业内部使用的带有简单人事管理功能 的局域网即时通信系统 由于要存储并管理用户相关信息的数据 同时要限制普通 用户对数据信息的管理权限 比较合适的设计是采用 C S 模式的系统架构 数据由 数据库进行存储 由服务器对数据库进行直接操作 而客户端则通过对服务器发出 请求得到相应的数据或者告知服务器对数据库进行何种操作 为了确保数据正确可 靠地传输 系统采用面向连接的 TCP 协议作为数据传输模式 通过上一小节对集中式网络管理和分布式网络管理的简单介绍 已经对两种管 理模式有了初步的了解 可以看出 在对于功能繁琐多样 客户终端数量庞大的系 统 分布式系统能够很好的减轻单个服务器的负载 以提高服务器管理网络连接的 效率 为用户提供稳定而流畅的网络服务 而对于本系统 由于定性为面向中小型 企业 且是基于局域网内部的小型即时通信服务系统 其同时连接的客户终端本身 极其有限 另外 本系统的功能也是集中针对于用户信息的管理和简单的实时通信 交流 在这样的情况下 选择分布式系统则显得有些大材小用 并可能会造成开发 成本上的浪费 而选择集中式管理模式则更有利于集中管理和系统的简化 同时 单一服务器的结构也相对于多服务器的结构更容易进行维护工作 综上所述 本论文要论述的系统系统将使用基于 TCP 的集中式管理的 C S 结构 模型 在这个结构中 所有的数据信息都将由一个服务器程序进行统一的管理 对 数据信息内容的各种相关操作也只能由服务器程序直接进行完成 客户端要获得数 据信息或完成某操作 必须通过服务器的验证 正确建立连接后 向服务器发送请 求 服务器则根据客户端的请求代劳完成对数据信息的相应操作并向客户端回馈数 据信息 图 2 1 表示了系统大大体层次和结构模型 系统数据库 服务器 客户终端客户终端客户终端 图 2 1 基于 TCP 的集中式 C S 系统结构 2 2 系统功能设计系统功能设计 本系统的使用对象为中小型企业 拟订要完成的主要功能为实时聊天会话功能 以及与之伴随的用户信息管理 并包括网络即时通信的相关通行功能 在扩展方面 还应当加入固定群组会话与临时会话组等功能 进阶功能还包括文件传输 语音 视频对话等高阶功能 2 2 1 系统网络连接功能设计系统网络连接功能设计 对于一个网络即时通信系统而言 由于本系统采用基于 TCP 的集中式 C S 结构 必须具备一些与网络连接相关的通用功能 无论系统的最终用途是什么 这些功能 都是必不可少的 其中包括 1 客户端登陆验证功能 此功能用于用户使用客户端于服务器建立稳定连接 成功登陆是用户使用系统 的先行条件 客户端在连接上服务器后最先要做的就是将用户输入的 ID 和密码发 送给服务器 服务器将收到的 ID 和密码与数据库中内容进行对比 符合则通过验 证继续维持该连接 否则将返回错误信息并断开此连接 2 心跳功能 客户端应该在一定时间间隔内向服务器发送心跳信息 以告知服务器该客户端 连接的活动状态 以便于服务器管理客户连接 如果超过时间间隔 服务器未收到 某连接上的客户端的心跳信息 则自动认为该客户端网络异常或已经掉线 断开与 其之间的连接 3 客户登出 与登陆功能对应 客户可以主动断开与服务器之间的连接 这里需要注意的是 直接关闭客户端并不一定能够保证连接安全断开 未断开连接直接关闭可能会造成 网络异常 2 2 2 用户信息相关功能设计用户信息相关功能设计 由于在该系统中 包含着很多于用户相关的数据信息 这些信息存放在服务器 数据库中 并且用户会经常对这些信息进行即时查看或者修改更新 所以 与此相 关的功能也是本系统中必须具备的基本功能 主要分为以下几个功能 1 部门信息查看和管理 在当今很多分工管理的中小型企业中 一个部门就是一个整体 部门之间往往 都有着明确的分工 部门人员配置 职能也都各不相同 系统提供用户这样的功能 能够使用户更便捷管理和了解企业中各个部门 2 员工信息查看和管理 与部门信息相比 作为一个即时通信系统 用户信息的查看和管理自然是必不 可少的 用户可以通过此功能来查看自己或他人的详细信息 对自己的信息也可以 做任意修改 我相信 任何一个即时通信系统都不会缺少这个功能 3 人事调动管理功能 这个功能可以说是本系统相对于其他即时通信软件来说所特有的 由于有了此 功能的设计 本系统中规定所有用户的注册工作全部由具有人事管理权限的用户通 过此功能加入 同时 除个人详细信息外 所有用户与客户企业相关的信息也全部 由有一定权限的用户来通过此功能设定或者修改 这样一来 此功能的加入使得该 系统更具有针对性 专业性 为客户企业提供一个完善的管理交流平台 与平时常 见的个人聊天软件有着本质上的区别 2 2 3 传输交流相关功能设计传输交流相关功能设计 作为一款即时通信系统 正常的聊天交流功能当然是重中之重 在本系统中 此方面的功能基本上也都是传承了当今流行的即时通信软件的一些流行功能 简要 介绍如下 1 文字消息传输功能 本功能是即时通信中最简单的传输功能 也是最主要最常用的功能之一 同时 本系统中 此功能除了包含通常的个人聊天外 还包含临时会话即会议聊天 以及 固定群组聊天信息 甚至邮件消息等 传输的主要内容也都是文字 字符信息 这 个功能也是开发第一阶段里所用功能中最先进行开发和使用的 2 表情功能 此功能是模仿当今社会上所流行的多种即时通信软件 在文字消息的基础上添 加默认表情的功能 而且通过字符转义来完成 这样就可以直接在文本消息的传输 的基础上同时做到表情的显示 3 文件传输功能 由于现在不少企业单位都开始用计算机做为必备的办公工具 各种各样的文件 大多数都是以电子文档的形式存放在工作计算机里 此功能的加入无疑给使用客户 提供了便捷的文件传阅途径 在该功能的支持下 各个客户终端间可以向对方发送 本地机器中的任何格式的文件 为企业中电子文件的传阅省时省力 提高工作效率 4 高级功能即扩展功能 该部分主要包括了邮件收发 文件上传 以及多媒体实时传输 其中包括实时 语音或视频聊天等 由于此功能对技术要求稍高 同时需要扩展服务器数据库容 量 在中小型企业中需求也并不是那么明显 将作为第二期项目功能扩展进行实现 本论文中将不会提到这部分的设计和实现 2 3 数据信息及数据库设计数据信息及数据库设计 在该系统中 需要在服务器中存储的数据信息主要包括员工信息和部门信息两 个方面 在员工信息方面 又包含个人信息和工作相关信息两个方面 其中 个人 信息是用户可以在获得登陆帐号后自行修改的 而工作相关信息只能由具有人事管 理权限的用户通过人事管理功能来进行修改 下面将结合本系统的数据库设计 介 绍系统中包含的主要用户信息数据 公司职员 员工 ID 姓名生日登陆密 码 签名简介 加入时 间 权限 公司部门 属于 职位描 述 部门 ID 名称 简介 上级部门 ID 固定群组 属于 群内身份 群号 ID 简介 进入方 式 在线状 态 联系邮 箱 手机号 码 性别 名称 图 2 2 系统数据库 E R 关系图 上面图 2 2 所示即为系统中用户信息数据的 E R 关系图 接下来将以此 E R 图 来进行数据表的设计 按照数据表来创建系统服务器数据库数据 以下便是针对上 述 E R 建立的数据表 表中属性名后带 表示该项为外键 1 员工信息表如表 2 1 所示 表 2 1 员工信息表 列名 中文别名属性名 数据类型 长 度 主 键 允 许 为 空 员工 IDs idVarchar No 员工用户名s userNameVarcharNo 姓名s nameVarcharNo 生日s birthData 登陆密码s passVarchar 签名s signVarchar 简介s intrVarchar 加入时间s dataDataNo 联系邮箱s emailVarchar 手机号码s phoneNumberVarchar 性别s sexint 员工状态s stateintNo 2 权限查询表如表 2 2 所示 表 2 2 权限查询表 列名 中文别名属性名 数据类型 长 度 主 键 允 许 为 空 员工 IDs id VarcharNo 权限s rightintNo 3 部门信息表如表 2 3 所示 表 2 3 部门信息表 列名 中文别名属性名 数据类型 长 度 主 键 允 许 为 空 部门 IDd idVarchar No 名称d nameVarcharNo 简介d intrVarchar 上级部门 IDd super Varchar 4 员工 部门关系表如表 2 4 所示 表 2 4 员工 部门关系表 列名 中文别名属性名 数据类型 长 度 主 键 允 许 为 空 员工 IDs id VarcharNo 部门 IDd id VarcharNo 职位描述sd descVarchar 5 群组信息表如表 2 5 所示 表 2 5 群组信息表 中文别名属性名 群 IDg idVarchar No 名称g nameVarcharNo 简介g intrVarchar 进入方式g stateintNo 6 员工 群组关系表如表 2 6 所示 表 2 6 员工 群组关系表 列名 中文别名属性名 数据类型 长 度 主 键 允 许 为 空 员工 IDs id VarcharNo 群 IDg id VarcharNo 群内身份sg degreeintNo 2 4 本章小结本章小结 在本章中 介绍了系统整体结构的大致模型 并结合系统所针对的用户做了功 能上的分析 通过对当今较为流行的系统模型的比较 在结构上 采用了基于 TCP 协议的集中式 C S 模式 并对其进行了较为详细的描述 同时 根据系统的使用用 户以及需求 设计出了一与寻常的 IM 系统相比更具有特色具有针对性 专业化 的功能 在功能设计的同时 依据实现功能所需要的信息 构造了系统的数据库 模型以及用户的数据库信息 为整个系统的性质和功能做了整体的概括和描述 在接下来的章节中 将围绕如何实现这些系统功能进行系统的设计和实现方案的 描述 3 IM Client 与与 IM Server 之间的通讯协议之间的通讯协议 3 1 数据收发方式与数据结构的设计和定义数据收发方式与数据结构的设计和定义 3 1 1 数据收发方式的设计数据收发方式的设计 在 IM 中 所有功能的实现必须依靠客户端与服务端之间的数据通信来完成 在此 需要定义一个协议 让客户端与服务端之间按照定义的协议来进行数据通信 而不是杂乱无章的任意的数据收发 首先 按照一般惯例 将要发送的数据做成数据包的形式来进行传输 并且分 为请求包和应答包 所有的操作都首先由客户终端发送请求包给 server 端 server 对终端的请求进行相应的处理 可能访问数据库 后将结果作为应答包的一部分返 回给客户终端 终端通过解析应答包来得到 IM server 的回应并继续执行相应操作 在进行通讯及运行任何其他的 command 之前需要进行连接认证 所有的操作都有 请求 应答 的模式来进行 其过程如图 3 1 所示 clientserverDB 库 库 库 库 库 库 库 库 库 库 库 库 库 库 图 3 1 请求应答顺序图 3 1 2 通信协议数据包结构定义通信协议数据包结构定义 由于需要进行传输的数据以及客户端与服务端之间的通信数据的类型是多样化 的 必须将种类繁多的数据 以尽可能相同或者相似的结构进行封装 否则 多样 化的信息交互和数据传输将给实现功能和代码的编写带来巨大的麻烦和极其烦琐复 杂的工作 同时 数据的多样化使得各个数据包的长度将不相一致 甚至某些数据 包的长度大小将是动态可变的 而在 SOCKET 网络编程中 每一次数据的接收和 发送都是需要确定长度的 为此 设计出这样一种方案 将端与端之间一次要发送 的数据包分离为两个部分 称为包头和包体 包头中包含有该数据包的相关属性信 息 由于只是包含数据包属性而非真正的数据 所以 包头的长度可以是固定不变 的 而包体中 则是真正传输的数据所在 数据接收方根据包头中提供的信息得知 包体中数据内容的类型 从而针对不同类型的包体做相应的接收和解析工作 图 3 2 表示出了数据包的大致结构特征 数据包 包头 包体 内容包括 包类型 请求 应答 操作码 返回码 发送方 ID 接收方 ID 包体长度等 等 其中为相应类型的数据 请求的内容 回应的数据 等等 根据数据包的作用 和类型不同而不同 长度 可变 图 3 2 C S 通信协议数据包结构示意图 3 2 通信协议数据包在实现过程中的定义通信协议数据包在实现过程中的定义 3 2 1 数据包包头定义数据包包头定义 如图 3 2 所示 数据包的包头如同人的大脑一般重要 其中包含着该数据包所 有的相关属性 能否正确接收变长的包体 解读包中的数据 将其转化为有用的信 息 都取决于包体内容的正确解析 在此 将请求包和应答包的包头统一起来 设 计出一个一致可行的结构 其实现代码如下 typedef struct data packet charm nMajorType charm strServiceCode charm strOperationCode charm nReturnCode int32m nUseless int32m nSendID int32m nRecvID int32m nPacketLength 其中 每个字段的说明如下表 表后有请求包和返回包的具体说明 如表 3 1 所示 表 3 1 字段说明表 名称长度 byte 说明 m MajorType1 区分 IM 和 Mail 的消息 IM 0 x01 Mail 0 x02 为二期开发邮件功能所留 m strServiceCode1服务名 m strOperationCode1命令名 具体定义见 m nReturnCode1返回值 m nUseless4协议扩展 m nSendID4 发送者的 ID 下面的是特殊 ID 0 服务器 m nRecvID4 接收者 ID 下面的是特殊 ID 0 服务器 m nPacketLength4包体数据长度 总长20 每个终端请求包中 m MajorType 字段用来区分不同的服务类型 现阶段只使用 0 x01 作为 IM 的类 型 将来可能会增加 0 x02 作为 PushMail 的类型 m strServiceCode 用于区分不同的服务 如认证服务 命令服务等 m strOperationCode 用于区分同一服务类型中不同的操作 如认证服务中包括 登陆请求 断开连接两个操作 设计服务和操作有助于今后的扩展 m nReturnCode 由应答包使用 请求包将不使用 m nPacketLength 表示数据包体的长度 以便收取方缺定整个包的长度 每个服务器应答包中 m MajorType m nFunctionCode m nSourceCode 以及 m strOperationCode 将不使用 只是将请求包的对应值复制到应答包 m nReturnCode 供终端判断请求是否执行成功 具体定义见下 define RT000 0 operate sucessful define RT001 1 deal moudle not found define RT002 2 invalid terminal type define RT003 3 invalid signal name define RT004 4 no data define RT099 99 socket error define RT100 100 general error m nPacketLength 同请求包 服务器每次收到客户请求后 将更新用户当前状态 便于服务器判断用户在线 情况 3 2 2 数据包包体定义数据包包体定义 包体的定义实际上则为各类通信的通信数据的定义 由于通信数据种类繁多 在本论文无法将全部定义写出 这里仅通过登陆验证和用户信息获取两个用例的协 议数据包定义来阐释数据包具体的定义方式 其他操作相关的数据包包体定义与之 类似 1 用户登陆认证服务 Socket 在 connect 后 发送认证包 m MajorType 为 0 x01 m strServiceCode 为 0 x01 包体中存放 32 字节的认证码 前 20 字节为用户 ID 后 32 字节为 MD5 后的密码 如果通过校验 则用户可以继续进行接下来的工作 否则 服务器将 close 掉 socket 如果连接后没有发送校验包 超时也将断掉连接 下面将分别介绍 在代码实现中如何定义请求包和应答包 1 请求包定义 其包头中的属性设置为 m MajorType 0 x01 m nServiceCode 0 x01 m nOperationCode 0 x01 m nPacketLength 52 包体结构的定义如下 typedef struct data login char m nUserName 20 用户名 20bytes char m nPassword 32 密码 md5 值 32bytes DATA LOGIN 2 应答包定义 应答包的包头中 除了 PacketLength 包体长度和 ReturnCode 返回码以外 其 他的都与请求包相同 在应答包中 m nPacketLength 4 ReturnCode 则用来标识 认证是否通过 具体返回码可以参见 2 1 中的内容 包体中则是认证后返回给客户端的对应用户的 ID 码 如果认证失败 返回的 ID 码为 0 程序将关闭其 SOCKET 其结构定义如下 m nPacketLength 4 typedef struct data back login uint32 m nStaffID DATA BACK LOGIN 2 获取用户详细信息 客户端通过发送请求包 告知服务器要进行获取信息的操作以及需要获取何用 户的信息 以 ID 号标识用户 此操作的 MajorType 为 0 x01 ServiceCode 为 0 x02 OperationCode 为 0 x28 包体长度为 4 仅包含要请求的用户信息对应的 ID 以下为该协议请求包和应答包结构定义的关键实现代码 1 请求包定义 其中 包头中关键属性设置为 m nMajorType 0 x01 m nServiceCode 0 x02 m nOperation 0 x28 m nPacketLength 4 包体的结构定义如下 typedef struct data getInfo int32 m nStaffID DATA GETINFO 2 应答包的定义 同其他应答请求包一样 包头中的 m nMajorType m nServiceCode m nOperation 这三个标识操作类型的属性在请求 包和应答包中是对应相等的 而作为应答包 另一个重要的关键属性就是 ReturnCode 的值 以此来告知请求方服务端对其请求的响应结果 此应答包包体包含内容为对应请求包包体中 ID 号的对应用户的全部详细信息 结构定义代码如下 Typedef struct staff info Int32 m nStaffID 员工 ID Int8 m nStaffNameLen Char m nStaffName MAX 员工姓名 Int8 m nEmailLen Char m nEmail MAX 联系邮箱 Int8 m nPhoneLen Char m nPhone MAX 手机号 Int8 m nAddressLen Char m nAddress MAX 联系地址 Byte m nSex 性别 0 男 1 女 Byte m nDateTime 8 加入时间 YYYYMMDD Byte m nBirthday 8 出生年月 YYYYMMDD Byte m nUserState 用户在线状态 0 表示在线 1 表示不在线 STAFF INFO 3 3 本章小结本章小结 本章主要介绍了本系统在 TCP 模式下具体的数据传输办法 详细设计出了系统 C S 结构下 Client 端与 Server 端之间进行网络传输的通信协议 并在通信协议数据 包中 以三个常见的典型功能作为示例论述了协议包的设计和实现方案 4 网络数据传输控制模块的设计与实现网络数据传输控制模块的设计与实现 4 1 异步套接字与多线程同步介绍异步套接字与多线程同步介绍 4 1 1 SOCKET 的阻塞方式的阻塞方式 在 SOCKET 网络编程中 WinSocket 基本 API 的 socket 函数通常是以阻塞方式 进行的 即在执行数据收发过程的时候 程序线程会在收发过程完成之前阻塞 只 有在完成了当前数据收发工作后 才会执行其他指令 这样一来 接收数据 发送 数据 处理数据 逻辑过程等都无法同步进行 在频繁的网络数据传输过程中 各 种传输工作以及处理工作都有可能同时发生 无法同步显然会造成用户使用过程中 过多的等待 给用户操作带来极大的不良感觉 在这样的情况下 必须通过自行创建额外线程来辅助程序主线程的工作 以多 线程同步的方法来解决阻塞方式数据传输带来的不良影响 为此 除了主线程外 每一次数据接收 数据发送 数据处理等工作都将分别单独占用一个线程 以此来 完成数据接收发送以及处理的同步工作 图 4 1 所示即为多线程控制下的数据传输 同步过程的示意图 线程启动 处理线程 线程启动 发送线程 由线程函数参 数获得数据信 息 调用 SEND 发送数据 反馈发送结果 成功与否 关闭线程 由线程函数参 数获得数据包 信息 线程启动 接收线程 等待接收到来 的数据 接收数据 将收到的数据 做为参数创建 处理线程 线程随主线 程关闭 解读数据包 分析数据 按照数据完 成相应操作 线程关闭 线程启动 功能初始化 等待用户操作 指令 根据用户指令 创建请求发送 线程 线程关闭 程序结束 主线程 图 4 1 多线程实现数据传输同步过程 4 1 2 异步套接字的使用异步套接字的使用 在 WinSock 库中 本身也提供了一种基于消息的非阻塞式数据传输方法 称为 异步套接字 在异步套接字中 无论数据的接收或发送工作是否完成 函数都会立 刻返回 这也是为了支持 Windows 的消息驱动机制 使开发者能够更方便的处理网 络通信 同时也有利于提高应用程序的性能 在异步套接字中 操作系统会监听程 序 中登记的网络事件消息 当有网络I O 事件发生时 Windows 系统会给应用程序窗口 发送相应的消息加入主线程消息循环列表中 应用程序则根据消息内容进行相关操 作 CAsyncSocket 是 MFC 对异步套接字的一个简单封装 其中包含了创建 socket 建立连接 发送接收数据 对应消息响应等成员函数 本系统就是通过由 CAsyncSocket 自行派生异步套接字类来创建自己的网络传输管理对象 以此方式来 避免多线程同步中带来的一些较为棘手的问题 4 2 网络传输管理模块的设计与实现网络传输管理模块的设计与实现 4 2 1 数据包缓冲区的定义数据包缓冲区的定义 在系统中 创建一个数据缓冲区来存放即将要发送的数据或者刚刚接收到的数 据 在缓冲区中 所有类型的数据包都以字节流的形式存放在缓冲区中 在此 对 缓冲区还要进行封装 构造一个提供按字节读取数据的 READ 接口和将数据按字节 写入的 WRITE 接口的缓冲区对象 同时 为了该对象与网络传输模块进行良好的 洽接 还为该对象加入将其中数据写出发至网络或者将网络中发来的数据写入缓冲 区的功能 下面是程序中对缓冲区对象类的定义源代码 class CBuffer public CBuffer virtual CBuffer 初始化 申请空间 由长度参数确定缓冲区实际大小 bool Init uint32 len 关闭 所有成员置空置 void Shutdown 将数据写入缓冲区 uint32 Write int8 buf uint32 len int32 SocketSend CIMSocket socket 将m buf中的数据发送到指定的SOCKET上 int32 SocketRecv CIMSocket socket 在指定的SOCKET上接收数据 放入m buf中 返回缓冲区的读标记位 int8 GetBuffer 获得缓冲区数据空间的首地址指针 uint32 GetSize 获得缓冲区的长度大小 int8 ReadChar 读取一个字节并做为char类型数据返回 uint8 ReadByte 读取一个字节以无符号整形返回 int16 ReadShort 读取两个字节以带符号数返回 uint16 ReadWord 读取两个字节以无符号数返回 int32 ReadInt 读取四个字节以带符号形式返回 uint32 ReadDword 读取四个字节以无符号形式返回 int64 ReadLongLong 读取八个字节以带符号形式返回 uint64 ReadULongLong 读取八个字节以无符号形式返回 读取一定长度的数据以String类型返回结果 void ReadString std string void ReadString int8 buf uint32 len protected bool ReadData int8 buf uint32 bytes public int8 m pBuf 缓冲区数据存放空间的地址指针 uint32 m nLen 缓冲区长度 用来动态申请缓冲区空间 uint32 has writen 已写标记 uint32 has read 已读标记 这个缓冲区的对象将作为每一个网络会话管理对象的一个成员 专门负责数据 的 I O 工作 4 2 2 会话管理对象的定义会话管理对象的定义 为实现网络传输层的良好封装 在系统中设计一个会话管理对象来负责完成网 络传输的工作 并设计其与系统逻辑层的接口 下面 首先通过图 4 2 来看一下这 个会话管理对象的类视图 再依次分析其中的成员 CSession 类 类 成 员 CIMSocket m socket uint32 m headhasread uint32 m ioState head sturct m head CBuffer m sendbuf CBuffer m recvbuf uint32 m sessionID CDialog parentDlg 成 员 方 法 void OnConnect void OnAccept void OnReceive void OnSend void OnClose void DealRecv 图 4 2 CSession 类视图 1 CSession 对象的成员 m socket 是一个 CIMSocket 类的对象 该类是由 MFC 库提供的 CAsyncScoket 继承而来 前面已经讲到过 CAsyncScoket 类 在派生类 CIMSocket 中 由于 CIMSocket 类的对象是 CSession 的一个成员 需要在 CIMSocket 中加入一个 CSession 的指针
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 提升县域基层医疗服务能力与综合服务水平
- 利用信息技术手段促进教育家精神的传承与发展
- 推动乡村卫生设施建设与资源均衡配置
- 金融行业风险管理系统设计与实现
- 产品研发投入结构表
- 2025年甘肃省武威市古浪县民权镇招聘大学生村文书笔试参考题库及完整答案详解1套
- 物资设备跟踪管理制度
- 特教资源教室管理制度
- 特殊岗位工时管理制度
- 特殊护理岗位管理制度
- 2024年山东威海文旅发展集团有限公司招聘笔试参考题库含答案解析
- 坚持以人民为中心
- DB32/T 4700-2024 蓄热式焚烧炉系统安全技术要求
- 2024年甘肃省国际物流有限公司招聘笔试参考题库含答案解析
- 妇科急症的处理与应急预案
- 钢筋挂篮计算书
- 集团分权管理手册
- 信息系统运维服务项目归档资料清单
- 辽宁省义务教育课程各科目安排及占九年总课时比例、各科目安排样表(供参考使用)
- 慢性呼吸疾病肺康复护理专家共识课件
- 乌兰杰的蒙古族音乐史研究-评乌兰杰的《蒙古族音乐史》
评论
0/150
提交评论