免费预览已结束,剩余33页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘 要 从实际工程应用角度出发 以计算机网络原理为指导 结合当前网络中的一些常用技 术 编程实现基于 winsock 的网络聊天工具 该聊天工具具有文本聊天 语音聊天功能 该论文主要对当今聊天软件的发展情况 与该聊天软件相关的各种技术以及该聊天工具 的实现做了一个详细的阐述 聊天工具的开发主要用到了网络通信技术 语音的采集 压缩 传输 解压缩以及回放等技术 该聊天软件基于 winsock 通信 在此基础上 实现 点对点聊天 语音聊天的传输 由于系统采用 c s 结构 客户端与客户端以及客户端与服 务器端需要传送一些控制消息 因此系统需要自定义一些消息类型 这是该聊天工具的又 一大关键之处 语音聊天作为一个独立的模块 镶嵌在点对点的聊天中 语音聊天的关键 之处在于语音的采集 压缩 发送 解压缩 回放上 关键词 网络通信 文本聊天 语音聊天 ABSTRACTABSTRACT In the opinion of practical engineering and guided by computer network principal and taking some common network technicals I take the software for chatting tool based on Winsock2 0 into practical The software s functions include point to point private chat sound chat This article is main particular expatiate about the development of today chatting software the technicals of chatting software and the designing programming of the software for chatting tool the software is need that transport control information between client and client client and server because of the system s C S structure So it is another key point that the software defines many types of information itself sound chatting is enchased in the pointing to pointing chatting as an independent module Gathering compressing transporting decompressing and playing sound information are the key technical of the sound chatting Key words network communication chatting sound chatting 目 录 第第 1 1 章章 绪绪 论论 1 1 1 项目开发的背景 1 1 2 项目开发的主要内容 2 1 3 项目开发的意义 4 1 4 项目开发的过程 4 第第 2 2 章章 需求分析需求分析 6 2 1 编写目的 6 2 2 项目背景 6 2 3 定义 缩写词和符号 6 2 4 任务概述 6 2 4 1 开发意图 6 2 4 2 应用范围 7 2 4 3 用户特点 7 2 4 4 产品描述 7 2 5 需求分析 7 2 5 1 对客户端功能的规定 7 2 5 2 对性能的一般规定 10 2 5 3 系统的先进性 11 2 5 4 系统的安全性 11 2 5 5 系统的易用性 11 2 5 6 系统的灵活性 11 2 5 7 故障处理 11 2 5 8 其它专门要求 11 2 6 运行环境 11 2 7 影响 12 2 8 尚需解决的问题 12 第第 3 3 章章 系统总体设计系统总体设计 13 3 1 编写目的 13 3 2 背景 13 3 3 定义 缩写词和符号 13 3 4 程序系统的组织结构 13 3 5 总体概要设计 17 3 6 模块概要设计 17 3 7 数据库的连接 26 第第 4 4 章章 测测 试试 29 4 1 测试目标 29 4 2 测试方法 29 4 3 测试结果 31 4 4 使用方法 32 1 第第 1 1 章章 绪绪 论论 1 11 1 项目开发的背景项目开发的背景 自从上世纪中叶第一台计算机诞生以来 计算机越来越成为我们生活中的重要工具 越来越走进人们的生活当中 特别是随着计算机网络的发展 把全世界的人们紧密的联 系在一起 大大的扩展了计算机的功能 人们越来越离不开计算机了 自从 1968 年世界 上第一个计算机网络 ARPA 网 17 美国国防部高级研究计划网 投入运行以来 计算机 网络技术在全世界范围内迅速发展 犹如雨后春笋 各种网络纷纷涌现 不同国家的计 算机网络相互连接 形成跨国计算机网络 促进了世界各国之间的科技 文化和经济交 流 在电子商务的应用中 计算机网络作为基础设施 将分散在各地的计算机系统连接 起来 使得计算机之间的通讯在商务活动中发挥了重要的作用 从此计算机的作用不再 那么单调 现在 Internet 把几乎全球的服务器相互连接起来 这样不仅使网络上的计算 机之间进行相互访问并下载对自己有用的资源 还可以用来写信 听音乐 看电视 通 过可视电话进行通信 通过 Internet 网进行信息查询 网上购物等 计算机正在改变我 们的通信 工作和娱乐的方式 伴随着网络时代潮流的到来使得人与人之间又多了一种 交流方法 那就是通过网络实现跨区域的间接交流 但是网络只是提供了硬件上的支持 想通过网络实现无地域局限性的交流还需要有软件方面的支持 迫于市场的需求关系聊 天系统诞生了 最早的聊天系统只是在 UNIX 环境上 使用 talk 指令建立用户间纯文字 的在线交谈 其所提供的功能仅能传输一般 ASC 码文字而已 于是寻找更好的人与人之 间通过网络交流的方法就为编程人员提出了新的课题 大家为了寻找一种更好的聊天方 法一时间聊天系统变成了一个大金矿 也为编程人员提出了新的要求同时也提供了一个 新的舞台 聊天是 Internet 中广泛应用的服务之一 随着网络技术的和软件技术的不断发展早 期在 UNIX 环境上 使用 talk 指令建立用户间纯文字的在线交谈 其所提供的功能仅能 传输一般 ASC 码文字而已 基于 visual c 语言对网络编程的支持为了更好地实现聊天系统的网络传输功能 使客户端和服务器能够更好的通信 本系统的编写采用了 visual c 语言 此聊天系统是一个典型的网络传输程序 同时还要连接数据库 该程序分两大部分 来编写 服务器端和客户端 服务器端用来响应客户端所发出的请求 同时还要连接数 2 据库 对数据库里的数据进行增加和删除 客户端用来接收用户的请求 然后做出相应 的操作 本文的结构可以分三个部分 1 系统分析 首先分析分析了系统的功能特点和要完成的功能 然后说出了 系统的实现原理对系统的实施方案做出了分析 最后提出该系统运行环境的需求 2 系统设计 对各个类的函数进行设计 对各个类的具体实现的实施 此模 块有实现各个类的主要代码 3 测试 对文本聊天 语音聊天 登录模块 注册模块进行测试 1 21 2 项目开发的主要内容项目开发的主要内容 要制作的聊天系统是一个简单 方便的通信系统 为两部分 服务器端和客户端 此聊天系统要可以方便用户之间进行交流 信息即时发送 即时回复 客户端主要完成四大功能 新建用户 用户登陆 文本聊天和语音聊天功能 客户 端申请与服务器端建立连接 当客户断与服务器端建立连接通道后就可以向服务器端发 送新建用户信息和登陆信息 还有客户端还支持查找好友和完成信息的编辑 发送和接 受功能 服务器端主要完成三大功能 建立连接 操作数据库和监听客户 服务器端建立一 个 serversocket 的连接 不断侦听是否有客户端的连接或断开连接 如有客户端申请连 接就启动一线程与客户端建立连接并根据客户端的请求对数据库进行操作并把结果返回 给客户端 客户通过 socket InteretAddress port 建立与服务器的连接 服务器与客户都通过 构造 connect listen 来进行连接和侦听 然后双方通过 send 和 receive 函数来 相互传递信息 一旦收到客户方的连接请求 服务器 accept 方法返回一个新建的 socket 对象 客户端然后向服务器发送消息 比如注册 登录等 服务器收到来自客户 的请求后 针对不同的消息处理请求 虽然 TCP 不可靠但是对于本系统可靠性并不太重 要 而且 TCP 快速 所以客户间发送信息通过 TCP 用户通过取得的好友的 IP 地址来向 好友发送消息 send 和接受消息 receive 服务器与客户间通过套接口 socket TCP 连接 在 visual v 中使用套接口相当简 单 API 为处理套接口的通信提供了一个类 csocket 使得编写网络应用程序相对容 易 服务器采用多线程以满足多用户的请求 通过 ODBC 与后台数据库连接 并通过创建 一个 serversocket 对象来监听来自客户的连接请求 默认端口为 1051 然后无限循环调 3 用 accept 方法接受客户程序的连接 如下图 图 1 1 所示服务器端主要完成建立连 接 操作数据库 监听客户的功能 其具体含义是 首先服务器端建立一个 serversocket 的连接 不断侦听是否有客户端要和服务器端连接或者断开连接 当有客 户断要与服务器建立连接服务器立即创建一个新的线程与客户端建立连接 然后再对数 据库做出相应的操作最后把结果返回给客户端 总之对数据库的操作也就是对数据库进 行增 删 改 查操作 当用户通过 TCP 收到消息后 可以得到对方的 ip 地址 通过对好友列表比较以判断 是谁并提示用户收到某某的消息 然后用户选择该用户查看消息 如果好友列表没有该 人就不会收的这个好友的消息 任何聊天系统不外乎由服务器端和客户端两部分组成 本聊天系统也不例外也是由 服务器端和客户端组成 其中服务器端主要是完成对数据库的操作 监听客户端 和建 立连接三个部分既可 客户端则要完成用户的新建 用户的登陆 查找好友和聊天功能 这样就基本完成了系统功能模块的划分 连接 图 1 1 系统的功能模块 用户注册 服务器收到用户的注册请求 便开始接受客户传递的信息 诸如客户的呢称 性别 个人资料等 接受完毕后 便通过与后台数据库连接 然后向数据库添加记录 如果成 功 便向客户返回其号码 并在数据库中注册用户的 IP 地址 客户收到服务器返回的信 息后 便打开主程序窗口 并同时开始创建 UDP 以便在用户之间建立联系 聊天系统 服务器端客户端 建 立 连 接 操 作 数 据 库 监 听 客 户 用 户 注 册 用 户 登 录 语 音 聊 天 文 本 聊 天 4 用户登录 在客户端 用户输入其号码和密码 然后建立与服务器的连接 告诉服务器我要登 录 服务器收到后 开始读取数据库 然后与用户输入的信息比较 如果相同就向客户 返回成功消息以及注册其 IP 地址 否则返回错误 如果客户收到成功信息就打开主窗口 否则提示出错 如果成功 便打开主程序窗口 并同时开始创建 TCP 以便在用户之间建 立联系 然后客户向服务器请求读取好友名单 服务器收到该请求 开始读取数据库中 的名单 然后显示好友 收发信息功能 收发信息是本聊天系统的核心部分 也是本系统网络传输的体现所在 两个客户端可以通过 TCP 协议直接通信 不管你的好友在不在线 如果在线可以通 过 TCP 协议给他 她 发送消息 同时也可以接受好友发给你的消息 语音聊天功能 语音聊天也是聊天系统的核心部分 也是本系统网络传输的体现所在 两天客户端可以通过 TCP 协议直接通信 首先 要看看你的好友在不在线 如果在 线点击好友列表里的那个指定好友 然后 点击语音聊天 这样 所连接的两个好友就 可以进行语音聊天了 1 31 3 项目开发的意义项目开发的意义 随着信息化的普及和发展 现在网络不仅在各企事业单位中的应用越来越广泛而且 也已经逐渐融入了每个人的生活当中 逐渐的成为人们生活中不可或缺的一部分 为了更好的充实人们的生活 我特做此系统更满足人们在日常生活的需要和需求 也为了满足人们在信息流通方面的方便 使得人们更能分享互联网上的资源 使得的网 络的意义更能充分的体现 交流是系统的关键也是目的 它能让你在简单的对话中了解复杂的社会 多彩的世 界 使得人与人之间的距离彻底拉近 就像是面对面的交谈 彼此之间没有界限 没有 差别 只有心与心的共振 它也是你心灵抒发的对象 把你心中的快乐 郁闷 论点 观点肆无忌惮的阐发出 来 没有压制 只有争论 它就是你阐发心灵的平台 是你交友的另一重要方式 缺少 了它你会感觉没什么 但是一旦有了它你会发现它是那么的重要 伴随着网络时代潮流的到来使得人与人之间又多了一种交流方法 那就是通过网络 实现跨区域的间接交流 但是网络只是提供了硬件上的支持想通过网络实现无地域局限 5 性的交流还需要有软件方面的支持 迫于市场的需求关系聊天系统诞生了 最早的聊天 系统只是在 UNIX 环境上 使用 talk 指令建立用户间纯文字的在线交谈 其所提供的功 能仅能传输一般 ASC 码文字而已 于是寻找更好的人与人之间通过网络交流的方法就为 编程人员提出了新的课题 大家为了寻找一种更好的聊天方法一时间聊天系统变成了一 个大金矿 也为编程人员提出了新的要求同时也提供了一个新的舞台 本需求的编写目的在于研究语音聊天软件的开发途径和应用方法 此需求规格说明 书对语音聊天软件做了全面细致的用户需求分析 明确所要开发的软件应具有的功能 性能与界面 使系统分析人员及软件开发人员能清楚地了解用户的需求 本说明书是整 个软件开发的依据 它对以后阶段的工作起指导作用 本文也是项目完成后软件验收的 依据 本说明书的预期读者为客户 与语音聊天软件开发有联系的决策人 开发组成人 员 业务或需求分析人员 测试人员 用户文档编写者 项目管理人员 随着信息化的普及和发展 现在网络不仅在各企事业单位中的应用越来越广泛而且 也已经逐渐融入了每个人的生活当中 逐渐的成为人们生活中不可或缺的一部分 为了更好的充实人们的生活 我特做此系统更满足人们在日常生活的需要和需求 也为了满足人们在信息流通方面的方便 使得人们更能分享互联网上的资源 使得的网 络的意义更能充分的体现 交流是系统的关键也是目的 它能让你在简单的对话中了解复杂的社会 多彩的世 界 使得人与人之间的距离彻底拉近 就像是面对面的交谈 彼此之间没有界限 没有 差别 只有心与心的共振 它也是你心灵抒发的对象 把你心中的快乐 郁闷 论点 观点肆无忌惮的阐发出 来 没有压制 只有争论 它就是你阐发心灵的平台 是你交友的另一重要方式 缺少 了它你会感觉没什么 但是一旦有了它你会发现它是那么的重要 1 41 4 项目开发的过程项目开发的过程 该项目的开发过程大致是这样的 可以分为三个大的阶段 第一个阶段是该软件的计划 分析和调研阶段 在这个阶段里 大致的学习了相关 的技术 分析了相关的聊天软件的性能和功能 第二阶段就是软件的设计与实现 是该软件的需求分析与初步设计以及实现阶段 这是该软件的第一个模型 后来是对软件的结构进行改进的阶段 这是该软件的第二个 模型 再后来在该阶段提出了新的目标 即加入语音聊天 在原有的基础上增加了文件 的传输功能 并且对界面做了改进 从这也可以说 该软件的总体开发模式采用原型演 6 化的开发模型 而且先前对有些知识不是很了解 所有这些都是采用原型开发的必然因 素 第三个阶段是软件的测试和文档整理阶段 5 月中旬完成了对软件的所有的功能的测 试 并且整理软件的文档 写完论文 软件由两个人负责 采用原型的开发模型 分成通信模块 文本聊天的模块 语音 聊天的模块等主要的几大模块 该项目规模适中 适合两个人工作 7 第第 2 2 章章 需求分析需求分析 2 12 1 需求分析需求分析 2 1 1 对客户端功能的规定 此系统选用 Visual C 语言作为前端开发工具 利用其提供的集成开发环境及各种 控件 语音聊天软件由客户端和服务两个部分组成 我所负责的客户端的功能具有 语 音聊天 关闭系统 登录系统 文本聊天 注册功能等 其总体功能用例图如图 2 1 图 2 1 总体功能图 登录 语音聊天 关闭 文本聊天 注册 服 务 端 客 户 端 8 1 登录 登录是语音聊天软件的重要的功能 它是可以让用户登录到主对话框 功能概述 客户端操作是聊天软件的主要操作 功能是登录到聊天软件上 可以与 对方进行聊天等操作 登录功能的总体状态转换图 2 3 所示 图 2 3 登录功能转换图 2 关闭 关闭功能是能关闭聊天软件 这样 你就可以退出聊天软件了 功能概述 关闭功能是让用户可以在本地计算机上能退出语音聊天软件 关闭功能 的总体状态转换图如图 2 5 所示 图 2 5 退出功能状态转换图 3 文本聊天 文本聊天功能是指在两台电脑间可以自由 快速 直观地进行信息的传递 功能概述 文本聊天功能包括发送信息 接收信息的操作功能 文本聊天功能的总 体状态转换图如图 2 7 所示 客户端客户端 客户端 服 务 端 客户端 客户端 客户端 服务端 数据库 9 信 数据操作 息 传 递 图 2 7 文本聊天功能 7 语音聊天 语音聊天的功能是通过服务端让客户端和客户端之间进行相互发送语音信息 功能概述 语音聊天功能是通过服务端使两个客户端之间进行语音信息相互传输 发送语音信息功能的总体状态转换图如图所示 8 注册 注册是让客户端对在服务端注册一下用户的信息 其总体功能用例图如图 2 10 所示 图 2 9 发语音送信息状态转换图 客户端 B 客户端 A连接成功 语音通信 文本通信 服务端 客户端 客 户 端 服务端 数 据 库 10 功能概述 注册功能是客户端在服务端进行注册 以便登录到语音聊天软件上后可 以进行文本聊天和语音聊天 注册功能的总体状态转换图如图 2 11 所示 2 11 注册功能总体状态转换图 2 5 2 对性能的一般规定 1 操作应该方便 灵活 2 系统应有较高的稳定性 3 系统应有较高的安全性 4 系统应有较高的容错性 5 速度上要求前台要能够很快地反应用户 后台操作不能出现超时现象 2 5 3 系统的先进性 当前计算机软件的技术发展迅速 作为语音聊天软件 应该确保系统在以后仍是先 进的 在系统的生命周期尽量做到系统的先进 充分完成用户的要求 这一方面可能通 过系统的开放性和可扩充性 不断完善系统的功能 另一方面 在系统设计和开发的过 程中 应在考虑成本的同时尽量采用当前主流先进且有良好发展前途的产品 2 5 4 系统的安全性 系统要求使用用户必须输入客户端正确的用户名和密码 才能建立连接 2 5 5 系统的易用性 语音聊天软件的使用者是广泛的 使用者并不要求有专业的计算机知识和操作 所 以此系统会能够提供友好的用户接口 易用的人机交互界面 基于这一点 系统设计人 员在设计系统时尽量使用用户熟悉的术语和中文信息的界面 客户端 A 客户端 B 注 册 服务端 数据库 11 2 5 6 系统的灵活性 当用户需求或数据在传输过程中发生变化时 设计的软件要做适当的调整 灵活性 非常大 2 5 7 故障处理 语音聊天软件中涉及到用户相当重要的文件和信息 因此系统应提供日常的系统维 护人员进行系统的检测 在正常使用时不应出错 若运行时遇到数据传输有误时 应会 及时中断传输数据 2 5 8 其它专门要求 系统在设计开发使用过程中都要涉及到很多的计算机的硬件 软件 所有这些都符 合主流国际 国家和行业标准 在开发此系统的同时 应要进行良好的设计工作 制订 行之有效的软件工程规范 保证代码的易读性 可操作性和可移植性 2 62 6 运行环境运行环境 硬件要求 1 CPU P3 及以上处理器 2 内存 256MB 及以上 3 两台或两台以上具有上述配置及以上配置的计算机 4 网络协议 TCP IP 协议网络 此软件不需要特定的硬件或硬件接口进行支撑 支持软件 1 操作系统 任一支持 GUI 界面操作的 OS 2 运行环境 visual c 6 0 2 72 7 影响影响 语音聊天软件能够大大地提高个人或公司的工作效率 加强人际关系 满足用户方 便的要求 2 82 8 尚需解决的问题尚需解决的问题 需求分析不够深入 考虑问题也不是很全面 另外版式设计也有待提高 12 第第 3 3 章章 系统总体设计系统总体设计 3 13 1 编写目的编写目的 在完成了针对 语音聊天 软件市场的前期调查 同时与本组员在对网络上多款聊 天软件进行了全面深入地探讨和分析 以及根据前面所写过的需求分析提出了这份软件详 细设计说明 本详细设计说明书是编程的依据 是系统分析与设计人员 程序设计者的必读的参 考用书 它的预期读者为客户 业务或需求分析人员 测试人员 3 23 2 背景背景 我们的系统是基于语音聊天系统软件 本项目的任务是 xxxx 开发小组提出 由 xxxx 成员研制和开发 待使用的是需要进行语音聊天的用户 本详细设计说明书的预期读者 为客户 与语音聊天软件开发有联系的决策人 开发组成人员 业务或需求分析人员 测试人员 3 33 3 定义 缩写词和符号定义 缩写词和符号 模块 是大规模软件设计的基本策略 算法 解决问题的步骤的集合 3 43 4 程序系统的组织结构程序系统的组织结构 主要讲程序如何组织的 设计的类和类的封装 类相互的关系和组织方式 本程序 界面采用 MFC 对话框应用程序封装 核心代码是 C 代码 客户端程序一共有 6 个类 MFC 对话框程序自动生成 3 个类 CAboutDlg CVoiceQQApp CVoiceQQDlg 和自己设计的三个类 CClientSocket CRegDlg CTalkDlg 如图 3 1 程序的组织结构图 13 图 3 1 程序的组织结构 各个类的简介 CAboutDlg 类 使用 MFC 向导生成的 不做任何改变 CVoiceQQApp 对话框应用程序类 在类成员函数 OnInitDialog 里面实现了 socket 的初始化工作 使用 m sClient SetParent this 设置客户端套接字以及 m sClient Create 创建一个客户端套接字 所有的 MFC 类 CAboutDlg CVoiceQQApp CVoiceQQDlg CClientSocketThre CRegDlg Globals CTalkDlg 界面程序组织 CAboutDlg CVoiceQQApp CVoiceQQDlg 客户端启动程序 CTalkDlg OnInitDialo g 执行 创建套接字 连接服务器 判断是 登录还是注册 初始 化主框架界面 服务器端启动程序 CServerDlg OnStartBt n 执行 是开启服务 器响应函数也就是创 建一个套接字 不断 监听客户端是否有请 求点击 注册 调用 CRegDlg OnregisterBt n 读取用户信息 传 递参数到 CTalkDlg 类 调用 CTalkDlg 定义的 变量 dlg DoModal 函 数显示主对话框 服务器端调用接收数据函数 CServerDlg ReceiveData CClientSoc ket socket 用来接收客户端发送过 来的数据如果是老用户进行用户名 和密码的验证这一过程调用 CServerDlg LoginSystem CString strName CString strPas 函数 如果 是新用户要打开数据库把用户写入 CServerDlg RegisterSystem CString strName CString strPas 点击 登录 调用 CVoiceQQDlg OnLO GINBtn 读取用户信 息 传递参数到 CTalkDlg 类 调用 CTalkDlg 定义的变量 dlg DoModal 函数显 示主对话框 点击 语音聊天 或者 文本聊天 后 CTalkDlg Onsendfont 和 CTalkDlg Onsendvoice 相应此操作 登录到主对话框中 点击 语音聊天 CTalkDlg OnStartvoice 或者点击 文本聊天 CTalkDlg OnStartfont 14 CVoiceQQDlg 程序的登录界面类 界面使用的控件有按钮 编辑框 静态文本 组框 图标 使用的消息有鼠标单击按钮消息 如表 3 1 控件属性表 表 3 1 控件属性表 控件名称控件类型控件 ID控件成员变量控件的属性 图标 QQ图标IDC STATIC默认 图标钥匙图标IDC STATIC默认 账号 静态文本IDC STATIC默认 密码 静态文本IDC STATIC默认 登录按钮IDC LOGIN Btn默认 注册按钮IDC GetNew Btn默认 取消按钮IDC Exit默认 QQ 登录组框IDC STATICCEditm pasword默认 账号编辑框IDC User NameCedit m userName默认 密码编辑框IDC Password默认 VoiceQQ IDD VOICEQQ DIALOG默认 CTalkDlg 程序的主要界面类 界面使用的控件有按钮 编辑框 静态文本 使用 的消息有鼠标单击按钮消息 如表 3 2 控件属性表 表 3 2 控件属性表 控件名称控件类型控件 ID控件成员变量控件的属性 发送内容编辑框IDC message editCEditm msgEdit默认 聊天空间编辑框IDC talk EditCEditm talkEdit默认 好友列表编辑框IDC user listCListBox m useList默认 状态静态文本IDC STATIC默认 文字聊天按钮IDC Start voice默认 语音聊天按钮IDC Start font默认 退出按钮IDC Exit Btton默认 CRegDlg 程序的注册界面类 界面使用的控件有按钮 编辑框 静态文本 组合 框 使用的消息有鼠标单击按钮消息 如表 3 3 控件属性表 15 表 3 3 控件属性表 控件名称控件类型控件 ID控件成员变量控件的属性 用户名 静态文本IDC STATIC默认 用户密码 静态文本IDC STATIC默认 重复密码 静态文本IDC STATIC默认 用户名编辑框IDC userName editCEditm sName默认 用户密码编辑框IDC pas edit oneCEditm Bpas默认 重复密码编辑框IDC pas edit twoCEditm sName默认 注册按钮IDC register Btn默认 取消按钮IDC Exit Btn默认 用户注册组合框IDC STATIC默认 1 登录模块 登录功能是语音聊天软件的重要部分 结构如 UML 图 3 2 所示 图 3 2 登录子模块 UML 图 2 注册模块 注册模块的功能是把用户的信息存入到服务端的数据库中 结构如 UML 图 3 3 所示 登录模块 语音聊天 文本聊天 16 图 3 3 注册子模块 UML 图 3 53 5 总体概要设计总体概要设计 根据语音聊天软件的功能和系统特点 客户端总体功能图如图 3 6 所示 图 3 6 语音聊天软件总体功能 3 63 6 模块概要设计模块概要设计 3 6 1 主界面 主界面是系统的初始界面 主要功能是为系统内所有的模块提供接口 协调各个子 登录模块 用户名 密码 客户端 登录 注册 语音聊天 文本聊天 退出 服 务 端 17 模块在系统中的关系 为模块提供运行环境的支持 主界面采用类 Windows 操作系统的 一个界面 在感官上给人一种亲切的感觉 在操作上也比较方便 符合人们平时的使用 习惯 3 6 2 客户端总体设计说明 客户端的主界面包括两个模块 注册模块 登录模块 它的总体结构如图 3 7 所示 图 3 7 客户端总体结构图 上面对客户端的总体设计做了介绍 下面对各个模块的详细功能进行说明 1 登录模块设计说明登录模块设计说明 客户端操作员进入界面后操作主界面的登录模块功能 具体详细如图 3 8 所示 客户端 总体结构 注册模块 登录模块 18 开始处 使用 GetWindowText 函数 使用 GetWindowText 函数 使用 CompareNoCase 函数进行校验 否 是 在 Ctalk 类中调用 reveive 函数 新的对话框打开 图 3 8 登录模块流程图 由语音聊天软件客户端的登录模块架构图可大致了解到登录模块的基本架构及其基 本功能的实现 本模块包括登录 连接的操作 客户端操作员进入主界面后与服务端建立连接 通过用户名 密码验证正确后方才 能与服务端建立连接 客户端与服务端之间连接的操作流程具体详细说明如图 3 9 所示 连接 服务端 到 voiceQQ 对话框内 进入主对话框 完成 客户端操作员 获得用户名和密码 进行身份验证 name 1 密码输入有 误 请重新输 入 name 2 没 有这个用户 请重新输入 name 3 该 用户已经登 陆 进行数据库访问 19 图 3 9 客户端与服务端连接方式调用过程图 我们所用的是流式套接字 SOCK STREAM 提供面向连接 可靠的数据传输服务 数据无差错 无重复的发送 且按发送顺序接 收 2 2 注册功能设计说明注册功能设计说明 客户端用户进行主界面后可以在注册模块下进行用户名 密码与数据库进行间接连接的 操作 以下是注册功能模块的详细说明如图表示 关闭 serversocket 关闭 socket 创建一个套接字 socket 关闭 socket 和服务器端进行通信 send recv 调用 connect 建立与 server 端 的连接 创建套接字 socket 将套接字绑定到一个本地地址和端口 上 bind 将套接字设为监听模式 准备接收客 户请求 listen 用返回的套接字和客户端进行通信 send recv 等待客户请求到来 当请求到来后 接受连接请求 返回一个新的对应于 此次连接的套接字 accept 返回 等待另一客户请求 调用 socket 创建一个会话的 socket 调用 serversocket 创建一个监听的 socket 客户端服务端 20 开始 使用 OnregisterBtn 函数进行注册 O O 使用 nExitBtn 函数退出 否 是 使用这个 OnregisterBtn 函数 失败 IsEmpty 判断是否为空 成功 失败 成功 使用 RegisterSystem 函数访问 使用 GetUserLogin 函数 把新用户记录在数据库中国 是 否 连接 服务端 数据存入数据库 操作 访问数据库 存储数据 会出现 恭喜 注册成功 对话框然后转到注册对话框 Sorry 该用户名已存在 请重新输入 Sorry 注册时出现错误 请 稍候在注册 客户端操作员 voiceQQ 对话框 点击注册按钮 到注册对话框 点击 取消 按钮 点击注册按钮 录入用户名 密码等信 息 连接 注册 21 图 3 10 注册功能模块的详细说明 3 3 声音的发生和接收的流程图声音的发生和接收的流程图 3 113 11 实现以及录音的流程图实现以及录音的流程图 3 123 12 发送数据流程 接收数据流程 否 否 是 是 是 是 发送数据消息循环 Listen 函数进行监听是否有声音 接收数据的消息循环 OnAccept 函数进行端口监听消息处理 waveOutPrepareHeader 函数 准备一块接收音频输出的缓冲区 图 3 11 声音发送和接收的流程图 创建一个 windows 套接字 绑定本地地址 bind 绑定本地地址 bind 创建一个 windows 套接字 主叫端 主叫端 调用 receive 接收主 叫端的连 接请求 调用 connect 调用声音压缩 模块对声音进 行压缩 将接收的数据 放入播放缓冲 区 调用 send 发送压缩后的 数据 调用 recv 接收声音数据 结束通话关闭 closesocket 调用 connect 监听是否 有声音 监听是否 有声音 结束通话 结束通话 22 定义一个 WAVERFORMATEX 类型的变量 waveformat 指定以下录音格式 waveformat wFormatTag WAVE FORMAT PCM 标志 各种波形格式 waveformat nChannels 1 声道数 waveformat nSamplesPerSec 8000 采样频率 waveformat nAvgBytesPerSec 16000 每秒采样音频字 节数 waveformat nBlockAlign 2 音频数据单元 waveformat cbSize 0 压缩系数 waveformat wBitsPerSample 16 每声道每样本采样位 数 打开录音设备 intres waveInOpen 准备内存块录音 waveInPrepareHeader m hWaveIn m pWaveHdr i sizeof WAVEHDR 增加内存块 waveInAddBuffer m hWaveIn m pWaveHdr i sizeof WAVEHDR 关闭录音设备 waveInClose m hWaveIn 清空内存块 waveInReset m hWaveIn 停止录音 waveInStop m hWaveIn 开始录音 waveInStart m hWaveIn 23 图 3 12 录音函数流程图 录音的的准备工作主要是 4 点 打开录音设备 获得录音句柄 指定录音格式 分 配若干用于录音的内存 开始录音时 先将所有内存块都提供给录音设备用来录音 录 音设备就会依次将语音数据写入内存 当一块内存写满 录音设备就会发一个 window 消 息 MM WIM DATA 给相应的窗口 通知程序做相应的处理 这时程序通常的处理是把内存 中的数据进行复制 如写入文件等 在此的处理是把数据通过网络发送并且在本地机上 播放出来 然后把内存置空 返还给录音进行录音 这样就形成一个循环不息的录音过 程 结束录音时就释放所有内存块 关闭录音设备 音频数据处理用的是 CSound 类 这个类中有 9 个函数 第一步 初始化 1 void Init CserverDlg dlg sound 对象初始化 waveInGetNumDevs 来判断 当前系统中的波形音频输入设备的数目 如果该函数返回 0 则表示无音频输入 设备或发生了其他错误 这个函数一般在程序初始化时对音频硬件设备进行检测 2 然后使用 waveOutGetNumDevs 判断当前系统中的波形音频输出设备的数目 如 果该函数返回 0 则表示无音频设备或发生了其他错误 这个函数一般也用来在 程序初始化时对音频硬件设备进行检测 3 然后对格式进行先赋值 waveformat wFormatTag WAVE FORMAT PCM 标志各种波形格式 waveformat nChannels 1 声道数 waveformat nSamplesPerSec 8000 采样频率 waveformat nAvgBytesPerSec 16000 每秒采样音频字节数 waveformat nBlockAlign 2 音频数据单元 waveformat cbSize 0 压缩系数 waveformat wBitsPerSample 16 每声道每样本采样位数 waveInOpen 和 waveOutOpeng 函数用来打开录音设 备 4 然后 m pWaveHdrIn 0 lpData m cBufferIn m pWaveHdrIn 0 dwBufferLength MAX BUFFER SIZE m pWaveHdrIn 0 dwBytesRecorded 0 m pWaveHdrIn 0 dwFlags 0 5 接下来准备内存块录音 这个使用以下在函数 24 waveInPrepareHeader m hWaveIn 增加内存块所用函数 waveInAddaBuffer m hWaveIn 6 然后准备内存块录音 waveOutPrepareHeader m hWaveOut 7 然后使用 waveOutWrite m hWaveOut 这个函数是发送一个数据块到给定的波形音频输出设 备 WAVEHDR 结构的成员变量 lpData 指向波形缓冲区 dwBufferLength Buffer 的大小 dwBytesRecorded 表示 目前 Buffer 中已读取的字节数 dwUser 用户数据 dwFlags 有关于 Buffer 的标志 WAVEHDR 结构定义的是波形音频 Buffer 第二步 点击语音聊天按钮 进行语音聊天 1 调用 CTalkDlg OnStartvoice 这个消息响应函数 2 使用 CTalkDlg GetVoiceDlg 显示是语音聊天状态 具体 开始录音 调用 CSound 类中的 Record 函数 这个函数中调用 waveInStart m hWaveIn 开始录音 这个函数用来在某个音频输入设备上录音 m hWaveIn 是波形输入设备的句柄 初始化时 使用的 waveOutWrite m hWaveOut 这个函数是 发送一个数据块到给定的波形音频输出设备 3 当录音的 Buffer 装满的时候会发送一个消息到窗口 从而窗口消息出来函数调 用一个函数是 CSound 类中的 FreeRecordBuffer 来释放 Buffer 4 然后调用停止录音使用 CSound 类中的 StopRecord 函数 这个函数 在其内部 调用 waveInStop 函数 5 当播放使用的 Buffer 满的时候需要调用 CSound 类中 FreePlayBuffer 函数清空 Buffer 先调用 waveOutprepareHeader 函数清楚 waveOutPrepareH Eader 函数的准备内容 这个函数必须在装置驱动读完数据块之后调用 再准备内存块录 音以及增加内存块 3 程序工作流程图程序工作流程图 25 服务端调用 send 发送数据 客户端 调用 send 发送数据 图 3 12 程序工作流程图 3 73 7 数据库的连接数据库的连接 系统可以采用任何一种流行的 Visual C 系统采用了 Microsoft 公司的 SQL Server 2000 作为后台数据库 SQL Server 2000 是功能强大的数据库管理系统 拥有十 分友好的用户界面 支持结构化查询语言 structured query language 本系统中使 用登录名为 feiyang 密码为 2954812 进行连接测试 Visua C 应用程序都可以利用 JDBC 方法完成对数据库的访问和操作 应用本系统 采用 JDBC ODBC 桥连接 SQL Server 数据库 完成的任务有 请求与数据库建立连接 向 客户端服务端 CTalkDlg 类中先运行 OnInitDialog 函数 在此函数中调用 Create 函数创建套 接字 这是第一步创建套接字 CTalkDlg 类中运行 ConnectSever 函 数 主要是为了连接服务端 CTalkDlg 类中在运行的 OnInitDialog 函 数中继续调用 send 函数判断是老用 户的登录 还是新用户的注册 CTalkDlg 类中运行 Receive 函数 此函数主要是用来接收服务器端的数据 服务端中 CServerDlg 类中先运行 OnStartBtn 函数 此函数是 开 启服务器 的相应函数 主要用途 是创建套接字 服务端中 CServerDlg 类中运行 AcceptConnect 函数用来接收客 户端请求 服务端中 CServerDlg 类中运行的 OnStartBtn 函数中调用 Listen 函数 进行监听客户端的 请求 服务端中 CServerDlg 类中继续运行 ReceiveData 接收客户端数据 26 数据库发送 SQL 请求 为结果集定义存储应用和数据类型 查询结果 处理错误 提交 和关闭等操作 用 JDBC ODBC 来实现访问数据库需要以下几个步骤 1 建立数据源 首先通过 Windows 的 控制面板 在 管理工具 中单击 数据源 ODBC 来配置 数据源 这点不是 JDBC 的要求 而是 ODBC 所必须的 当使用 ODBC 桥来建立 连接时 必须先建立 ODBC 数据源 2 装载 ODBC 驱动程序 DriverManager 类管理各种数据库驱动程序 建立新的数据库连接 通过调用方法 Class forName 来显示的加载驱动程序类 由于各个数据库驱动名称都不尽相同 所以 要根据所用的数据库类型加载相应的驱动 3 建立连接 与数据库建立连接的标准调用方法有多种 本系统采用 strName Format Provider MSDASQL 1 Persist Security Info FALSE User ID sa Data Source VData Inital Catalog sysData 4 执行 SQL 语句 JDBC 提供了三个用于向数据库发送 SQL 语句的类 Statement 和 PreparedStatement 和 CallableStatement 这三个类用途都不尽相同 可以根据不同的 需要采用不同的类向数据库方式 SQL 语句 本系统在于数据库的连接采用了 Statement 和 PreparedStatement 分别用于登录用户的验证和聊天信息的存储等操作 5 检索结果 SQL 语句发送后 数据库返回的结果集存放在一个 ResultSet 类的对象中 系统将 用户输入的数据和数据库返回的结果集逐个地进行比较以确定用户的输入是否正确 6 关闭连接 在对象使用完毕后应当调用 close 方法解除与数据库的连接 并关闭数据库 以 释放应用程序占用的系统资源 图 3 13 演示了通过 ODBC 连接 vc 数据库的过程 27 建立数据源 装入驱动程序 建立与数据库的连接 发送 SQL 操作语句 执行 SQL 语句 得到结果 关闭数据库连接 释放资源 图 3 13 连接数据库图 数据源 驱动程序管理器 关闭连接 连接 SQL 语句 结果集 28 第第 4 4 章章 测测 试试 4 14 1 测试目标测试目标 该测试将测试该软件的所有功能是否达到要求如下 登录功能 对个人资料的非法输入以及同名能够得到验证以及个人资料的读取和保 存功能正常 注册功能 对个人资料的非法输入以不能保存 要符合正确的输入规范 退出功能 单击退出按钮能够正常的退出 语音聊天功能 单击语音聊天按
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025翡翠购销合同模板
- 2025国内货物买卖合同模板「」
- 2025高校教师公寓租赁合同
- 2025版胆结石常见症状及胆道结石护理技巧分享
- 2025年护理质控标准考核试题与答案
- 华为普工岗位介绍
- 华为融媒项目介绍
- 2025版肾功能衰竭症状详解及护理技巧
- 生物试题卷|2506浙南名校联盟高二下期末统考【浙江卷】【高二下期末考】浙江省2024学年第二学期2025年6月浙南名校联盟高二年级期末联考(6.25-6.27)
- 养老护理年终工作总结5篇
- 2025江苏连云港市海州区国有企业招聘23人笔试参考题库附带答案详解(10套)
- 2025至2030中国水声调制解调器行业市场深度研究与战略咨询分析报告
- 2025年上海工会面试题目及答案
- 冬季模板支撑施工安全管理措施
- 粮食质量安全事故处置方案
- 工会绩效考核管理办法
- 北京民政局考试题库及答案
- 提高晨间护理合格率
- 2025上半年上海闵行区区管国企公开招聘35人笔试参考题库附带答案详解
- 台球俱乐部福利活动方案
- 软件框架互操作研究-洞察阐释
评论
0/150
提交评论