基于NETBIOS的聊天工具.doc_第1页
基于NETBIOS的聊天工具.doc_第2页
基于NETBIOS的聊天工具.doc_第3页
基于NETBIOS的聊天工具.doc_第4页
基于NETBIOS的聊天工具.doc_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

毕毕 业业 设设 计 论文 计 论文 题题 目目 基于 NETBIOS 的聊天工具 电信学 院院 计算机 系系 01 班班 学学 生生 昂正全 指导教师指导教师 冯博琴 夏秦 设计所在单位设计所在单位 西安交大计算机教学实验中心 二 00 四年六月 摘摘 要要 从实际工程应用角度出发 以计算机网络原理为指导 结合当前网络中的 一些常用技术 编程实现基于 NETBIOS 的网络聊天工具 该聊天工具具有聊 天室聊天 广播聊天 二人私聊 语音聊天以及文件传输功能 该论文主 要对当今聊天软件的发展情况 与该聊天软件相关的各种技术以及该聊天 工具的实现做了一个详细的阐述 1 作为计算机网络的应用之一聊天工具 受到了用户的普片爱好 它把人 们带进了一个虚拟的网络世界 大大的加深了人们之间的联系 从单一 的文本聊天 到语音聊天以及到现在的图像 视频聊天 及时短信的发 送和在线游戏等功能的开发 已经大大的拓展了聊天工具的概念 它将 会作为未来人们通过因特网相互联系和娱乐的主要平台 2 聊天工具的开发主要用到了网络通信技术 语音的采集 压缩 传输 解压缩以及回放等技术 文件传输技术 windows 的多线程技术以及视 频的采集 压缩解压缩技术等 3 该聊天软件基于 NETBIOS 通信 在此基础上 实现点对点聊天 广播聊天 一对多聊天 语音聊天以及文件的传输 4 该聊天工具可以运行于任何支持 NETBIOS 协议的机器上 5 该聊天工具用到了多线程的设计 因此线程之间的同步是一大关键之处 6 由于系统采用 c s 结构 客户端与客户端以及客户端与服务器端需要传 送一些控制消息 因此系统需要自定义一些消息类型 这是该聊天工具的 又一大关键之处 7 语音聊天作为一个独立的模块 镶嵌在点对点的聊天中 语音聊天的关键 之处在于语音的采集 压缩 发送 解压缩 回放上 压缩算法采用 TRUESPEECH 声音的采集主要利用操作系统提供的 WAVEX 函数 这是 windows 较早的一组支持声音的 API 8 文件传输作为另一个独立的模块 大大拓展了该聊天工具的功能 其传 输资料利用了原有的 netbios 通信 关键需要同步双方的发送和接受线 程 关键词关键词 网络通信 NETBIOS 聊天 语音聊天 文件传输 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 NETBIOS into practical The software s functions include chatting room chat broadcasted chat point to point private chat sound chat and transporting files 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 1 The chatting tool which is one of the applications of the computer network becomes the favourite of major users which brings users into a virtual network world and greatly adds up the relations of users From former single text chatting to sound chatting and the development of the image video chatting transporting note in time and gaming on net these has greatly adds up the conception of the chatting tools which will be the main flat roof of users s relating and entertainment by internet 2 The development of the chatting tool mainly takes advantages of the network communication technicals gathering compressing transporting decompressing and playing sound information technicals transporting files technicals multiple threads technical on windows and gathering compressing and decompressing video information 3 The software is based on the communication of the NETBIOS implementing the pointing to pointing chatting broadcasting chatting and the one to many chatting as well as the sound chatting and the files transporting 4 This chat tool can run on the any machine which supports the NETBIOS protocol 5 The software has a multiple threads therefore the synchronization of the threads is a key point 6 It 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 7 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 The arithmetic of compressing adopts the TRUESPEECH The gathering of sound information mainly takes advantage of the functions of WAVEX which is a group of quite old APIs of windows that support sound 8 Transporting files which is as a independent module greatly adds up the functions of chatting tool which transports information by netbios communication Its key point is synchronizing the sending thread and recvieving thread with each other KEYKEY WORDSWORDS network communication NETBIOS chatting sound chatting file transporting 目录目录 第第 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 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 5 2测试方法 64 5 3测试结果 68 5 4使用简介 69 第第 6 6 章章总总 结结 7171 致谢致谢 7575 参考文献参考文献 7676 第第 1 1 章章绪绪 论论 1 11 1项目开发的背景项目开发的背景 自从上世纪中叶第一台计算机诞生以来 计算机越来越走进人们的生活 当中 特别是随着计算机网络的发展 把全世界的人们紧密的联系在一起 大大的扩展了计算机的功能 人们越来越离不开计算机了 如今 作为网 络应用之一的聊天工具 越来越受到人们的欢迎和重视 现在已有的聊天 软件和聊天工具不胜枚举 流行的主要有 QQ ICQ MSN Message NetMeeting mIRC 和郎码 UC 和各种的网页聊天室等 这些软件特 别是 QQ 升级很快 其功能是越来越来强大 将代表着聊天软件的发展方 向 目前 聊天软件的功能除了最基本的文本聊天 已经可以语音聊天 图像聊天 视频聊天 文件传输等三维聊天 还发展了短信发送 无线聊 天 在线游戏等功能 可以预见在不久的将来 聊天软件将成为人们通过 因特网相互联系和娱乐的主要平台 然而这些软件的一个共同的缺点是采 用了 c s 的结构模式 如果服务器出现故障 则这个聊天系统都将瘫痪 该 毕业设计课题为基于 netbios 的聊天工具的设计与实现 它是在 netbios 通信 和文本聊天的基础上来实现语音聊天 文件传输 从一开始就要求该聊天 软件能够自建服务器 它能够被应用在一个个独立的自治系统中 灵活性 很大 1 21 2项目开发的主要内容项目开发的主要内容 设计并实现基于 NETBIOS 的文本聊天程序包括广播聊天 聊天室聊天 二人私聊 涉及的内容包括通信方式的选择 及选择会话方式是资料报还是建 立连接方式 netbios 通信 身份验证和房间名验证 建立服务器 连接服 务器以及 vc 接口实现等 设计并实现基于 NETBIOS 的语音聊天 文件传 输 涉及的内容包括通信方式的选择外 还有多播与广播 多线程 语音技术 文件传输技术等内容 1 31 3项目开发的意义项目开发的意义 本项目是作为本科的毕业设计课题提出来的 它规模适中 适合于个人 开发 能够锻炼同学的学习新知识能力 锻炼同学的编程能力 锻炼同学 的软件工程的思维方式 它的具体意义见下面 聊天工具已经被广大用户使用 由于服务器固定的局限性 当服务器瘫 痪或到服务器的网络中断时 将使聊天系统崩溃 该聊天工具正好弥补 了这个缺陷 可以用于任一个自治系统中 灵活性大 实用性强 目前 计算机的发展离不开网络这一方向 网络将大大扩展计算机的功 能 研究计算机在网络方面的技术以及应用 挖掘计算机的网络潜能 将能够大大提高我们对计算机的本身的认识 同时也能加深对计算机网 络的认识 网络的一大应用就是用于用户之间联络的聊天工具 通过对聊天工具的 开发 我们将了解计算机如何通过网络相互通信以及在此相互通信的基 础上实现的应用程序级的协议 随着文本聊天的普及 人们对多媒体通信越来越渴望 其中语音聊天就 是一种既廉价又能够满足人们感官需要的一种聊天方式 这只需要聊天 的双方各有一个声卡和耳机即可 这是一般计算机的基本配置 通过对 语音聊天的开发 我们将学会操作系统如何支持开发人员对声音的采集 压缩 解压缩 回放 以及如何利用就计算机网络来传送语音信息 来 实现语音聊天 语音聊天是该软件的难点之处 也是特色之处 如何保 证语音的质量 减少噪音 需要在编程调试的实践过程中不断摸索 加深对在网络中传输文件理解 1 41 4项目开发的过程项目开发的过程 该项目的开发过程大致是这样的 可以分为三个大的阶段 第一个阶段是该软件的计划 分析和调研阶段 在这个阶段里 大致的学 习了相关的技术 分析了相关的聊天软件的性能和功能 这个阶段大致到 2004 年 2 月 1 号结束 第二阶段就是软件的设计与实现 从 2 月 1 号到 3 月 30 号 是该软件 的需求分析与初步设计以及实现阶段 这是该软件的第一个模型 从 3 月 30 号到 4 月 15 号是对软件的结构进行改进的阶段 这是该软件的第二个模 型 从 4 月 15 号到 5 月 1 号 在该阶段提出了新的目标 即加入语音聊天 从 5 月 20 日至 6 月初 在原有的基础上增加了文件的传输功能 并且对界 面做了改进 从这也可以说 该软件的总体开发模式采用原型演化的开发 模型 因为这个项目只是个人开发 而且先前对有些知识不是很了解 所 有这些都是采用原型开发的必然因素 现在该项目已经基本上完成了所有 的要求 还扩展了一些功能 第三个阶段是软件的测试和文档整理阶段 从 6 月初至 6 月 7 日 完 成了对软件的所有的功能的测试 并且整理软件的文档 写完论文 软件由我个人负责 采用原型的开发模型 分成通信模块 文本聊天的 模块 语音聊天的模块等主要的几大模块 该项目规模适中 适合一个人 工作 软件开发到最后提交总共用了 4 个月时间零 6 天 第第 2 章章系统分析系统分析 2 12 1对已有聊天软件的分析对已有聊天软件的分析 如今 聊天软件种类繁多 发展迅速 下面简要的对已有的聊天软件作 一下总结分析 1功能分析 作为如今流行的聊天软件之一 QQ 功能已经非常强大 基本上朝着三个 大的方向发展 即个人及时通信 企业实时通信和娱乐资讯 它的功能主 要有 个人文本聊天 个人语音聊天 个人视频聊天 图像传输 文件传输 在线游戏 手机通讯 聊天室聊天 隐身 上线 群聊天 企业级实时通信 可以看出 聊天软件的发展方向是三维化 人性化 综合化 2网页聊天室 作为另一种聊天软件形式 网页聊天室也受到用户的普遍欢迎 网页聊 天室的优点就是很好的利用了浏览器的功能 用户不需要安装任何新的软 件 即可加入聊天室聊天 现在的网页聊天室除了文本聊天之外 语音聊 天也很常见 由于其客户端的简化 其功能必然受到限制 3缺陷 不管是 QQ 还是网页聊天室 其最大的缺陷就是服务器固定 用户必须 连接上服务器 如果想在一个自治系统之内 一个孤立的网络 通信 NetMeeting 是一款不错的软件 本项目的开发目标也是如此 即追求服务 器的灵活性 任何用户都可以建立自己的服务器 2 22 2系统有关的技术系统有关的技术 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 在为通信双方开发应用程序的情况下 套接字是相当有用的 可以说网 络通信的基石是套接字 一个套接字是通信的一端 在 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 可以 适合整个网络通信 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 函数 如果是播放声音 则利用 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 如果是播放声音 则类似采集声音 基本上与采集声音的函数一一对应 以 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 就可 以完成音频的压缩和解压缩 如今流行的编码有以下几种 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 通信传输控制命令和文件 数据 传输的的文件类型任意 传输模式为流模式 二进制类型 2 2 42 2 4多线程技术多线程技术 多线程函数是 Win 32 的一个重要方面 其编程技术较为新颖 在程序 设计思路上不同于传统的模块结构化方法 比一般的面向对象的思路也较 为复杂 尤其是对于多处理器平台的处理更为复杂 要设计出性能良好的 多线程程序 不仅需要对操作系统的处理过程很清楚 还需要对具体应用 有一个全面的认识 并对应用中各线程部分的关系非常清楚 对同步模块 中的同步对象的具体含义应尽可能地清晰明了 以利于在程序中控制同步 事件的发生 避免出现死锁或不能同步处理的现象 线程的创建比较简单 可以利用 CreateThread 或者 AfxBeginThread 来实现 终止线程可以用 TerminateThread 来实现 线程只见信息的共享可以利用全局变量来实现或 者消息函数来实现 多线程的设计关键之处在于线程之间的同步 线程的 同步可以用以下几种方法 1通过设置线程的互斥体对象 在可能冲突的地方进行同步控制 首先 建立互斥体对象 得到句柄 HANDLE CreateMutex 然后 在 线程可能冲突区域的开始 即访问共享资源之前 调用 WaitForSingleObject 将句柄传给函数 请求占用互斥体对象 dwWaitResult WaitForSingleObject hMutex 5000L 共享资源访问完 后 释放对互斥体对象的占用 ReleaseMutex hMutex 互斥体对象在同 一时刻只能被一个线程占用 当互斥体对象被一个线程占用时 若有另一 线程想占用他 则必须等到前一线程释放后才能成功 2设置信号 在操作共享资源前 打开信号 完成操作后 关闭信号 这类似于互斥 体对象的处理 首先 创建信号对象 HANDLE CreateSemaphore 或者 打开一个信号对象 HANDLE OpenSemaphore 然后 在线程的访问共享 资源之前调用 WaitForSingleObject 共享资源访问完后 释放对信号对象 的占用 ReleaseSemaphore 信号对象允许同时对多个线程共享资源的 访问 在创建对象时指定最大可同时访问的线程数 当一个线程申请访问 成功后 信号对象中的计数器减 1 调用 ReleaseSemaphore 函数后 信号 对象中的计数器加 1 其中 0 计数器值 创建时指定的最大值 利用信 号对象 不仅可以控制共享资源的访问 还可以在应用的初始化时候使用 假定一个应用在创建一个信号对象时 将其计数器的初始值设为 0 这样就 阻塞了其他线程 保护了资源 待初始化完成后 调用 ReleaseSemaphore 函数将其计数器增加至最大值 进行正常的存取访问 3利用事件对象的状态 进行线程对共享资源的访问 用 ResetEvent 函数设置事件对象状态为不允许线程通过 用 SetEvent 函数设置事件对象状态为可以允许线程通过 事件分为手工释放和自动释 放 如果是手工释放 则按照上述 2 个函数处理事件的状态 如果是自动 释放 则在一个线程结束后 自动清除事件状态 允许其他线程通过 4设置排斥区 在排斥区中异步执行时 他只能在同一进程的线程之间共享资源处理 虽然此时上面介绍的 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 协议的基础上运行 由于 winsock 对广播传输 建立连接传输 数据报传输的支持 该方案是可行的 2基于 directx 语音技术的聊天工具 该方案采用 directsound 技术来实现语音的采集 回放 Directsound 语 音技术作为 directx 的一个组件 已经非常的成熟 可以在 API 层面上进行 录制声音 并把声音数据录制到内存中去用于远程传输 因此该方案也是 可行的 3基于网页形式的聊天工具 该方案利用现在成熟的网页技术来实现聊天工具的开发 该方案不再需 要对底层网络通信进行开发 因为有 HTTP 的很好的支持 因此工作重心 转到语音聊天的开发和服务器端的开发 对于网页开发 现在有 NET 等工 具很好的支持 因此该方案是可行的 但是必将导致服务器固定这一缺点 不符合该项目提出的初衷 2 3 22 3 2本系统的方案本系统的方案 1系统说明 本聊天工具最终采取的方案为 NETBIOS WAVEX VC6 0 即底层通信 技术采用 NETBIOS 通信 语音技术采用 WAVEX API 开发工具为 VC6 0 NETBIOS 对于跨平台 跨协议有很好的支持 而且以名字标示主 体 大大简化编程 要求该聊天工具可以实现服务器自建 几种聊天方式 文件传输 语音聊天等功能 2处理流程 图 2 1 3局限性 由于 NETBIOS 不能跨网段传输 因此该聊天工具适用于同一个网段之 内 没有对视频 图像聊天的支持 2 42 4系统任务概述系统任务概述 利用 NETBIOS 通信技术以及 WAVEX 语音技术实现一个能够广播聊天 聊天室聊天 二人私聊 语音聊天以及文件传输的一个聊天工具 具体目 标见下面 登录 用户可以以任何身份登录 无需注册 可以修改个人的资料 保存读取个人的资料 可以公开聊天 此时 不需要选择对象 可以选择一个聊天房间 也即选择一个服务器 可以察看一个房间的详细资料 可以刷新房间列表 可以新建一个房间 即新建一个服务器 可以选择聊天的对象 也可以公开聊天 可以察看某个人的详细资料 可以和某人私聊 别人看不到 可以隐身或者在线或者忙 自动回复 可以设置自动回复的消息 可以退出一房间 聊天内容为纯文本方式 可以察看本机的 ip 地址和 mac 地址 可以选择通信方式 数据报方式 阻塞或非阻塞方式 可以建立 netbios 连接 用于两个人的私有聊天室 可以在两个人的私有聊天室基础上实现语音聊天 可以在两个人的私有聊天室基础上实现文件传输 2 52 5系统其他要求系统其他要求 2 5 12 5 1系统性能要求系统性能要求 1时间特性 对于公共聊天和聊天室聊天 要求响应每条消息的时间不超过 1 秒 钟 否则用户将感到这个聊天工具反应迟钝 对于二人文本私聊 要求响应每条消息的时间不超过 500ms 这样 使得二人私聊能够有种当面聊天的感觉 对于语音聊天 要求语音的延迟不超过 5 秒钟 2语音质量 要求语音的噪声尽量小 可以分辨出人的话音 3文件传输速度 要求尽量提高传输速度 不能低于 1kb s 4灵活性 要求该聊天工具能够适用于多种协议上 而且能够在任意个自治系统之 内使用 要求服务器自建非常灵活 2 5 22 5 2系统环境要求系统环境要求 1硬件要求 安装了网卡 并连入因特网 安装了声卡 具有麦克风 音箱 2软件要求 安装了 windows98 以上的系统 安装了支持 NETBIOS 通信的 TCP IP 或者 NETBEUI 等协议 第第 3 3 章章系系统统设设计计 3 13 1系统的物理结构系统的物理结构 系统采用对等式结构 即任一节点均可作为服务器 又可作为客户端 同时 整个网络上可运行多个服务器 其中双空心箭头表示两者之间建立 连接通信 而虚心箭头表示广播发送消息 图 3 1 任何一端都可能是客户端 也可能是服务器端 如果它新建了一个房间 她就是服务器端 如果她进入了一个其他服务器节点所创建的房间 她就 是客户端 作为服务器端 它具有客户端的所有功能 但又要比客户端的 功能多 完成广播房间名和发送用户名列表 完成用户的连接和退出功能 响 应用户的隐身 上线 即要管理一个房间 作为服务器的节点 1 或 2 它将向网络上的所有客户端广播自己的房间 名 作为服务器的节点 1 将向该节点所创建的房间内的所有客户端 3 4 发 送新的用户消息 发送用户退出消息 等待网络上所有的节点的连接消息 转 发从客户端的接受到的新的消息 作为服务器的节点 2 将向该服务器内的客户端 5 发送用户名 发送用户 退出消息 转发消息 等待网络上所有的节点的连接消息 作为客户端 将向服务器端发送请求连接消息 等待服务器端的响应 作为客户端 将向指定的网络上的节点发送请求查询个人资料消息 服务 器将该消息转发给对应的客户 相应的客户响应该查询 发送个人资料到 服务器 服务器再将该消息回送给要查询的用户 从而完成查询个人的资 料的消息 无论作为服务器端 还是客户端 将向网络上的所有的节点广播公共聊天 消息 任一客户端均可以呼叫另一用户 以建立两个人的聊天室 在此基础上 可以选择是否语音聊天以及文件传输 3 23 2系统的软件结构系统的软件结构 1系统划分 本系统总共分为七个子系统 分别为 登录子系统 基于 netbios 的底层通信子系统 设置子系统 聊天子系统 服务器房间管理子系统 仅在服务器端有 语音聊天系统 文件传输子系统 2子系统描述 登录子系统 提供用户登录界面 主要完成用户的初始信息 可以保 存用户的个人资料 也可以从文件中读出个人资料 对用户的个人资 料进行可靠性 惟一性检查 基于 netbios 的底层通信子系统 主要利用 netbios 的编程接口 完 成对网卡的初始化 添加名字 广播发送消息 广播接受消息建立连 接 传送消息 获得网卡信息等的功能 聊天子系统 负责发送消息 接受消息 显示消息 刷新用户列表等功 能 它又可分为广播聊天 聊天室聊天 二人私聊 设置子系统 负责设置系统配置 同时提供修改修改个人资料等功能 服务器房间管理子系统 主要有新建房间 列出所有的房间名 广播 房间名 选择房间 等待用户连接房间 察看房间资料 退出房间 转 发用户的消息等功能 语音聊天子系统 主要完成语音的采集 压缩 传输 解压缩 回放等 功能 实现语音聊天 文件传输子系统主要在二人私聊的基础上 实现点对点的文件传输 3系统功能模型图 3 1顶层功能模型图 图 3 2 首先应用程序由这 6 个大的子系统组成 而这些子系统之间的通信 以及子系统内部的通信都是建立在 NETBIOS 通信子系统基础上之上的 下面是各个子系统的再划分 即子系统的子系统 其说明见上文的子系 统描述 3 2登录子系统功能模型图 图 3 3 3 3聊天子系统功能模型图 图 3 4 3 4房间管理子系统模型图 图 3 5 3 5语音子系统功能模型图 图 3 6 3 6NETBIOS 子系统功能模型图 图 3 7 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 示意图 单位 字节 212141299 发送者接收者时间类型消息体 表 3 2 因为要在一两个连接上传送多种信息 因此必须定义多种消息类型 才 能满足此需要 2消息队列 CinformationBox 消息队列是系统中用于存放接收到的消息的缓冲区 它其实是消息的一 个数组 属性定义如下 CInformation m ciInformationBox MAX INFORMATIONS 消息数组 UINT m nInformationNum 消息数目 表 3 3 利用消息队列 可以缓冲暂时未能处理的消息 避免客户端与服务器端 的速度不匹配问题 能够有效的扩展服务器的承载能力 3个人资料对象 Cperson 该对象用于存放个人的资料 以及个人在整个系统中要参与作用而需要 的参数 其属性定义如下 CString m strName 姓名 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 很显然 这几个属性管理了所有的客户端连接到服务端的用户信息 在 用户的连接 退出以及隐身等过程中 这几个属性一定要保持同步 3 43 4系统界面设计系统界面设计 1登录界面 图 3 8 提供用户登录接口 用于接受用户的个人信息 2系统主界面 图 3 9 第一个方框用于显示用户所发送的消息 这个消息是一广播消息 任何人 都可见第二个方框用于接受用户的输入 并以广播的形式发送网络上所有的 房间列表显示网络上所有的房间名 人数 是否满 说明等信息刷新按钮用于刷 新房间列表 双击房间名 将进入该房间个人设置用于设置个人的基本资料 包 括昵称 年龄 性别 头像 个人的说明等 系统设置按钮用于设置系统的各种 参数等新建房间按钮用于新建一个房间 呼叫某人按钮用于和某人建立连 接 实现二人私聊的功能 3个人设置界面 与登录界面相同 不同之处在于登录界面初始化为缺省值 而个人设置界 面初始化为最新的个人资料 4系统设置界面 图 3 10 将各个系统参数分类成 6 个大类 分别为公共聊天的参数 二人私聊的 参数 聊天室聊天的参数 netbios 的参数 服务器的参数 其他等 5新建房间界面 图 3 11 房间名称用于输入新房间的名称 同时若与网络上其他房间同名 则非法 输入 密码用于设置该房间的密码 若不设置 则无需密码即可进入上限人数 用于设置房间的最多的用户数房间说明 用于介绍该房间 6聊天室界面 图 3 12 左边大方框用于显示聊天内容下面的方框用于接受用户输入消息聊天对 象用于选择聊天的对象右边显示房间名 主人 和所有的该房间用户 7二人私聊界面 图 3 13 选中语音聊天 可以进行语音聊天 取消语音聊天复选框 即可取消语 音聊天 选择发送文件可以选择文件并发送给对方 如对方同意接受文件 此时 终止发送按钮将被激活 可以在传送文件的过程中终止文件的传送 第第 4 4 章章系统实现系统实现 4 14 1功能规定功能规定 1登录功能的规定 功能名 称 登录 输入昵称 选择性别 年龄 个人说明等 输出登录是否成功 处理 IF 系统不提供 NETBIOS 服务 输出登录失败 退出 ENDIF IF 重置系统的 NETBIOS 服务失败 输出登录失败 退出 ENDIF IF 添加个人名字的 NETBIOS 名出错 输出登录失败 退出 ENDIF IF 如果用户名已存在 输出登录失败 退出 ENDIF 输出登录成功 退出 备注 用户名不能重名 不能为已有名字 s 形成的名字 也 不能为 public 长度不超过 20 个字节 年龄在 0 200 之间 个人说明不超过 100 个字符 表 4 1 2连接房间功能的规定 功 能名称 进入一个选择的房间 输入房间名 输出连接成功或者失败 处理 IF 房间名无效 输出连接失败 退出 ENDIF IF 连接服务器失败 输出连接失败 退出 ENDIF IF 该房间需要密码 输入密码 ENDIF IF 身份验证出错 输出连接失败 退出 ENDIF 输出连接成功 备注 表 4 2 3新建房间功能的规定 功 能

温馨提示

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

评论

0/150

提交评论