基于Linux平台的局域网可语音的IM软件的设计与实现.doc

上传人:文****钱 文档编号:54898 上传时间:2018-05-29 格式:DOC 页数:15 大小:169.50KB
下载 相关 举报
基于Linux平台的局域网可语音的IM软件的设计与实现.doc_第1页
第1页 / 共15页
基于Linux平台的局域网可语音的IM软件的设计与实现.doc_第2页
第2页 / 共15页
基于Linux平台的局域网可语音的IM软件的设计与实现.doc_第3页
第3页 / 共15页
基于Linux平台的局域网可语音的IM软件的设计与实现.doc_第4页
第4页 / 共15页
基于Linux平台的局域网可语音的IM软件的设计与实现.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、 基于 Linux平台的局域网可语音的 IM软件的设计与实 作者: 专业: 软件工程 指导老师: 摘要 出现了一系列的通信软件。 自 1990s ICQ 后, IM 首次出现,凭借实时在线的交 互特性迅速风靡全球。如今 ,M 软件正逐渐成为一个集合了文字、视频、音频业务及功能不断完善, IM 已经和 WWW、 Email 等一起成为网民们最喜爱的网络服务之一。尤其在国内,腾讯 QQ 普及率远高于 Email,在部分中国网民眼中上网基本等价于使用 QQ 等。 2014 年 4 月 11 日晚间,腾讯 QQ 同时在线用户数突破 2 亿。 本毕业设计就是模拟 QQ 聊天软件,开发一个基于 Linux

2、 平台的局域网实时 语音通信软件。 系统采用 C/S 架构,基于 Linux 平台开发,采用 C+编程语言,由服务器端和客户端程序组成,并使用 QT 进行图形界面的设计。主要实现的是聊天软件的部分功能,即文字聊天、语音聊天、保存用户消息等等功能,主要完成任务包括服务器模块的设计实现、文字聊天、保存用户消息等等功能。通过运行、测试与分析,该功能聊天软件运行稳定、可靠,具有一定的实用价值。 关键词 : Linux QT 局域网 网络 音频 多线程 IM C/S Abstract Along with the high-speed development of the computer networ

3、k echnology, various of applications based on network was born, like information releasing, data sharing . The development of the LAN is the ame fast. Some governments, enterprises and schools constitute a LAN first, then join into INTERNET. So the instant messenger in LAN was borned. This dissertat

4、ion focuses on the designing and implementation of Communication software on LAN. And a Communication software is built using QT on Linux. First, the Development environment, the Background and the technology are briefly introduced. Then the requirements analysis and systematic design of a Communica

5、tion software is discussed in detail. And the implementation details of each function module, is given. Last, using the VM to test the software. Keywords: Linux , QT, LAN, NetWork 目录 一、前言 1.1 课题背景 1.2 国内外研究现状及发展趋势 1.3 本课题的研究的目的和意义 二、 关键技术 2.1 Linux操作系统 2.1.1 什么是 Linux系统 准确的说,是指 Linux的 kernel(系统的核心程序

6、 ),其内核版权属于 Linus Torvalds在 GPL(GNU General Public License)版权协议下发行 , 任何人都可以自由的复制 (copy), 修改 (change), 套装分发( distribute),销 售,但是不可以在分发时加入任何限制 , 而且所有原码必须是公开的,所以任何人都可以无偿取得所有执行文件和源代码。 对于 Linux用户和系统管理员来, Linux是指包含 Linux kernel、 utilities (系统工具程序 )以及 application (应用软件 )的一个完整的操作系统。 Linux的应用软件是由自由软件基金会 (FSF)开

7、发的,全世界许多热心的程序员为 Linux开发或移植了很多应用程序 ,包括X-Windows、 Emacs、 TCP/IP网络 (包括 SLIP/PPP/ISDN) Linux(包括内核和大量的应用程序 )光是执行程序就已经达到 200M,完全安装后的规模将更大 (大约 500M左右 )。 Linux是 Unix的”克隆”或 Unix风格的操作系统,在源代码级上兼容绝大部分的 Unix标准 (如 IEEE POSIX),它遵从 POSIX规范,例如对于 System V来说 ,把其上程序源代码拿到 , Linux下重新编译后就可以运行。 Linux Linus是这样说的,别的都被他人用了企鹅,

8、不是也非常可爱吗 ?!由 Linux作者发布的仅仅是一个内织把内核、源代码及相关的应用程序组织在一起发行 , 于是就产生了不同的 Linux发行(distributor)版本 , 比较著名的发行版本有 RedHat、 Ubuntu 、 Debian 等。 2.2.2 Linux的发展历史 Linux的历史可以追溯到 1990 Linus Torvalds用汇编语言写了一个在 80386保护模式下处理多任务切换的程序。 1991年 10月 5号发布了Linux 0.0.2版本 ,这个版本已经可以运行 bash(一种用户与操作系统内核通讯 的软件 )和gcc(GNU C编译器 )了。 Linus

9、Linux引起爱好者的注意 ,他们通过互连网也加入了 Linux的内核开发工作 ,一大批高水平程序员的加入 ,使得 Linux达到迅猛发展。到 1993年底, Linux 1.0终于诞生。 Linux 1.0已经是一个功能完备的操作系统了,其内核写得紧凑高效,可以充分发挥硬件的性能,在 4M内存的 80386机器上也非常好。 Linux加入 GNU并遵循公共版权许可证 (GPL)不排斥在 Linux上开发商业软件,故而使 Linux又开始了一次飞跃,出现了很多的 Linux发行版,如 Slackware、 Redhat、 TurboLinux等十多种,而且还在增加,还有一些公司在 Linux上

10、开发商业软件或把其他 Unix平台的软件移植到 Linux上来,如今很多 IT界的大腕如 IBM、Intel、 Oracle、 Novell等都宣布支持 Linux! 商家的加盟弥补了纯自由软件的不足和发展障碍, Linux得以迅速普及。 2.2.3 Ubuntu Ubuntu 是一个以 桌面 应用为主的 Linux 操作系统 ,其名称来自 非洲南部 祖鲁语或豪萨语的 “ ubuntu” 一词(译为友帮拓或 乌班图 ),意思是 “ 人性 ” 、 “ 我的存在是因为大家的存在 ” ,是 非洲 传统的一种价值观,类似华人社会的 “ 仁爱 ” 思想。 Ubuntu 基于 Debian发行版和 GNO

11、ME 桌面环境 ,与 Debian 的不同在于它每 6个月会发布一个新版本。 Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由 自由软件 构建而成的 操作系统 。 Ubuntu 具有庞大的社区力量,用户可以方便地从社区获得帮助。 Ubuntu 的版本号是根据其发布版本的日期而定。版本号由该次发布的年份和月份组成,并未反映其实际版本。 Ubuntu 的首次发布 (Warty Warthog)是在 2004年 10月,因此该版本为 4.10。每六个月发布一个新版本,而每两年发布一个长期支持版 本( LTS)。 Ubuntu Jaunty Jackalope 于 2009年 4

12、月 23日发布,因此版本号为 9.04。 Ubuntu Karmic Koala,即Ubuntu 9.10,于 2009年 10月 29日发布。前一个长期支持版本 (开发代号为 Lucid Lynx)于2010年 4月发布,其版本号为 10.04 LTS。版本 Ubuntu 11.10,开发代号: “ Oneiric Ocelot” ,已经于 2011年 10月 13日发布并提供下载。 我用的是 Ubuntu12.04.Ubuntu 12.04(代号 Precise Pangolin) 已经于 2012年的 4月 26日发布。 2.2 数据库 SQLite SQLite,是一款轻型的数据库,是

13、遵守 ACID的关系型 数据库管理系统 ,它的设计目标是 嵌入式 的,而且目前已经在很多 嵌入式产品 中使用了它,它占用资源非常的低,在 嵌入式设备 中,可能只需要几百 K的内存就够了。它能够支持 Windows/Linux/Unix等等主流的 操作系统 ,同时能够跟很多程序语言相结合,比如 Tcl、 C#、 PHP、 Java等,还有 ODBC接口,同样比起 Mysql、 PostgreSQL这两款开源世界著名的 数据库管理系统 来讲,它的处理速度比他们都快。 SQLite第一个 Alpha版本 诞生于 2000年 5月。 至今已经有 13个年头, SQLite也迎来了一个版本 SQLite

14、 3已经发布。 SQLite 是遵 守 ACID 关系型数据库管理系统,它包含在一个相对小的 C 库中。它是D.RichardHipp 建立的公有领域项目。 不像常见的客户 -服务器范例, SQLite 引擎 不是个 程序 与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在 编程 语言内的直接 API 调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库 (定义、表、索引和数据本身 )都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个 数据 文件而完成的。 2.3 开发语言 C+ C+程序设计语言是由来自 AT&T

15、 Bell Laboratories的 Bjarne Stroustrup设计和实现 的,它兼具 Simula语言在组织与设计方面的特性以及适用于系统程序设计的 C语言设施。 C+最初的版本被称作“带类的( C with Classes Stroustrup,1980,在 1980年被第一次投入使用;当时它只支持系统程序设计和数据抽象技术。支持面向对象程序设计的语言设施在 1983 年被加入 C+之后,面向对象设计方法和面向对象程序设计技术就逐渐进入了 C+领域。在1985年, C+第一次投入商业市场 Stroustrup,1986Stroustrup,1986b。在 1987至 1989年间

16、 C+Ellis,1990Stroustrup,1991。 随着若干独立开发的 C+实现产品的出现和广泛应用,正式的 C+标准化工作在 1990年启动。标准化工作由 ANSI( American National Standard Institute ISO( International Standards Organization)负责。 1998年正式发布了 C+语言的国际标准C+,1998。在标准化工作进展期间,标准委员会充当了一个重要的角 色,其发布的 C+标准之草案在正式标准发布之前,一直被作为过渡标准而存在。 2.4 Qt编程软件 Qt是一个 1991年由奇趣科技开发的跨平台 C+

17、图形用户界面应用程序开发框架。它既可以开发 GUI程式 ,也可用于开发非 GUI程式 ,比如控制台工具和服务器。 Qt是面向对象语言 ,易于扩展 ,并且允许组件编程。 2008年 ,奇趣科技被诺基亚公司收购 ,QT也因此成为诺基亚旗下的编程语言工具。在发布 Qt 4.6 的同时 ,作为 Qt 开发跨平台 IDE的 Qt Creator 也发布了更新版本。 Qt Creator 1.3 和 Qt 4.6共同构成的 Qt SDK,包含了开发跨平台应用程序所需的全部功能。 Qt Creator是一个用于 Qt开发的轻量级跨平台集成开发环境。 Qt Creator可带来两大关键益处 ,提供首个专为支持

18、跨平台开发而设计的集成开发环境 (IDE)触 Qt框架的开发人员能迅速上手和操作。 Qt Creator包含了一套用于创建和测试基于 Qt应用程序的高效工具 ,包括 :一个高级的 C+代码编辑器、上下文感知帮助系统、可视化调试器、源代码管理、项目和构建管理工具。 Qt Creator在 LGPL2.1版本授权下 有效,并且接受代码贡献 。 2.5 Linux ALSA音频编程 2.5.1 ALSA 声音编程介绍 ALSA 表示高级 Linux 声音体系结构 (Advanced Linux Sound Architecture)。它由一系列内核驱动,应用程序编译接口 (API)以及支持 Linu

19、x 下声音的实用程序组成。这篇文章里,我将简单介绍 ALSA 项目的基本框架以及它的软件组成。主要集中介绍 PCM 接口编程,包括您可以自动实践的程序示例。 您使用 ALSA 的原因可能就是因为它很新,但它并不是唯一可用的声音 API。如果您想完成低级的声音操作,以便能够最大化地控制声音并最大化地提高性能,或者如果您使用其它声音 API 没有的特性,那么 ALSA 是很好的选择。如果您已经写了一个音频程序,你可能想要为 ALSA 声卡驱动添加本地支持。如果您对音频不感兴趣,只是想播放音频文件,那么高级的 API 将是更好的选择,比如 SDL,OpenAL 以及那些桌面环境提供的工具集。另外,您

20、只能在有 ALSA 支持的 Linux 环境中使用 ALSA。 2.5.2 ALSA 历史 ALSA 项目发起的起因是 Linux 下的声卡驱动 (OSS/Free drivers)没有得到积极的维护。并且落后于新的声卡技术。 Jaroslav Kysela 早先写了一个声卡驱动,并由此开始了 ALSA项目,随便,更多的开发者加入到开发队伍中,更多的声卡得到支持, API 的结构也得到了重组。 Linux 内核 2.5在开发过程中, ALSA 被合并到了官方的源码树中。在发布内核 2.6后,ALSA 已经内建在稳定的内核版本中并将广泛地使用。 2.5.3 数字音频基础 声音由变化的气压组成。它

21、被麦克风这样的转换器转换成电子形式。模 /数 (ADC)转换器将模拟电压转换成离散的样本值。声音以固定的时间间隔被采样,采样的速率称为采样率。把样本输出到数 /模 (DAC)转换器,比如扩音器,最后转换成原来的模拟信号。 样本大小以位来表示。样本大小是影响声音被转换成数字信号的精确程度的因素之一。另一个主要的因素是采样率。奈奎斯特 (Nyquist)理论中,只要离散系统的奈奎斯特频率高于采样信号的最高频率或带宽,就可以避免混叠现象。 2.5.4 ALSA 基础 ALSA 由许多声卡的声卡驱动程序组成,同时它也提供一个称为 libasound 的 API 库 。应用程序开发者应该使用 libas

22、ound 而不是内核中的 ALSA 接口。因为 libasound 提供最高级并且编程方便的编程接口。并且提供一个设备逻辑命名功能,这样开发者甚至不需要知道类似设备文件这样的低层接口。相反, OSS/Free 驱动是在内核系统调用级上编程 ,它要求开发者提供设备文件名并且利用 ioctrl 来实现相应的功能。 为了向后兼容, ALSA 提供内核模块来模拟 OSS,这样之前的许多在 OSS 基础上开发的应用程序不需要任何改动就可以在 ALSA 上运行。另外, libaoss 库也可以模拟 OSS,而它不需要内核模块。 ALSA 包含插件功能,使用插件可以扩展新的声卡驱动,包括完全用软件实现的虚拟

23、声卡。 ALSA 提供一系列基于命令行的工具集,比如混音器 (mixer),音频文件播放器 (aplay),以及控制特定声卡特定属性的工具。 2.5.5 ALSA 体系结构 ALSA API 可以分解成以下几个主要的接口: 1 控制接口:提供管理声卡注册和请求可用设备的通用功能 2 PCM 接口:管理数字音频回放 (playback)和录 音 (capture)的接口。本文后续总结重点放在这个接口上,因为它是开发数字音频程序最常用到的接口。 3 Raw MIDI 接口 :支持 MIDI(Musical Instrument Digital Interface),标准的电子乐器。这些 API 提

24、供对声卡上 MIDI 总线的访问。这个原始接口基于 MIDI 事件工作,由程序员负责管理协议以及时间处理。 4 定时器 (Timer)接口:为同步音频事件提供对声卡上时间处理硬件的访问。 5 时序器 (Sequencer)接口 6 混音器 (Mixer)接口 2.5.6 设备命名 API 库使用 逻辑设备名 而不是设备文件。设备名字可以是真实的硬件名字也可以是插件名字。硬件名字使用 hw:i,j 这样的格式。其中 i 是卡号, j 是这块声卡上的设备号。 第一个声音设备是 hw:0,0.这个别名默认引用第一块声音设备并且在本文示例中一真会被用到。 插件使用另外的唯一名字,比如 plughw:,

25、表示一个插件,这个插件不提供对硬件设备的访问 ,而是提供像采样率转换这样的软件特性,硬件本身并不支持这样的特性。 2.5.7 声音缓存和数据传输 每个声卡都有一个硬件缓存区来保存记录下来的样本。当缓存区足够满时,声卡将产生一个中断。内核声卡驱动然后使用直接内存 (DMA)访问通道将样本传送到内存中的应用程序缓存区。类似地,对于回放,任何应用程序使用 DMA 将自己的缓存区数据传送到声卡的硬件缓存区中。 这样硬件缓存区是环缓存。也就是说当数据到达缓存区末尾时将重新回到缓存区的起始位置。 ALSA 维护一个指针来指向硬件缓存以及应用程序缓存区中 数据操作的当前位置。从内核外部看,我们只对应用程序的

26、缓存区感兴趣,所以本文只讨论应用程序缓存区。 应用程序缓存区的大小可以通过 ALSA 库函数调用来控制。 缓存区可以很大 ,一次传输操作可能会导致 不可接受的延迟 ,我们把它称为延时 (latency)。为了解决这个问题,ALSA 将缓存区拆分成一系列周期 (period)(OSS/Free 中叫片断 fragments).ALSA 以 period为单元来传送数据。 一个周期 (period)存储一些帧 (frames)。每一帧包含时间上一个点所抓取的 样本。对于立体声设备,一个帧会包含两个信道上的样本。分解过程:一个缓存区分解成周期,然后是帧,然后是样本。左右信道信息被交替地存储在一个帧内

27、。这称为交错 (interleaved)模式。在非交错模式中,一个信道的所有样本数据存储在另外一个信道的数据之后。 2.5.8 Over and Under Run 当一个声卡活动时,数据总是连续地在 硬件缓存区 和 应用程序缓存区间 传输。但是也有例外。在录音例子中,如果应用程序读取数据不够快,循环缓存区将会被 新的数据覆盖 。这种数据的丢失被称为 over run.在回放例子中,如果应用程序写入数据到缓存区中的速度不够快,缓存区将会 “饿死 “。这样的错误被称为 “under run“。在 ALSA 文档中,有时将这两种情形统称为 “XRUN“。适当地设计应用程序可以最小化 XRUN 并且

28、可以从中恢复过来。 2.5.9 一个典型的声音程序 使用 PCM 的程序通常类似下面的伪代码: 打开回放或录音接口 设置硬件参数 (访问模式,数据格式,信道数,采样率,等等 ) while 有数据要被处理: 读 PCM 数据 (录音 ) 或 写 PCM 数据 (回放 ) 关闭接口 2.6 QT的 TCP网络编程 TCP 即 Transmission Control Protocol,传输控制协议。与 UDP 不同,它是面向连接和数据流的可靠传输协议。也就是说,它能使一台计算机上的数据无差错的发往网络上的其他计算机,所以当要传输大量数据时,我们选用 TCP 协议。 TCP 协议的程序使用的是客户

29、端 /服务器模式,在 Qt 中提供了 QTcpSocket 类来编写客户端程序,使用 QTcpServer 类编写服务器端程序。我们在服务器端进行端口的监听,一旦发现客户端的连接请求,就会发出 newConnection()信号,我们可以关联这个信号到我们自己的槽函数,进行数据的发送。而在客户端,一旦有数据到来就会发出 readyRead()信号,我们可以关联此信号,进行数据的接收。 2.7 RTP/RTCP协议 实时传输协议 RTP( Realtime Transport Protocol):是针对 Internet 上多媒体 数据流 的一个传输协议 , 由 IETF(Internet 工程

30、任务组 )作为 RFC1889发布。 RTP 被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。 RTP 的典型应用建立在 UDP(User Datagram Protocol,用户数据包协议 )上,但也可以在 TCP( Transfer Control Protocol,传输控制协议)或 ATM( Asynchronous Transfer Mode,异步传输模式)等其他协议之上工作。 RTP 本身只保证实时数据的传输,并 不能为按顺序传送 数据包 提供可靠的传送机制,也不提供 流量控制 或 拥塞控制 ,它依靠 RTCP 提供这些服务。 实时传输控制协议 RTCP(

31、 Realtime Transport Control Protocol):负责管理传输质量在当前应用进程之间交换控制信息。在 RTP 会话期间,各参与者周期性地传送 RTCP 包,包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,服务器可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。 RTP 和 RTCP 配合使用,能以有效的反馈和最小的开销使 传输效率 最佳化,故特别适合传送网上的实时数据。 三、 系统需求分析 3.1 项目总述 随着互联网技术的发展,网上办公、 网上购物、网上交友等正在以飞快的速度走进大众的生活中,人们可以在网上做在现实生活中做的很多事情,而现实

32、生活中最重要的一件事情就是交流,人与人的交流莫过于口头直接进行交流最为直观最为快捷。在这个“互联网世界”的今天,为了方便内部人员进行实时交流,共同解决工作生活中遇到的困难,为企事业以及其它的局域网用户带来方便 此次开发的即时通讯软件可以作为局域网的交流工具使用,通信的安全性不是高 ,但要求信息的响应速度要较快,让用户充分享受到网络即时消息的方便和快捷。 语音聊天是此即时通信系统的一个核心子模块,它采用现代比 较流行的网络编程技术, 面向各类企事业部门等局域网用户,实现实时语音捕获,音频数据压缩与发送,音频数据接收与回放等功能,从而达到了实时语音通讯的目的,方便内部人员进行实时交流,共同解决工作

33、生活中遇到的困难,为企事业以及其它的局域网用户带来方便。 3.2 系统总体需求分析 该即时通讯软件由服务器和客户端两部分组成, 基于 Linux平台开发,采用TCP/IP通信协议,语音模块采用 g72a算法压缩,通过 RTP/RTCP协议进行网络传输。 服务端是可以进行监听,记录客户端请求和验证客户端身份的合法性,并提供消息中转服 务;客户端程序面向实际用户,它有必要的界面的按钮,向用户提供网络即时消息的功能。 本即时通讯系统包含如下基本功能: 1、 客户端: a) 注册用户 b) 用户登录 c) 获取好友列表并显示好友状态 d) 文字聊天 e) 语音聊天 f) 查看和修改用户信息 g) 连接服务器 2、 服务端 a) 启动和停止服务器 b) 接收和回应客户端 c) 转发用户之间的消息 四、 系统总体设计

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。