




已阅读5页,还剩67页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于基于 NETBIOSNETBIOS 的聊天工具毕业论文的聊天工具毕业论文 目录目录 第第 1 1 章章绪绪 论论 9 9 1 1项目开发的背景 9 1 2项目开发的主要内容 10 1 3项目开发的意义 10 1 4项目开发的过程 11 第第 2 2 章章系统分析系统分析 1313 2 1对已有聊天软件的分析 13 2 2系统有关的技术 14 2 2 1网络通信技术 15 2 2 2语音聊天技术 17 2 2 3文件传输技术 20 2 2 4多线程技术 21 2 3系统方案说明 23 2 3 1可选择的其他系统方案 23 2 3 2本系统的方案 24 2 4系统任务概述 26 2 5系统其他要求 27 1 2 5 1系统性能要求 27 2 5 2系统环境要求 28 第第 3 3 章章系系 统统 设设 计计 2929 3 1系统的物理结构 29 3 2系统的软件结构 31 3 3系统数据结构设计 34 3 4系统界面设计 38 第第 4 4 章章系统实现系统实现 4242 4 1功能规定 42 4 2几个主要的线程的程序设计 49 4 2 1聊天室服务器端接收消息线程的程序设计 49 4 2 2二人私聊接收消息线程的程序设计 50 4 2 3文件传送的程序设计 51 4 2 4语音聊天的程序设计 53 4 3源代码分析 54 4 3 1接受语音数据线程源代码分析 54 4 3 2新建房间线程源代码分析 57 第第 5 5 章章测试与使用测试与使用 6464 5 1测试目标 64 2 5 2测试方法 64 5 3测试结果 68 5 4使用简介 69 第第 6 6 章章总总 结结 7171 致谢致谢 7575 参考文献参考文献 7676 3 第第 1 1 章章绪绪 论论 1 11 1项目开发的背景项目开发的背景 自从上世纪中叶第一台计算机诞生以来 计算机越来越走进人们的生活 当中 特别是随着计算机网络的发展 把全世界的人们紧密的联系在一起 大大的扩展了计算机的功能 人们越来越离不开计算机了 如今 作为网 络应用之一的聊天工具 越来越受到人们的欢迎和重视 现在已有的聊天 软件和聊天工具不胜枚举 流行的主要有 QQ ICQ MSN Message NetMeeting mIRC 和郎码 UC 和各种的网页聊天室等 这些软件特 别是 QQ 升级很快 其功能是越来越来强大 将代表着聊天软件的发展方 向 目前 聊天软件的功能除了最基本的文本聊天 已经可以语音聊天 图像聊天 视频聊天 文件传输等三维聊天 还发展了短信发送 无线聊 天 在线游戏等功能 可以预见在不久的将来 聊天软件将成为人们通过 因特网相互联系和娱乐的主要平台 然而这些软件的一个共同的缺点是采 用了 c s 的结构模式 如果服务器出现故障 则这个聊天系统都将瘫痪 该 毕业设计课题为基于 netbios 的聊天工具的设计与实现 它是在 netbios 通信 和文本聊天的基础上来实现语音聊天 文件传输 从一开始就要求该聊天 4 软件能够自建服务器 它能够被应用在一个个独立的自治系统中 灵活性 很大 1 21 2项目开发的主要内容项目开发的主要内容 设计并实现基于 NETBIOS 的文本聊天程序包括广播聊天 聊天室聊天 二人私聊 涉及的内容包括通信方式的选择 及选择会话方式是资料报还是建 立连接方式 netbios 通信 身份验证和房间名验证 建立服务器 连接服 务器以及 vc 接口实现等 设计并实现基于 NETBIOS 的语音聊天 文件传 输 涉及的内容包括通信方式的选择外 还有多播与广播 多线程 语音技术 文件传输技术等内容 1 31 3项目开发的意义项目开发的意义 本项目是作为本科的毕业设计课题提出来的 它规模适中 适合于个人 开发 能够锻炼同学的学习新知识能力 锻炼同学的编程能力 锻炼同学 的软件工程的思维方式 它的具体意义见下面 聊天工具已经被广大用户使用 由于服务器固定的局限性 当服务器瘫 痪或到服务器的网络中断时 将使聊天系统崩溃 该聊天工具正好弥补 了这个缺陷 可以用于任一个自治系统中 灵活性大 实用性强 5 目前 计算机的发展离不开网络这一方向 网络将大大扩展计算机的功 能 研究计算机在网络方面的技术以及应用 挖掘计算机的网络潜能 将能够大大提高我们对计算机的本身的认识 同时也能加深对计算机网 络的认识 网络的一大应用就是用于用户之间联络的聊天工具 通过对聊天工具的 开发 我们将了解计算机如何通过网络相互通信以及在此相互通信的基 础上实现的应用程序级的协议 随着文本聊天的普及 人们对多媒体通信越来越渴望 其中语音聊天就 是一种既廉价又能够满足人们感官需要的一种聊天方式 这只需要聊天 的双方各有一个声卡和耳机即可 这是一般计算机的基本配置 通过对 语音聊天的开发 我们将学会操作系统如何支持开发人员对声音的采集 压缩 解压缩 回放 以及如何利用就计算机网络来传送语音信息 来 实现语音聊天 语音聊天是该软件的难点之处 也是特色之处 如何保 证语音的质量 减少噪音 需要在编程调试的实践过程中不断摸索 加深对在网络中传输文件理解 1 41 4项目开发的过程项目开发的过程 该项目的开发过程大致是这样的 可以分为三个大的阶段 第一个阶段是该软件的计划 分析和调研阶段 在这个阶段里 大致的学 6 习了相关的技术 分析了相关的聊天软件的性能和功能 这个阶段大致到 2004 年 2 月 1 号结束 第二阶段就是软件的设计与实现 从 2 月 1 号到 3 月 30 号 是该软件 的需求分析与初步设计以及实现阶段 这是该软件的第一个模型 从 3 月 30 号到 4 月 15 号是对软件的结构进行改进的阶段 这是该软件的第二个模 型 从 4 月 15 号到 5 月 1 号 在该阶段提出了新的目标 即加入语音聊天 从 5 月 20 日至 6 月初 在原有的基础上增加了文件的传输功能 并且对界 面做了改进 从这也可以说 该软件的总体开发模式采用原型演化的开发 模型 因为这个项目只是个人开发 而且先前对有些知识不是很了解 所 有这些都是采用原型开发的必然因素 现在该项目已经基本上完成了所有 的要求 还扩展了一些功能 第三个阶段是软件的测试和文档整理阶段 从 6 月初至 6 月 7 日 完 成了对软件的所有的功能的测试 并且整理软件的文档 写完论文 软件由我个人负责 采用原型的开发模型 分成通信模块 文本聊天的 模块 语音聊天的模块等主要的几大模块 该项目规模适中 适合一个人 工作 软件开发到最后提交总共用了 4 个月时间零 6 天 7 第第 2 章章系统分析系统分析 2 12 1对已有聊天软件的分析对已有聊天软件的分析 如今 聊天软件种类繁多 发展迅速 下面简要的对已有的聊天软件作 一下总结分析 1功能分析 作为如今流行的聊天软件之一 QQ 功能已经非常强大 基本上朝着三个 大的方向发展 即个人及时通信 企业实时通信和娱乐资讯 它的功能主 要有 个人文本聊天 个人语音聊天 个人视频聊天 图像传输 文件传输 在线游戏 手机通讯 8 聊天室聊天 隐身 上线 群聊天 企业级实时通信 可以看出 聊天软件的发展方向是三维化 人性化 综合化 2网页聊天室 作为另一种聊天软件形式 网页聊天室也受到用户的普遍欢迎 网页聊 天室的优点就是很好的利用了浏览器的功能 用户不需要安装任何新的软 件 即可加入聊天室聊天 现在的网页聊天室除了文本聊天之外 语音聊 天也很常见 由于其客户端的简化 其功能必然受到限制 3缺陷 不管是 QQ 还是网页聊天室 其最大的缺陷就是服务器固定 用户必须 连接上服务器 如果想在一个自治系统之内 一个孤立的网络 通信 NetMeeting 是一款不错的软件 本项目的开发目标也是如此 即追求服务 器的灵活性 任何用户都可以建立自己的服务器 2 22 2系统有关的技术系统有关的技术 9 2 2 12 2 1网络通信技术网络通信技术 在 windows 下 网络通信的技术有 netbios 编程 重定向器 邮槽和管 道 Winsock 编程以及 WinInet API 等 下面简单的介绍一下 netbios 和 winsock 编程技术 1NETBIOS 网络基本输入 输出系统 Network Basic Input Output System NetBIOS 是一种标准的应用程序编程接口 API 对应于 OSI 模型 NetBIOS 主要 在会话和传输层发挥作用 NetBIOS API 实施方案适用于为数众多的网络协 议 使得编程接口 与协议无关 NetBIOS API 中的两个主要的概念是 LANA 编号和 NetBIOS 名 LANA 编号对应于物理网卡和传输协议的唯一 组合 NetBIOS 名长度 16 个字符 其中第 16 个字符作为特殊用途保留下来 在 Win32 环境下 针对每个可用的 LANA 号 每个进程都会为其维持一张 NetBIOS 名字表 若为 LANA 0 增添一个名字 意味着应用程序只能在 LANA 0 上同客户端建立连接 另外 NetBIOS 名分为唯一名字和组名两种 类型 NetBIOS 同时提供了 面向连接 服务以及 无连接 服务 有了 上面的概念 我们来看看 NetBIOS API 的设置 只有一个函数 UCHAR Netbios PNCB Pncb 其中 PNCB 是指网络控制块的指针 该网络控制块包 含了 Netbios 命令和所需的参数 2WINSOCK 10 在为通信双方开发应用程序的情况下 套接字是相当有用的 可以说网 络通信的基石是套接字 一个套接字是通信的一端 在 WINDOWS 系统中 进行编程时 总是需要使用很多系统提供的应用程序接口来调用系统功能 或者与系统交互 在 WINDOWS 系统中专门针对网络编程的接口 WinSock API 该接口包含了一组网络 I 0 和获取网络信息的库函数 这些 函数均需要套接字作为一个参数 实际上 一个套接字包含了本地协议端 口 本地主机地址 远地协议端口 远地主机地址 协议这 5 种信息 是 网络通信中的一个端点的抽象 WINSOCK 规范不仅包含了人们所熟悉的 Berkeley Socket 风格的库函数 也包含了一组针对 windows 的扩展库函数 以使程序员能充分的利用 windows 消息驱动机制进行编程 3两种技术的比较 这两种编程接口各有优缺点 下面是对它们的一个比较 Netbios 编程接口简单易学 Winsock 编程接口较多 这两种编程接口在标示应用程序时所采用的方法不同 Netbios 采用 Netbios 名 lana 号 winsock 采用套接字 Netbios 被更多的协议支持 也就是所谓的与协议无关 而 winsock 只能 在 tcp ip 上面运行 Netbios 适用于一个网段内通信 不能跨越网段通信 而 winsock 可以 适合整个网络通信 11 2 2 22 2 2语音聊天技术语音聊天技术 语音聊天的关键技术是语音的采集与播放 语音的压缩解压缩以及语音 的传送 对于语音的传送 需要借助于网络通信技术 下面对语音的采集 与播放和语音的压缩解压缩技术作一下介绍 2 2 2 1 语音的采集与播放 在 windows 下 有两种编程接口可以实现语音的采集与播放 这就是 DirectSound 和 waveX 函数 下面简单的介绍一下这两种技术 1DirectSound 技术 DirectSound 是 DirectX API 的音频 waveaudio 组件之一 它可以 提供快速的混音 硬件加速功能 并且可以直接访问相关设备 当然 最 主要的是它提供的功能与现有的 将来的呢 设备驱动程序保持兼容 性 DirectSound 允许进行波型声音的捕获 重放 也可以通过控制硬件和 相应的驱动来获得更多的服务 实现 DirectSound 需要以下几个步骤 创建及初始化 DirectSound 利用函数 DirectSoundCreate 创建一个 IdirectSound 对象或者利用函数 DirectSoundCaptureCreate 创建一个 IdrectSoundCapture 设定应用程序的声音设备优先级别方式 一般为 DSSCL NORMAL 利用 SetCooperativeLevel 函数 如果是播放声音 则利用 12 IDirectSound 创建声音缓冲区对象 利用 IdirectSound 的方法 CreateSoundBuffer 来创建 然后载入声音数据播放及停止 如果要录制声音 则利用 IdirectSoundCapture 的方法 CreateCaptureBuffer 来创建一个捕捉缓冲区对象 然后可以开始声音 数据的录制与停止 2WaveX 技术 Waveform Functions 是 windows 提供一组较早的波形声音的采集与播放 的 API 主要包含了一组函数 对输入设备的操作以 waveIn 打头 对输出 设备的操作以 waveOut 打头 如果想采集声音 其需要用到得函数有如下 最主要的是 waveInStart 顾名思义就是开始录音 然后是 waveInStop 它能够在你指定的缓冲满的时候返回 如果不用 waveInStop 可以使用 waveInReset 不同于 Stop 的是该函数不等缓冲满就 马上返回那样你才可以终止录音 不过最好跟 waveInGetPosition 配合 使用 说完这些函数 不得不提的是为以上几个函数做准备工作的函数 注 意配对使用 waveInOpen 和 waveInClose 配对 waveInOpen 里面指定 音频的格式 比方说立体声 和 16 位音质等 waveInPrepareHeader 和 waveInUnprepareHeader 配对 waveInPrepareHeader 里面指定用来录音 缓冲的大小和首地址 紧跟着 waveInPrepareHeader 要例行公事调用 waveInAddBuffer 如果是播放声音 则类似采集声音 基本上与采集声音的函数一一对应 13 以 waveOut 打头 3两种技术的比较 WaveX 技术是较早的一组支持声音操作的 API 功能有限 DirectSound 是新发展的技术 功能强大 能够支持混音 硬件加速操 作 尽管 DirectSound 技术必将替代 waveX 技术 但是 waveX 技术也能够解 决一些简单的任务 在这方面 waveX 技术还是挺有效的 例如播放一 个简单的音频流 直接用 PlaySound 或者 waveOut 函数即可 2 2 2 2 语音的压缩与解压缩 音频和视频数据是大多数多媒体向用户提供信息的主要方式 这些数据 一般具有较高的采样速率 如果不经过压缩的话 保存他们需要消耗大量 的存储空间 在网络上传输的效率也很低 就音频数据而言 目前常用的 压缩方法有很多种 不同的方法具有不同的压缩比和还原音质 编码的格 式和算法也各不相同 有的相当复杂 普通程序不可能去实现其编解码算 法 在 windows 中 引入了 ACM Audio Compression Manager 音频压缩管 理器 负责管理系统中的所有音频编码译码器 CODECs ACM 的 API 主要 有 acmGetVersion acmMetrics acmDriverEnum acmDriverDetails acmDr iverOpen acmDriverClose acmStreamOpen acmStreamConvert acmStreamClose 等 利用这些 API 就可 以完成音频的压缩和解压缩 如今流行的编码有以下几种 14 PCM WAVE MP3 OGG MPC MP 3PRO WMA RA APE TRUESPEECH 等编码方式 本聊天工具就是采用 TRUESPEECH 压缩算法 由于 TRUESPEECH 压缩算法只 能处理 8000HZ 16 位单声道的数据 我们采用两步压缩 首先将源数据压 缩成 TRUESPEECH 支持的中间 PCM 格式 然后再压缩成 TRUESPEECH 格式的 数据 通常 TRUESPEECH 的压缩率达到 10 1 2 2 32 2 3文件传输技术文件传输技术 FTP 是 Ineternet 上文件传输的通用方法 它是 TCP IP 的应用 工作 在 OSI 模型的第七层 TCP 模型的第四层 即应用层上 使用 TCP 传输协议 FTP 通过两个 TCP 连接传输一个文件 这两个连接分别为控制连接和数据连 接 服务器以被动方式打开 TCP 端口 21 连接 客户以主动方式打开 TCP 端 口 21 连接 这种连接用于传送客户与服务器之间的命令信息 数据连接是 传输数据的全双工连接 FTP 的命令分为访问控制命令 传输参数命令以及 FTP 服务命令 对于本聊天工具文件传输的应用 由于是点对点的单文件传 输 形式和服务较简单 因此在两点之间只建立一条连接 控制连接和数 据连接合为一条连接 并且利用已有的 NETBIOS 通信传输控制命令和文件 数据 传输的的文件类型任意 传输模式为流模式 二进制类型 15 2 2 42 2 4多线程技术多线程技术 多线程函数是 Win 32 的一个重要方面 其编程技术较为新颖 在程序 设计思路上不同于传统的模块结构化方法 比一般的面向对象的思路也较 为复杂 尤其是对于多处理器平台的处理更为复杂 要设计出性能良好的 多线程程序 不仅需要对操作系统的处理过程很清楚 还需要对具体应用 有一个全面的认识 并对应用中各线程部分的关系非常清楚 对同步模块 中的同步对象的具体含义应尽可能地清晰明了 以利于在程序中控制同步 事件的发生 避免出现死锁或不能同步处理的现象 线程的创建比较简单 可以利用 CreateThread 或者 AfxBeginThread 来实现 终止线程可以用 TerminateThread 来实现 线程只见信息的共享可以利用全局变量来实现或 者消息函数来实现 多线程的设计关键之处在于线程之间的同步 线程的 同步可以用以下几种方法 1通过设置线程的互斥体对象 在可能冲突的地方进行同步控制 首先 建立互斥体对象 得到句柄 HANDLE CreateMutex 然后 在 线程可能冲突区域的开始 即访问共享资源之前 调用 WaitForSingleObject 将句柄传给函数 请求占用互斥体对象 dwWaitResult WaitForSingleObject hMutex 5000L 共享资源访问完 后 释放对互斥体对象的占用 ReleaseMutex hMutex 互斥体对象在同 一时刻只能被一个线程占用 当互斥 16 体对象被一个线程占用时 若有另一线程想占用他 则必须等到前一线程 释放后才能成功 2设置信号 在操作共享资源前 打开信号 完成操作后 关闭信号 这类似于互斥 体对象的处理 首先 创建信号对象 HANDLE CreateSemaphore 或者 打开一个信号对象 HANDLE OpenSemaphore 然后 在线程的访问共享 资源之前调用 WaitForSingleObject 共享资源访问完后 释放对信号对象 的占用 ReleaseSemaphore 信号对象允许同时对多个线程共享资源的 访问 在创建对象时指定最大可同时访问的线程数 当一个线程申请访问 成功后 信号对象中的计数器减 1 调用 ReleaseSemaphore 函数后 信号 对象中的计数器加 1 其中 0 计数器值 创建时指定的最大值 利用信 号对象 不仅可以控制共享资源的访问 还可以在应用的初始化时候使用 假定一个应用在创建一个信号对象时 将其计数器的初始值设为 0 这样就 阻塞了其他线程 保护了资源 待初始化完成后 调用 ReleaseSemaphore 函数将其计数器增加至最大值 进行正常的存取访问 3利用事件对象的状态 进行线程对共享资源的访问 用 ResetEvent 函数设置事件对象状态为不允许线程通过 用 SetEvent 函数设置事件对象状态为可以允许线程通过 事件分为手工释放和自动释 放 如果是手工释放 则按照上述 2 个函数处理事件的状态 如果是自动 释放 则在一个线程结束后 自动清除事件状态 允许其他线程通过 4设置排斥区 17 在排斥区中异步执行时 他只能在同一进程的线程之间共享资源处理 虽然此时上面介绍的 3 种方法均可使用 但是 使用排斥区的方法则使同 步管理的效率更高 先定义一个 CRITICAL SECTION 结构的排斥区对象 在进程使用之前先对对象进行初始化 调用如下函数 VOID Initialize Critical Section LPCRITICAL SECTION 当一个线程使用排斥区时 调用函数 EnterCriticalSection 或者 TryEnterCriticalSection 当要 求占用 退出排斥区时 调用函数 LeaveCriticalSection 释放对排斥 区对象的占用 供其他线程使用 互斥体对象 信号对象和事件对象也可 以用于进程间的线程同步操作 2 32 3系统方案说明系统方案说明 2 3 12 3 1可选择的其他系统方案可选择的其他系统方案 1基于 winsock 的通信聊天工具 该方案采用 winsock 作为底层网络通信技术来实现聊天室聊天 广播聊 天 二人私聊和文件传输 该方案要求在 TCP IP 协议的基础上运行 由于 18 winsock 对广播传输 建立连接传输 数据报传输的支持 该方案是可行的 2基于 directx 语音技术的聊天工具 该方案采用 directsound 技术来实现语音的采集 回放 Directsound 语 音技术作为 directx 的一个组件 已经非常的成熟 可以在 API 层面上进行 录制声音 并把声音数据录制到内存中去用于远程传输 因此该方案也是 可行的 3基于网页形式的聊天工具 该方案利用现在成熟的网页技术来实现聊天工具的开发 该方案不再需 要对底层网络通信进行开发 因为有 HTTP 的很好的支持 因此工作重心 转到语音聊天的开发和服务器端的开发 对于网页开发 现在有 NET 等工 具很好的支持 因此该方案是可行的 但是必将导致服务器固定这一缺点 不符合该项目提出的初衷 2 3 22 3 2本系统的方案本系统的方案 1系统说明 本聊天工具最终采取的方案为 NETBIOS WAVEX VC6 0 即底层通信 技术采用 NETBIOS 通信 语音技术采用 WAVEX API 开发工具为 19 VC6 0 NETBIOS 对于跨平台 跨协议有很好的支持 而且以名字标示主 体 大大简化编程 要求该聊天工具可以实现服务器自建 几种聊天方式 文件传输 语音聊天等功能 2处理流程 图 2 1 3局限性 由于 NETBIOS 不能跨网段传输 因此该聊天工具适用于同一个网段之 内 没有对视频 图像聊天的支持 20 2 42 4系统任务概述系统任务概述 利用 NETBIOS 通信技术以及 WAVEX 语音技术实现一个能够广播聊天 聊天室聊天 二人私聊 语音聊天以及文件传输的一个聊天工具 具体目 标见下面 登录 用户可以以任何身份登录 无需注册 可以修改个人的资料 保存读取个人的资料 可以公开聊天 此时 不需要选择对象 可以选择一个聊天房间 也即选择一个服务器 可以察看一个房间的详细资料 可以刷新房间列表 可以新建一个房间 即新建一个服务器 可以选择聊天的对象 也可以公开聊天 可以察看某个人的详细资料 可以和某人私聊 别人看不到 可以隐身或者在线或者忙 自动回复 可以设置自动回复的消息 可以退出一房间 聊天内容为纯文本方式 可以察看本机的 ip 地址和 mac 地址 21 可以选择通信方式 数据报方式 阻塞或非阻塞方式 可以建立 netbios 连接 用于两个人的私有聊天室 可以在两个人的私有聊天室基础上实现语音聊天 可以在两个人的私有聊天室基础上实现文件传输 2 52 5系统其他要求系统其他要求 2 5 12 5 1系统性能要求系统性能要求 1时间特性 对于公共聊天和聊天室聊天 要求响应每条消息的时间不超过 1 秒 钟 否则用户将感到这个聊天工具反应迟钝 对于二人文本私聊 要求响应每条消息的时间不超过 500ms 这样 使得二人私聊能够有种当面聊天的感觉 对于语音聊天 要求语音的延迟不超过 5 秒钟 2语音质量 要求语音的噪声尽量小 可以分辨出人的话音 22 3文件传输速度 要求尽量提高传输速度 不能低于 1kb s 4灵活性 要求该聊天工具能够适用于多种协议上 而且能够在任意个自治系统之 内使用 要求服务器自建非常灵活 2 5 22 5 2系统环境要求系统环境要求 1硬件要求 安装了网卡 并连入因特网 安装了声卡 具有麦克风 音箱 2软件要求 安装了 windows98 以上的系统 安装了支持 NETBIOS 通信的 TCP IP 或者 NETBEUI 等协议 23 第第 3 3 章章系系统统设设计计 3 13 1系统的物理结构系统的物理结构 系统采用对等式结构 即任一节点均可作为服务器 又可作为客户端 同时 整个网络上可运行多个服务器 其中双空心箭头表示两者之间建立 连接通信 而虚心箭头表示广播发送消息 图 3 1 任何一端都可能是客户端 也可能是服务器端 如果它新建了一个房间 她就是服务器端 如果她进入了一个其他服务器节点所创建的房间 她就 24 是客户端 作为服务器端 它具有客户端的所有功能 但又要比客户端的 功能多 完成广播房间名和发送用户名列表 完成用户的连接和退出功能 响 应用户的隐身 上线 即要管理一个房间 作为服务器的节点 1 或 2 它将向网络上的所有客户端广播自己的房间 名 作为服务器的节点 1 将向该节点所创建的房间内的所有客户端 3 4 发 送新的用户消息 发送用户退出消息 等待网络上所有的节点的连接消息 转 发从客户端的接受到的新的消息 作为服务器的节点 2 将向该服务器内的客户端 5 发送用户名 发送用户 退出消息 转发消息 等待网络上所有的节点的连接消息 作为客户端 将向服务器端发送请求连接消息 等待服务器端的响应 作为客户端 将向指定的网络上的节点发送请求查询个人资料消息 服务 器将该消息转发给对应的客户 相应的客户响应该查询 发送个人资料到 服务器 服务器再将该消息回送给要查询的用户 从而完成查询个人的资 料的消息 无论作为服务器端 还是客户端 将向网络上的所有的节点广播公共聊天 消息 任一客户端均可以呼叫另一用户 以建立两个人的聊天室 在此基础上 可以选择是否语音聊天以及文件传输 25 3 23 2系统的软件结构系统的软件结构 1系统划分 本系统总共分为七个子系统 分别为 登录子系统 基于 netbios 的底层通信子系统 设置子系统 聊天子系统 服务器房间管理子系统 仅在服务器端有 语音聊天系统 文件传输子系统 2子系统描述 登录子系统 提供用户登录界面 主要完成用户的初始信息 可以保 存用户的个人资料 也可以从文件中读出个人资料 对用户的个人资 料进行可靠性 惟一性检查 基于 netbios 的底层通信子系统 主要利用 netbios 的编程接口 完 成对网卡的初始化 添加名字 广播发送消息 广播接受消息建立连 接 传送消息 获得网卡信息等的功能 聊天子系统 负责发送消息 接受消息 显示消息 刷新用户列表等功 26 能 它又可分为广播聊天 聊天室聊天 二人私聊 设置子系统 负责设置系统配置 同时提供修改修改个人资料等功能 服务器房间管理子系统 主要有新建房间 列出所有的房间名 广播 房间名 选择房间 等待用户连接房间 察看房间资料 退出房间 转 发用户的消息等功能 语音聊天子系统 主要完成语音的采集 压缩 传输 解压缩 回放等 功能 实现语音聊天 文件传输子系统主要在二人私聊的基础上 实现点对点的文件传输 3系统功能模型图 3 1顶层功能模型图 图 3 2 首先应用程序由这 6 个大的子系统组成 而这些子系统之间的通信 以及子系统内部的通信都是建立在 NETBIOS 通信子系统基础上之上的 27 下面是各个子系统的再划分 即子系统的子系统 其说明见上文的子系 统描述 3 2登录子系统功能模型图 图 3 3 3 3聊天子系统功能模型图 图 3 4 3 4房间管理子系统模型图 28 图 3 5 3 5语音子系统功能模型图 图 3 6 3 6NETBIOS 子系统功能模型图 图 3 7 29 3 33 3系统数据结构设计系统数据结构设计 1消息对象 Cinformation 这个对象很重要 因为该聊天工具中需要传输各种消息 系统中任何一 条通信都是以消息的形式表现出来 该消息类型的属性有 CString m strSender 发送者名字 CString m strReceiver 接收者名字 CString m strInformation 消息 是一结构体 由各个段组成 用 这个关键字符隔开 time t m tSendTime 消息的时间 long 型 UINT m nType 消息的类型 表 3 1 其中 m strInformation 又有它自己的结构 根据程序的需要可以自 己任意定义 在系统中 任意给定一缓冲区 buffer 346 长度为 346 由 它可以构造一条消息以便发送和接受 构造的原则如下 一开始的 21 个字节为发送者名字 接着的 21 个字节为接收者名字 接着的 4 个字节为时间 接着的一个字节为类型 剩下的字节为消息体m strInformation 30 示意图 单位 字节 212141299 发送者接收者时间类型消息体 表 3 2 因为要在一两个连接上传送多种信息 因此必须定义多种消息类型 才 能满足此需要 2消息队列 CinformationBox 消息队列是系统中用于存放接收到的消息的缓冲区 它其实是消息的一 个数组 属性定义如下 CInformation m ciInformationBox MAX INFORMATIONS 消息数组 UINT m nInformationNum 消息数目 表 3 3 利用消息队列 可以缓冲暂时未能处理的消息 避免客户端与服务器端 的速度不匹配问题 能够有效的扩展服务器的承载能力 3个人资料对象 Cperson 该对象用于存放个人的资料 以及个人在整个系统中要参与作用而需要 的参数 其属性定义如下 CString m strName 姓名 31 BOOL m bMale 性别 UINT m nAge 年龄 CString m strInformation 个人说明 CString m strRoom 所在房间名 CString m strToPerson 选择的对象 int m nRoomChatLsn 房间聊天时的 lsn int m nPrivateChatLsn 私聊时的 lsn 语音聊天时的 lsn int m nSoundChatLsn 语音聊天时的 lsn BOOL m bPrivateChat 是否私聊 表 3 4 该对象存放 NETBIOS 通信需要的关键的信息 NETBIOS 连接号 4服务器对象 服务器对象存放了服务器所必需的缓冲区 例如从客户端发送过来的消 息缓冲区 用户名缓冲区等 其中最重要的几个属性是 CStringArray m straServerUsers 用户名列表 int m nUserLsn 254 用户的连接号数组 BOOL m bUserValid 254 用户是否有效数组 UINT m nLsnNum 用户数目 表 3 5 32 很显然 这几个属性管理了所有的客户端连接到服务端的用户信息 在 用户的连接 退出以及隐身等过程中 这几个属性一定要保持同步 3 43 4系统界面设计系统界面设计 1登录界面 图 3 8 提供用户登录接口 用于接受用户的个人信息 2系统主界面 33 图 3 9 第一个方框用于显示用户所发送的消息 这个消息是一广播消息 任何人 都可见第二个方框用于接受用户的输入 并以广播的形式发送网络上所有的 房间列表显示网络上所有的房间名 人数 是否满 说明等信息刷新按钮用于刷 新房间列表 双击房间名 将进入该房间个人设置用于设置个人的基本资料 包 括昵称 年龄 性别 头像 个人的说明等 系统设置按钮用于设置系统的各种 参数等新建房间按钮用于新建一个房间 呼叫某人按钮用于和某人建立连 接 实现二人私聊的功能 3个人设置界面 与登录界面相同 不同之处在于登录界面初始化为缺省值 而个人设置界 面初始化为最新的个人资料 4系统设置界面 34 图 3 10 将各个系统参数分类成 6 个大类 分别为公共聊天的参数 二人私聊的 参数 聊天室聊天的参数 netbios 的参数 服务器的参数 其他等 5新建房间界面 图 3 11 房间名称用于输入新房间的名称 同时若与网络上其他房间同名 则非法 输入 密码用于设置该房间的密码 若不设置 则无需密码即可进入上限人数 用于设置房间的最多的用户数房间说明 用于介绍该房间 6聊天室界面 35 图 3 12 左边大方框用于显示聊天内容下面的方框用于接受用户输入消息聊天对 象用于选择聊天的对象右边显示房间名 主人 和所有的该房间用户 7二人私聊界面 图 3 13 选中语音聊天 可以进行语音聊天 取消语音聊天复选框 即可取消语 音聊天 选择发送文件可以选择文件并发送给对方 如对方同意接受文件 此时 终止发送按钮将被激活 可以在传送文件的过程中终止文件的传送 36 第第 4 4 章章系统实现系统实现 4 14 1功能规定功能规定 1登录功能的规定 功能名 称 登录 输入昵称 选择性别 年龄 个人说明等 输出登录是否成功 37 处理 IF 系统不提供 NETBIOS 服务 输出登录失败 退出 ENDIF IF 重置系统的 NETBIOS 服务失败 输出登录失败 退出 ENDIF IF 添加个人名字的 NETBIOS 名出错 输出登录失败 退出 ENDIF IF 如果用户名已存在 输出登录失败 退出 ENDIF 输出登录成功 退出 备注 用户名不能重名 不能为已有名字 s 形成的名字 也 不能为 public 长度不超过 20 个字节 年龄在 0 38 200 之间 个人说明不超过 100 个字符 表 4 1 2连接房间功能的规定 功 能名称 进入一个选择的房间 输入房间名 输出连接成功或者失败 处理 IF 房间名无效 输出连接失败 退出 ENDIF IF 连接服务器失败 输出连接失败 退出 ENDIF IF 该房间需要密码 输入密码 ENDIF IF 身份验证出错 39 输出连接失败 退出 ENDIF 输出连接成功 备注 表 4 2 3新建房间功能的规定 功 能名称 新建房间 输入房间名 房间说明 房间密码 人数 输出新建房间成功或失败 处理 保存新房间信息 IF 房间名不合法 输出新建房间失败 退出 ENDIF IF 启动服务器失败 输出新建房间失败 退出 ENDIF 40 建立服务器端客户端与服务器的连接 输出新建房间成功 备注房间名长度不超过 20 个字符 密码 1 至 20 个字符 房间说明不超过 100 个字节 表 4 3 4系统设置功能的规定 功能名 称 系统设置 输入系统参数 输出系统参数 处理将用户输入的参数保存到系统参数对象中 备注 提供设置界面 以设定系统的基本配置 包括通信方 式的选择 系统中的一些必要的参数的设定 尽量让系 统的参数可以设定 达到让系统的内部透明化 内部的 参数有 用于刷新某房间的聊天内容的时钟间隔 用于 刷新某房间的用于名列表的时间间隔 查询个人资料 的等待时间 about 对话框的字体背景色 保存个人资 料的文件的路径和文件名 广播房间名的消息的时间 间隔 是否广播 客户端连接等待时间间隔 刷新广播 消息列表的时间间隔 刷新房间名列表的时间间隔 41 netbios 最大用户名数 最大会话数 当建立新房间时 是否隐藏主对话框 退出房间时的等待时间间隔 以让 系统有足够的时间做一些善后工作 广播发送的 netbios 的 lana 号 广播接受 netbios 的 lana 号 数 据报发送延迟 数据报接受延迟时间 房间密码的替代 符号 mac 地址的进制 大小写等 当然这些参数都有 缺省值 表 4 4 5语音聊天功能的规定 功能名 称 语音聊天 输入语音聊天请求 输出建立语音聊天是否成功 处理 IF 建立语音数据连接失败 输出建立语音聊天失败 退出 ENDIF 设置语音聊天对象的参数 IF 打开录音 放音设备失败 42 输出建立语音聊天失败 退出 ENDIF 启动接受语音数据线程 启动播放本地录音线程 启动播放远程录音线程 备注被动请求的另一方在接受到语音连接时 也要按照以 上的步骤建立语音聊天 表 4 5 6传输文件功能的规定 功能名 称 传输文件 输入传输文件请求 输出传输文件成功或失败 处理 选择要传输的文件 发送传输文件请求 IF 对方不同意接受 输出传输文件失败 退出 ENDIF 43 IF 打开文件失败 输出传输文件失败 退出 ENDIF 发送文件 输出传输文件成功 备注在传输文件的过程中 双方都可以终止文件的传输 表 4 6 4 24 2几个主要的线程的程序设计几个主要的线程的程序设计 4 2 14 2 1聊天室服务器端接收消息线程的程序设计聊天室服务器端接收消息线程的程序设计 1程序描述 RecvRoomChatInformation 该线程用于聊天室聊天时 在服务器端接收所有的客户端发送过来的消 息 并根据消息的类型作相应的处理 该线程要能够同步接收消息 也要 能够异步接受消息 需要对用户发送的聊天消息 用户的连接 退出 隐 身以及用户的查询做出响应 44 2输入输出 输入 客户端的消息 输出 对不同消息的不同处理 3算法 接收消息 取得消息类型 根据消息类型分别作相应处理 4流程逻辑 图 4 1 4 2 24 2 2二人私聊接收消息线程的程序设计二人私聊接收消息线程的程序设计 45 1程序描述 RecvConnectInformation 该线程用于二人私聊时接收对方的消息 并根据消息的类型作相应的处 理 该线程要能够接受同步消息 也要能够接受异步消息 他主要完成二 人之间聊天信息的传送 用户的退出以及文件传送的功能 它的结构与上 一个程序的结构大体相似 2输入输出 输入 对方的消息 输出 对不同消息的不同的处理 3算法 接受消息 取得消息类型 根据消息类型作不同的处理 4流程逻辑 图 4 2 46 4 2 34 2 3文件传送的程序设计文件传送的程序设计 1程序描述 该程序建立在二人私聊的基础上 利用原有的文本聊天的 NETBIOS 连接 进行文件的传输 主要完成点对点的文件传输 需要同步双方的线程 2输入输出 输入 文件传送请求 输出 文件传送结果 失败或成功 3算法 分 3 步走 第一步 在文件发送前 先同步双方 第二步 发送和接受文件 第三步 文件发送完 再次同步双方 4流程逻辑 47 图 4 3 4 2 44 2 4语音聊天的程序设计语音聊天的程序设计 1程序描述 语音聊天程序也是建立在二人私聊的基础上 但是利用了一个新的 NETBIOS 连接来进行语音数据的传送 已尽量提高语音的传输速度 增加语 音聊天的质量 2输入输出 输入 语音聊天请求 输出 建立语音聊天结果 失败或成功 3算法 48 发送方 第一步 建立新的 NETBIOS 连接 第二步 启动本地的语音设备 第三步 启动接收语音数据的线程 第四步 启动播放本地录音的线程 第五步 启动播放远程语音的线程 接收方 第一步为等待语音连接 下面的四步与发送方的后四步完全相同 4流程逻辑 图 4 4 49 4 34 3源代码分析源代码分析 4 3 14 3 1接受语音数据线程源代码分析接受语音数据线程源代码分析 接受语音数据的线程 该线程用于接收对方的语音数据 并把语音数据 解压后放到输出设备对象的缓冲区中 定义线程 UINT RecvSoundInformation LPVOID pParam 设置通信 netbios 对象 CNetbios netbios 获得输入设备对象 CSoundIn soundin CSoundIn pParam 定义缓冲区 char buffer 8000 unsigned long len soundin m nBits 8 soundin m nBlock memset buffer 0 2048 调用 netbios 接收函数 接受语音数据 接受的数据放 50 到 buffer 中 int ret netbios Recv 0 m cpPerson m nSoundChatLsn buffer if m cpPerson m bSoundChat 利用输入设备对象中的解压对象解压声音数据 soundin m sndOut m cpRecv Unconvert TRUE NULL 0 将解压后的数据拷贝到输入设备对象中的输出设备对象中 的缓冲区中 soundin m sndOut m cpRecv Unconvert FALSE unsigned char soundin m sndOut m pOutputBufferCall soundin m nBits 8 soundin m nBlock soundin m sndOut m nCurrentCall 8000 if soundin m sndOut m cpRecv pDst2Data NULL free soundin m sndOut m cpRecv pDst2Data 设置输出设备对象中的语音数据缓冲区有效 soundin m sndOut m bValidCall soundin m sndOut m nCurrentCall TRUE 设置语音的强度指示 int volumelevel 51 求声音的强度平均值 int r1 buffer len 2 128 int r2 buffer 0 128 int r3 buffer len 1 128 volumelevel r1 r2 r3 3 if PrivateChatExsist pPrivateChat m cpcProgressVolume SetPos volumelevel 输出设备对象中语音缓冲区指针向前移动一个位置 soundin m sndOut m nCurrentCall soundin m sndOut m nCurrentCall soundin m sndOut m nBlockNum 再次启动接收语音数据线程 AfxBeginThread RecvSoundInformation pParam THREAD PRIORITY NORMAL return 1 4 3 24 3 2新建房间线程源代码分析新建房间线程源代码分析 52 新建房间线程 该线程主要用于在新建一个房间时 主要完成房间名验 证和启动服务器线程 初始化服务器以及服务器端的客户端连接该房间的 功能 UINT CCServer LPVOID pParam CMainDlg maindlgp CM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离婚协议书模板:婚姻关系终止与财产分配方案
- 《家庭变革真相:离婚协议全文阅读与青苔条款分析》
- 离婚时宅基地房屋分割、共有权处理及财产分配协议
- 2025年节目互动题目题库及答案
- 2025年一级建造师考试题库及答案
- 2025-2030动力总成电气化技术路线与零部件供应链重构报告
- 2025-2030功能食品行业市场发展分析及前景与投资研究报告
- 2025-2030功能性食品科技创新与消费者行为影响分析报告
- 2025-2030功能微生物组装配技术在精准农业中的应用前景展望报告
- 2025-2030共享经济平台盈利模式与监管政策分析报告
- otc药品管理办法
- 康复医学科病历书写规范与质量控制
- 商用厨房设计汇报
- 战术搜索教学课件
- 教科版五年级科学上册第一单元《光》测试卷及答案(含四题)
- Linux操作系统基础任务式教程(慕课版)课件 任务4 使用Linux操作系统中的硬盘
- 自控系统报警管理制度
- 口腔服务5S管理
- 保安投诉管理制度
- 2025年高考江苏卷物理真题(原卷版)
- 【公开课】种子植物+第2课时课件-2024-2025学年人教版生物七年级上册
评论
0/150
提交评论