版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 基于Linux平臺的局域網(wǎng)可語音的IM軟件的設(shè)計(jì)與實(shí)</p><p><b> 作者:</b></p><p><b> 專業(yè):軟件工程</b></p><p><b> 指導(dǎo)老師:</b></p><p><b> 摘要</b&g
2、t;</p><p> 隨著計(jì)算機(jī)網(wǎng)絡(luò)的日益普及人們通過網(wǎng)絡(luò)進(jìn)行交流顯得越來越重要。于是出現(xiàn)了一系列的通信軟件。 </p><p> 自1990s四位以色列人推出的ICQ后,IM首次出現(xiàn),憑借實(shí)時(shí)在線的交互特性迅速風(fēng)靡全球。如今,M軟件正逐漸成為一個(gè)集合了文字、視頻、音頻業(yè)務(wù)以及多種增值業(yè)務(wù)的多媒體網(wǎng)絡(luò)通信軟件,憑借其所具有的廉價(jià)性和方便性以及功能不斷完善,IM已經(jīng)和WWW、Em
3、ail等一起成為網(wǎng)民們最喜愛的網(wǎng)絡(luò)服務(wù)之一。尤其在國內(nèi),騰訊QQ普及率遠(yuǎn)高于Email,在部分中國網(wǎng)民眼中上網(wǎng)基本等價(jià)于使用QQ等。2014年4月11日晚間,騰訊QQ同時(shí)在線用戶數(shù)突破2億。</p><p> 本畢業(yè)設(shè)計(jì)就是模擬QQ聊天軟件,開發(fā)一個(gè)基于Linux平臺的局域網(wǎng)實(shí)時(shí)</p><p><b> 語音通信軟件。</b></p><p&
4、gt; 系統(tǒng)采用C/S架構(gòu),基于Linux平臺開發(fā),采用C++編程語言,由服務(wù)器端和客戶端程序組成,并使用QT進(jìn)行圖形界面的設(shè)計(jì)。主要實(shí)現(xiàn)的是聊天軟件的部分功能,即文字聊天、語音聊天、保存用戶消息等等功能,主要完成任務(wù)包括服務(wù)器模塊的設(shè)計(jì)實(shí)現(xiàn)、文字聊天、保存用戶消息等等功能。通過運(yùn)行、測試與分析,該功能聊天軟件運(yùn)行穩(wěn)定、可靠,具有一定的實(shí)用價(jià)值。</p><p> 關(guān)鍵詞:Linux QT 局域網(wǎng) 網(wǎng)絡(luò) 音
5、頻 多線程 IM C/S</p><p><b> Abstract</b></p><p> Along with the high-speed development of the computer network echnology, various of applications based on network was born, like info
6、rmation releasing,</p><p> 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
7、 LAN was borned. </p><p> This dissertation focuses on the designing and implementation of Communication software on LAN. And a Communication software is built using QT on Linux. First, the Development envi
8、ronment, the Background and the technology are briefly introduced. Then the requirements analysis and systematic design of a Communication software is discussed in detail. And the implementation details of each function
9、 module, is given. Last, using the VM to test the software. </p><p> Keywords: Linux , QT, LAN, NetWork</p><p><b> 目錄</b></p><p><b> 一、前言</b></p>&
10、lt;p><b> 1.1 課題背景</b></p><p> 1.2 國內(nèi)外研究現(xiàn)狀及發(fā)展趨勢</p><p> 1.3 本課題的研究的目的和意義</p><p><b> 關(guān)鍵技術(shù)</b></p><p> 2.1 Linux操作系統(tǒng)</p><p>
11、 2.1.1 什么是Linux系統(tǒng)</p><p> 準(zhǔn)確的說,是指Linux的kernel(系統(tǒng)的核心程序),其內(nèi)核版權(quán)屬于Linus Torvalds在GPL(GNU General Public License)版權(quán)協(xié)議下發(fā)行, 任何人都可以自由的復(fù)制(copy), 修改(change), 套裝分發(fā)(distribute),銷售,但是不可以在分發(fā)時(shí)加入任何限制, 而且所有原碼必須是公開的,所以任何人都
12、可以無償取得所有執(zhí)行文件和源代碼。 </p><p> 對于Linux用戶和系統(tǒng)管理員來,Linux是指包含Linux kernel、utilities (系統(tǒng)工具程序)以及application (應(yīng)用軟件)的一個(gè)完整的操作系統(tǒng)。Linux的應(yīng)用軟件是由自由軟件基金會(FSF)開發(fā)的,全世界許多熱心的程序員為Linux開發(fā)或移植了很多應(yīng)用程序,包括X-Windows、Emacs、TCP/IP網(wǎng)絡(luò)(包括SLIP
13、/PPP/ISDN)等等?,F(xiàn)在Linux(包括內(nèi)核和大量的應(yīng)用程序)光是執(zhí)行程序就已經(jīng)達(dá)到200M,完全安裝后的規(guī)模將更大(大約500M左右)。 </p><p> 從本質(zhì)上講Linux是Unix的”克隆”或Unix風(fēng)格的操作系統(tǒng),在源代碼級上兼容絕大部分的Unix標(biāo)準(zhǔn)(如IEEE POSIX),它遵從 POSIX規(guī)范,例如對于System V來說,把其上程序源代碼拿到 ,Linux下重新編譯后就可以運(yùn)行。
14、</p><p> Linux的標(biāo)志是可愛的企鵝,至于為什么選用企鵝Linus是這樣說的,別的都被他人用了企鵝,不是也非??蓯蹎?!由Linux作者發(fā)布的僅僅是一個(gè)內(nèi)核而己有一些公司或組織把內(nèi)核、源代碼及相關(guān)的應(yīng)用程序組織在一起發(fā)行, 于是就產(chǎn)生了不同的Linux發(fā)行(distributor)版本, 比較著名的發(fā)行版本有RedHat、Ubuntu 、Debian 等。</p><p>
15、; 2.2.2 Linux的發(fā)展歷史</p><p> Linux的歷史可以追溯到1990年Linus Torvalds還是芬蘭赫爾辛基大學(xué)的一名學(xué)生用匯編語言寫了一個(gè)在80386保護(hù)模式下處理多任務(wù)切換的程序。1991年10月5號發(fā)布了Linux 0.0.2版本,這個(gè)版本已經(jīng)可以運(yùn)行bash(一種用戶與操作系統(tǒng)內(nèi)核通訊的軟件)和gcc(GNU C編譯器)了。 </p><p>
16、 Linus從一開始就決定自由擴(kuò)散Linux、包括源代碼他把源代碼發(fā)布在網(wǎng)上隨即就引起愛好者的注意,他們通過互連網(wǎng)也加入了Linux的內(nèi)核開發(fā)工作,一大批高水平程序員的加入,使得Linux達(dá)到迅猛發(fā)展。到1993年底,Linux 1.0終于誕生。Linux 1.0已經(jīng)是一個(gè)功能完備的操作系統(tǒng)了,其內(nèi)核寫得緊湊高效,可以充分發(fā)揮硬件的性能,在4M內(nèi)存的80386機(jī)器上也非常好。 </p><p> Linu
17、x加入GNU并遵循公共版權(quán)許可證(GPL)由于不排斥商家對自由軟件進(jìn)一步開發(fā)不排斥在Linux上開發(fā)商業(yè)軟件,故而使Linux又開始了一次飛躍,出現(xiàn)了很多的Linux發(fā)行版,如Slackware、Redhat、TurboLinux等十多種,而且還在增加,還有一些公司在Linux上開發(fā)商業(yè)軟件或把其他Unix平臺的軟件移植到Linux上來,如今很多IT界的大腕如IBM、Intel、Oracle、Novell等都宣布支持Linux! 商
18、家的加盟彌補(bǔ)了純自由軟件的不足和發(fā)展障礙,Linux得以迅速普及。</p><p> 2.2.3 Ubuntu</p><p> Ubuntu是一個(gè)以桌面應(yīng)用為主的Linux操作系統(tǒng),其名稱來自非洲南部祖魯語或豪薩語的“ubuntu”一詞(譯為友幫拓或?yàn)醢鄨D),意思是“人性”、“我的存在是因?yàn)榇蠹业拇嬖凇?,是非洲傳統(tǒng)的一種價(jià)值觀,類似華人社會的“仁愛”思想。Ubuntu基于Debian
19、發(fā)行版和GNOME桌面環(huán)境,與Debian的不同在于它每6個(gè)月會發(fā)布一個(gè)新版本。Ubuntu的目標(biāo)在于為一般用戶提供一個(gè)最新的、同時(shí)又相當(dāng)穩(wěn)定的主要由自由軟件構(gòu)建而成的操作系統(tǒng)。Ubuntu具有龐大的社區(qū)力量,用戶可以方便地從社區(qū)獲得幫助。</p><p> Ubuntu 的版本號是根據(jù)其發(fā)布版本的日期而定。版本號由該次發(fā)布的年份和月份組成,并未反映其實(shí)際版本。Ubuntu的首次發(fā)布(Warty Warthog
20、)是在2004年10月,因此該版本為4.10。每六個(gè)月發(fā)布一個(gè)新版本,而每兩年發(fā)布一個(gè)長期支持版本(LTS)。 Ubuntu Jaunty Jackalope于2009年4月23日發(fā)布,因此版本號為9.04。Ubuntu Karmic Koala,即Ubuntu 9.10,于2009年10月29日發(fā)布。前一個(gè)長期支持版本(開發(fā)代號為Lucid Lynx)于2010年4月發(fā)布,其版本號為10.04 LTS。版本Ubuntu 11.10,開
21、發(fā)代號:“Oneiric Ocelot”,已經(jīng)于2011年10月13日發(fā)布并提供下載。</p><p> 我用的是Ubuntu12.04.Ubuntu 12.04(代號Precise Pangolin) 已經(jīng)于2012年的4月26日發(fā)布。</p><p> 2.2 數(shù)據(jù)庫SQLite</p><p> SQLite,是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)系型數(shù)
22、據(jù)庫管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語言相結(jié)合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。SQLite第一個(gè)Alpha版本誕生于
23、2000年5月。 至今已經(jīng)有13個(gè)年頭,SQLite也迎來了一個(gè)版本 SQLite 3已經(jīng)發(fā)布。</p><p> SQLite是遵守ACID關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它包含在一個(gè)相對小的C庫中。它是D.RichardHipp建立的公有領(lǐng)域項(xiàng)目。[不像常見的客戶-服務(wù)器范例,SQLite引擎不是個(gè)程序與之通信的獨(dú)立進(jìn)程,而是連接到程序中成為它的一個(gè)主要部分。所以主要的通信協(xié)議是在編程語言內(nèi)的直接API調(diào)用。這在消耗
24、總量、延遲時(shí)間和整體簡單性上有積極的作用。整個(gè)數(shù)據(jù)庫(定義、表、索引和數(shù)據(jù)本身)都在宿主主機(jī)上存儲在一個(gè)單一的文件中。它的簡單的設(shè)計(jì)是通過在開始一個(gè)事務(wù)的時(shí)候鎖定整個(gè)數(shù)據(jù)文件而完成的。</p><p> 2.3 開發(fā)語言C++</p><p> C++程序設(shè)計(jì)語言是由來自AT&T Bell Laboratories的Bjarne Stroustrup設(shè)計(jì)和實(shí)現(xiàn)的,它兼具Simu
25、la語言在組織與設(shè)計(jì)方面的特性以及適用于系統(tǒng)程序設(shè)計(jì)的C語言設(shè)施。C++最初的版本被稱作“帶類的(C with Classes)[Stroustrup,1980],在1980年被第一次投入使用;當(dāng)時(shí)它只支持系統(tǒng)程序設(shè)計(jì)和數(shù)據(jù)抽象技術(shù)。支持面向?qū)ο蟪绦蛟O(shè)計(jì)的語言設(shè)施在1983</p><p> 年被加入C++之后,面向?qū)ο笤O(shè)計(jì)方法和面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù)就逐漸進(jìn)入了C++領(lǐng)域。在1985年,C++第一次投入商業(yè)市
26、場[Stroustrup,1986][Stroustrup,1986b]。在1987至1989年間支持范型程序設(shè)計(jì)的語言設(shè)施也被加進(jìn)了C++[Ellis,1990][Stroustrup,1991]。 </p><p> 隨著若干獨(dú)立開發(fā)的C++實(shí)現(xiàn)產(chǎn)品的出現(xiàn)和廣泛應(yīng)用,正式的C++標(biāo)準(zhǔn)化工作在1990年啟動(dòng)。標(biāo)準(zhǔn)化工作由ANSI(American National Standard Institute)
27、以及后來加入的ISO(International Standards Organization)負(fù)責(zé)。1998年正式發(fā)布了C++語言的國際標(biāo)準(zhǔn)[C++,1998]。在標(biāo)準(zhǔn)化工作進(jìn)展期間,標(biāo)準(zhǔn)委員會充當(dāng)了一個(gè)重要的角色,其發(fā)布的C++標(biāo)準(zhǔn)之草案在正式標(biāo)準(zhǔn)發(fā)布之前,一直被作為過渡標(biāo)準(zhǔn)而存在。 </p><p> 2.4 Qt編程軟件</p><p> Qt是一個(gè)1991年由奇趣科技開發(fā)的跨
28、平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架。它既可以開發(fā)GUI程式,也可用于開發(fā)非GUI程式,比如控制臺工具和服務(wù)器。Qt是面向?qū)ο笳Z言,易于擴(kuò)展,并且允許組件編程。2008年,奇趣科技被諾基亞公司收購,QT也因此成為諾基亞旗下的編程語言工具。在發(fā)布Qt 4.6 的同時(shí),作為 Qt 開發(fā)跨平臺IDE的Qt Creator 也發(fā)布了更新版本。Qt Creator 1.3 和 Qt 4.6共同構(gòu)成的Qt SDK,包含了開發(fā)跨平臺應(yīng)用程序所需的全
29、部功能。Qt Creator是一個(gè)用于Qt開發(fā)的輕量級跨平臺集成開發(fā)環(huán)境。Qt Creator可帶來兩大關(guān)鍵益處,提供首個(gè)專為支持跨平臺開發(fā)而設(shè)計(jì)的集成開發(fā)環(huán)境 (IDE)并確保首次接觸Qt框架的開發(fā)人員能迅速上手和操作。Qt Creator包含了一套用于創(chuàng)建和測試基于Qt應(yīng)用程序的高效工具,包括:一個(gè)高級的C++代碼編輯器、上下文感知幫助系統(tǒng)、可視化調(diào)試器、源代碼管理、項(xiàng)目和構(gòu)建管理工具。Qt Creator在LGPL2.1版本授權(quán)
30、下有效,并且接受代碼貢獻(xiàn)。</p><p> 2.5 Linux ALSA音頻編程</p><p> 2.5.1 ALSA聲音編程介紹</p><p> ALSA表示高級Linux聲音體系結(jié)構(gòu)(Advanced Linux Sound Architecture)。它由一系列內(nèi)核驅(qū)動(dòng),應(yīng)用程序編譯接口(API)以及支持Linux下聲音的實(shí)用程序組成。這篇文章里,
31、我將簡單介紹 ALSA項(xiàng)目的基本框架以及它的軟件組成。主要集中介紹PCM接口編程,包括您可以自動(dòng)實(shí)踐的程序示例。 您使用ALSA的原因可能就是因?yàn)樗苄?,但它并不是唯一可用的聲音API。如果您想完成低級的聲音操作,以便能夠最大化地控制聲音并最大化地提高性能,或者如果您使用其它聲音API沒有的特性,那么ALSA是很好的選擇。如果您已經(jīng)寫了一個(gè)音頻程序,你可能想要為ALSA聲卡驅(qū)動(dòng)添加本地支持。如果您對音頻不感興趣,只是想播放
32、音頻文件,那么高級的API將是更好的選擇,比如SDL,OpenAL以及那些桌面環(huán)境提供的工具集。另外,您只能在有ALSA 支持的Linux環(huán)境中使用ALSA。 2.5.2 ALSA歷史</p><p> ALSA項(xiàng)目發(fā)起的起因是Linux下的聲卡驅(qū)動(dòng)(OSS/Free drivers)沒有得到積極的維護(hù)。并且落后于新的聲卡技術(shù)。Jaroslav Kysela早先寫了一個(gè)聲卡驅(qū)動(dòng),并由此開始了ALSA項(xiàng)
33、目,隨便,更多的開發(fā)者加入到開發(fā)隊(duì)伍中,更多的聲卡得到支持,API的結(jié)構(gòu)也得到了重組。 Linux內(nèi)核2.5在開發(fā)過程中,ALSA被合并到了官方的源碼樹中。在發(fā)布內(nèi)核2.6后,ALSA已經(jīng)內(nèi)建在穩(wěn)定的內(nèi)核版本中并將廣泛地使用。 2.5.3 數(shù)字音頻基礎(chǔ)</p><p> 聲音由變化的氣壓組成。它被麥克風(fēng)這樣的轉(zhuǎn)換器轉(zhuǎn)換成電子形式。模/數(shù)(ADC)轉(zhuǎn)換器將模擬電壓轉(zhuǎn)換成離散的樣本值。聲音以
34、固定的時(shí)間間隔被采樣,采樣的速率稱為采樣率。把樣本輸出到數(shù)/模(DAC)轉(zhuǎn)換器,比如擴(kuò)音器,最后轉(zhuǎn)換成原來的模擬信號。</p><p> 樣本大小以位來表示。樣本大小是影響聲音被轉(zhuǎn)換成數(shù)字信號的精確程度的因素之一。另一個(gè)主要的因素是采樣率。奈奎斯特(Nyquist)理論中,只要離散系統(tǒng)的奈奎斯特頻率高于采樣信號的最高頻率或帶寬,就可以避免混疊現(xiàn)象。 2.5.4 ALSA基礎(chǔ)</p><
35、;p> ALSA由許多聲卡的聲卡驅(qū)動(dòng)程序組成,同時(shí)它也提供一個(gè)稱為libasound的API庫。應(yīng)用程序開發(fā)者應(yīng)該使用libasound而不是內(nèi)核中的 ALSA接口。因?yàn)閘ibasound提供最高級并且編程方便的編程接口。并且提供一個(gè)設(shè)備邏輯命名功能,這樣開發(fā)者甚至不需要知道類似設(shè)備文件這樣的低層接口。相反,OSS/Free驅(qū)動(dòng)是在內(nèi)核系統(tǒng)調(diào)用級上編程,它要求開發(fā)者提供設(shè)備文件名并且利用ioctrl來實(shí)現(xiàn)相應(yīng)的功能。</p
36、><p> 為了向后兼容,ALSA提供內(nèi)核模塊來模擬OSS,這樣之前的許多在OSS基礎(chǔ)上開發(fā)的應(yīng)用程序不需要任何改動(dòng)就可以在ALSA上運(yùn)行。另外,libaoss庫也可以模擬OSS,而它不需要內(nèi)核模塊。</p><p> ALSA包含插件功能,使用插件可以擴(kuò)展新的聲卡驅(qū)動(dòng),包括完全用軟件實(shí)現(xiàn)的虛擬聲卡。ALSA提供一系列基于命令行的工具集,比如混音器(mixer),音頻文件播放器(aplay
37、),以及控制特定聲卡特定屬性的工具。 2.5.5 ALSA體系結(jié)構(gòu)</p><p> ALSA API可以分解成以下幾個(gè)主要的接口:</p><p> 1 控制接口:提供管理聲卡注冊和請求可用設(shè)備的通用功能 </p><p> 2 PCM接口:管理數(shù)字音頻回放(playback)和錄音(capture)的接口。本文后續(xù)總結(jié)重點(diǎn)放在這個(gè)接口上,因?yàn)樗情_發(fā)
38、數(shù)字音頻程序最常用到的接口。</p><p> 3 Raw MIDI接口:支持MIDI(Musical Instrument Digital Interface),標(biāo)準(zhǔn)的電子樂器。這些API提供對聲卡上MIDI總線的訪問。這個(gè)原始接口基于MIDI事件工作,由程序員負(fù)責(zé)管理協(xié)議以及時(shí)間處理。</p><p> 4 定時(shí)器(Timer)接口:為同步音頻事件提供對聲卡上時(shí)間處理硬件的訪問。&
39、lt;/p><p> 5 時(shí)序器(Sequencer)接口</p><p> 6 混音器(Mixer)接口 2.5.6 設(shè)備命名</p><p> API庫使用邏輯設(shè)備名而不是設(shè)備文件。設(shè)備名字可以是真實(shí)的硬件名字也可以是插件名字。硬件名字使用hw:i,j這樣的格式。其中i是卡號,j是這塊聲卡上的設(shè)備號。</p><p> 第一個(gè)
40、聲音設(shè)備是hw:0,0.這個(gè)別名默認(rèn)引用第一塊聲音設(shè)備并且在本文示例中一真會被用到。</p><p> 插件使用另外的唯一名字,比如 plughw:,表示一個(gè)插件,這個(gè)插件不提供對硬件設(shè)備的訪問,而是提供像采樣率轉(zhuǎn)換這樣的軟件特性,硬件本身并不支持這樣的特性。 2.5.7 聲音緩存和數(shù)據(jù)傳輸</p><p> 每個(gè)聲卡都有一個(gè)硬件緩存區(qū)來保存記錄下來的樣本。當(dāng)緩存區(qū)足夠滿時(shí),聲
41、卡將產(chǎn)生一個(gè)中斷。內(nèi)核聲卡驅(qū)動(dòng)然后使用直接內(nèi)存(DMA)訪問通道將樣本傳送到內(nèi)存中的應(yīng)用程序緩存區(qū)。類似地,對于回放,任何應(yīng)用程序使用DMA將自己的緩存區(qū)數(shù)據(jù)傳送到聲卡的硬件緩存區(qū)中。這樣硬件緩存區(qū)是環(huán)緩存。也就是說當(dāng)數(shù)據(jù)到達(dá)緩存區(qū)末尾時(shí)將重新回到緩存區(qū)的起始位置。ALSA維護(hù)一個(gè)指針來指向硬件緩存以及應(yīng)用程序緩存區(qū)中數(shù)據(jù)操作的當(dāng)前位置。從內(nèi)核外部看,我們只對應(yīng)用程序的緩存區(qū)感興趣,所以本文只討論應(yīng)用程序緩存區(qū)。</p>
42、<p> 應(yīng)用程序緩存區(qū)的大小可以通過ALSA庫函數(shù)調(diào)用來控制。緩存區(qū)可以很大,一次傳輸操作可能會導(dǎo)致不可接受的延遲,我們把它稱為延時(shí)(latency)。為了解決這個(gè)問題,ALSA將緩存區(qū)拆分成一系列周期(period)(OSS/Free中叫片斷fragments).ALSA以period為單元來傳送數(shù)據(jù)。</p><p> 一個(gè)周期(period)存儲一些幀(frames)。每一幀包含時(shí)間上一個(gè)
43、點(diǎn)所抓取的樣本。對于立體聲設(shè)備,一個(gè)幀會包含兩個(gè)信道上的樣本。分解過程:一個(gè)緩存區(qū)分解成周期,然后是幀,然后是樣本。左右信道信息被交替地存儲在一個(gè)幀內(nèi)。這稱為交錯(cuò) (interleaved)模式。在非交錯(cuò)模式中,一個(gè)信道的所有樣本數(shù)據(jù)存儲在另外一個(gè)信道的數(shù)據(jù)之后。</p><p> 2.5.8 Over and Under Run</p><p> 當(dāng)一個(gè)聲卡活動(dòng)時(shí),數(shù)據(jù)總是連續(xù)地在硬
44、件緩存區(qū)和應(yīng)用程序緩存區(qū)間傳輸。但是也有例外。在錄音例子中,如果應(yīng)用程序讀取數(shù)據(jù)不夠快,循環(huán)緩存區(qū)將會被新的數(shù)據(jù)覆蓋。這種數(shù)據(jù)的丟失被稱為over run.在回放例子中,如果應(yīng)用程序?qū)懭霐?shù)據(jù)到緩存區(qū)中的速度不夠快,緩存區(qū)將會"餓死"。這樣的錯(cuò)誤被稱為"under run"。在ALSA文檔中,有時(shí)將這兩種情形統(tǒng)稱為"XRUN"。適當(dāng)?shù)卦O(shè)計(jì)應(yīng)用程序可以最小化XRUN并且可以
45、從中恢復(fù)過來。 </p><p> 2.5.9 一個(gè)典型的聲音程序 </p><p> 使用PCM的程序通常類似下面的偽代碼:</p><p><b> 打開回放或錄音接口</b></p><p> 設(shè)置硬件參數(shù)(訪問模式,數(shù)據(jù)格式,信道數(shù),采樣率,等等)</p><p> wh
46、ile 有數(shù)據(jù)要被處理: </p><p> 讀PCM數(shù)據(jù)(錄音)</p><p> 或 寫PCM數(shù)據(jù)(回放)</p><p><b> 關(guān)閉接口</b></p><p> 2.6 QT的TCP網(wǎng)絡(luò)編程</p><p> TCP即Transmission Control Prot
47、ocol,傳輸控制協(xié)議。與UDP不同,它是面向連接和數(shù)據(jù)流的可靠傳輸協(xié)議。也就是說,它能使一臺計(jì)算機(jī)上的數(shù)據(jù)無差錯(cuò)的發(fā)往網(wǎng)絡(luò)上的其他計(jì)算機(jī),所以當(dāng)要傳輸大量數(shù)據(jù)時(shí),我們選用TCP協(xié)議。</p><p> TCP協(xié)議的程序使用的是客戶端/服務(wù)器模式,在Qt中提供了QTcpSocket類來編寫客戶端程序,使用QTcpServer類編寫服務(wù)器端程序。我們在服務(wù)器端進(jìn)行端口的監(jiān)聽,一旦發(fā)現(xiàn)客戶端的連接請求,就會發(fā)出ne
48、wConnection()信號,我們可以關(guān)聯(lián)這個(gè)信號到我們自己的槽函數(shù),進(jìn)行數(shù)據(jù)的發(fā)送。而在客戶端,一旦有數(shù)據(jù)到來就會發(fā)出readyRead()信號,我們可以關(guān)聯(lián)此信號,進(jìn)行數(shù)據(jù)的接收。</p><p> 2.7 RTP/RTCP協(xié)議</p><p> 實(shí)時(shí)傳輸協(xié)議RTP(Realtime Transport Protocol):是針對Internet上多媒體數(shù)據(jù)流的一個(gè)傳輸協(xié)議, 由
49、IETF(Internet工程任務(wù)組)作為RFC1889發(fā)布。RTP被定義為在一對一或一對多的傳輸情況下工作,其目的是提供時(shí)間信息和實(shí)現(xiàn)流同步。RTP的典型應(yīng)用建立在UDP(User Datagram Protocol,用戶數(shù)據(jù)包協(xié)議)上,但也可以在TCP(Transfer Control Protocol,傳輸控制協(xié)議)或ATM(Asynchronous Transfer Mode,異步傳輸模式)等其他協(xié)議之上工作。RTP本身只保證實(shí)
50、時(shí)數(shù)據(jù)的傳輸,并不能為按順序傳送數(shù)據(jù)包提供可靠的傳送機(jī)制,也不提供流量控制或擁塞控制,它依靠RTCP提供這些服務(wù)。</p><p> 實(shí)時(shí)傳輸控制協(xié)議RTCP(Realtime Transport Control Protocol):負(fù)責(zé)管理傳輸質(zhì)量在當(dāng)前應(yīng)用進(jìn)程之間交換控制信息。在RTP會話期間,各參與者周期性地傳送RTCP包,包中含有已發(fā)送的數(shù)據(jù)包的數(shù)量、丟失的數(shù)據(jù)包的數(shù)量等統(tǒng)計(jì)資料,因此,服務(wù)器可以利用這
51、些信息動(dòng)態(tài)地改變傳輸速率,甚至改變有效載荷類型。RTP和RTCP配合使用,能以有效的反饋和最小的開銷使傳輸效率最佳化,故特別適合傳送網(wǎng)上的實(shí)時(shí)數(shù)據(jù)。</p><p><b> 系統(tǒng)需求分析</b></p><p><b> 3.1 項(xiàng)目總述</b></p><p> 隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,網(wǎng)上辦公、網(wǎng)上購物、網(wǎng)上交友
52、等正在以飛快的速度走進(jìn)大眾的生活中,人們可以在網(wǎng)上做在現(xiàn)實(shí)生活中做的很多事情,而現(xiàn)實(shí)生活中最重要的一件事情就是交流,人與人的交流莫過于口頭直接進(jìn)行交流最為直觀最為快捷。在這個(gè)“互聯(lián)網(wǎng)世界”的今天,為了方便內(nèi)部人員進(jìn)行實(shí)時(shí)交流,共同解決工作生活中遇到的困難,為企事業(yè)以及其它的局域網(wǎng)用戶帶來方便</p><p> 此次開發(fā)的即時(shí)通訊軟件可以作為局域網(wǎng)的交流工具使用,通信的安全性不是高</p><
53、p> ,但要求信息的響應(yīng)速度要較快,讓用戶充分享受到網(wǎng)絡(luò)即時(shí)消息的方便和快捷。</p><p> 語音聊天是此即時(shí)通信系統(tǒng)的一個(gè)核心子模塊,它采用現(xiàn)代比較流行的網(wǎng)絡(luò)編程技術(shù),面向各類企事業(yè)部門等局域網(wǎng)用戶,實(shí)現(xiàn)實(shí)時(shí)語音捕獲,音頻數(shù)據(jù)壓縮與發(fā)送,音頻數(shù)據(jù)接收與回放等功能,從而達(dá)到了實(shí)時(shí)語音通訊的目的,方便內(nèi)部人員進(jìn)行實(shí)時(shí)交流,共同解決工作生活中遇到的困難,為企事業(yè)以及其它的局域網(wǎng)用戶帶來方便。</p
54、><p> 3.2 系統(tǒng)總體需求分析</p><p> 該即時(shí)通訊軟件由服務(wù)器和客戶端兩部分組成,基于Linux平臺開發(fā),采用TCP/IP通信協(xié)議,語音模塊采用g72a算法壓縮,通過RTP/RTCP協(xié)議進(jìn)行網(wǎng)絡(luò)傳輸。</p><p> 服務(wù)端是可以進(jìn)行監(jiān)聽,記錄客戶端請求和驗(yàn)證客戶端身份的合法性,并提供消息中轉(zhuǎn)服務(wù);客戶端程序面向?qū)嶋H用戶,它有必要的界面的按鈕,向
55、用戶提供網(wǎng)絡(luò)即時(shí)消息的功能。</p><p> 本即時(shí)通訊系統(tǒng)包含如下基本功能:</p><p><b> 客戶端:</b></p><p><b> 注冊用戶</b></p><p><b> 用戶登錄</b></p><p> 獲取好友列表
56、并顯示好友狀態(tài)</p><p><b> 文字聊天</b></p><p><b> 語音聊天</b></p><p><b> 查看和修改用戶信息</b></p><p><b> 連接服務(wù)器</b></p><p>&l
57、t;b> 服務(wù)端</b></p><p><b> 啟動(dòng)和停止服務(wù)器</b></p><p><b> 接收和回應(yīng)客戶端</b></p><p><b> 轉(zhuǎn)發(fā)用戶之間的消息</b></p><p><b> 系統(tǒng)總體設(shè)計(jì)</b>
58、;</p><p><b> 4.1 總體架構(gòu)</b></p><p> 正如前面所述,系統(tǒng)整體采用C/S架構(gòu)模式,但具體實(shí)現(xiàn)細(xì)節(jié),本系統(tǒng)是基于C/S模式下的三層體系架構(gòu),即系統(tǒng)可以劃為三層,分別對應(yīng)于數(shù)據(jù)庫服務(wù)層、聊天服務(wù)層、客戶層。</p><p> 其中數(shù)據(jù)庫服務(wù)層的主要工作是為聊天服務(wù)層提供數(shù)據(jù)存儲秘查詢的接口,并按設(shè)計(jì)的策略對數(shù)
59、據(jù)進(jìn)行管理。</p><p> 聊天服務(wù)層的主要作用是提供與客戶端的交互式接口,為其提供用戶登錄、注冊、注銷、聊天消息轉(zhuǎn)等服務(wù)。</p><p> 另外聊天服務(wù)層還有一個(gè)作用,是借助于數(shù)據(jù)庫服務(wù)層的接口,進(jìn)行數(shù)據(jù)的可靠性存儲與查詢。</p><p> 客戶層的主要作用是為用戶提供服務(wù)的操作接口,包括用戶登錄、用戶注冊、用戶聊天等服務(wù)??蛻魧又饕c聊天服務(wù)層進(jìn)行
60、交互。</p><p> 系統(tǒng)部署架構(gòu)如下圖:</p><p> 上圖是在宏觀層面上,展示了系統(tǒng)部署的場景,下面將從微觀層面入手,具體信息的流轉(zhuǎn)與處理入手,從每個(gè)功能的角度,講述系統(tǒng)的各個(gè)層是如何參與的。</p><p><b> 登錄功能</b></p><p><b> 注冊功能</b>
61、</p><p><b> 文本聊天功能</b></p><p><b> 語音聊天功能</b></p><p><b> 添加刪除好友功能</b></p><p><b> 4.2 服務(wù)器設(shè)計(jì)</b></p><p>
62、4.2.1 服務(wù)器設(shè)計(jì)原理</p><p> 在總體架構(gòu)設(shè)計(jì)上,對聊天服務(wù)層的功能進(jìn)行了界定,依照功能,聊天服務(wù)層(下面簡稱服務(wù)器端)的信息主要步驟如下。</p><p><b> 接收用戶請求信息</b></p><p> 解析用戶請求信息,根據(jù)不同的請求信息,執(zhí)行對應(yīng)的處理,并返回給客戶端相應(yīng)的回應(yīng)消息</p><
63、p> 向數(shù)據(jù)庫中存入相應(yīng)的信息</p><p> 每個(gè)用戶的請求,都會涉及到以上3個(gè)步驟,因此可以采用串行化的處理</p><p><b> 方式。</b></p><p> 4.2.2 服務(wù)器端的模塊</p><p> 根據(jù)上面的描述,服務(wù)端可以被劃成一個(gè)若干模塊。而各個(gè)模塊的定義如下所示:</p
64、><p><b> 數(shù)據(jù)接收與回應(yīng)模塊</b></p><p><b> 業(yè)務(wù)服務(wù)模塊</b></p><p> 業(yè)務(wù)服務(wù)模塊是具體的服務(wù)模塊,它由若干個(gè)子模塊,包括登錄子模塊、注冊子模塊、文本聊天模塊、語音聊天模塊、添加好友子模塊等。</p><p><b> 數(shù)據(jù)寫入模塊</
65、b></p><p><b> 數(shù)據(jù)寫入模塊對應(yīng)</b></p><p><b> 4.3 客戶端設(shè)計(jì)</b></p><p> 客戶端是采用QT進(jìn)行可視化的設(shè)計(jì),客戶端聊天服務(wù)器進(jìn)行交互,也是采用TCP的方式進(jìn)行通信,它也是由具體的業(yè)務(wù)模塊組成的。具體的業(yè)務(wù)模塊分為如下幾類:</p><p
66、><b> 登錄模塊</b></p><p><b> 注冊模塊</b></p><p><b> 文本聊天模塊</b></p><p><b> 語音聊天模塊</b></p><p><b> 添加刪除好友模塊</b>
67、;</p><p><b> 數(shù)據(jù)接收模塊</b></p><p><b> 其他輔助模塊</b></p><p> 4.4 通信協(xié)議設(shè)計(jì)</p><p> 在C/S網(wǎng)絡(luò)程序設(shè)計(jì)中,一個(gè)重要的工作是通信協(xié)議的設(shè)計(jì),一個(gè)良好的、可擴(kuò)展的通信協(xié)議是C/S項(xiàng)目成功的基礎(chǔ)。</p>&
68、lt;p> 當(dāng)前有很多種方式設(shè)計(jì)通信協(xié)議。例如,可以采用XML格式、Json格式,以及類似TCP/IP數(shù)據(jù)報(bào)文的格式。</p><p> 在本項(xiàng)目中采用的是第三種方式,按數(shù)據(jù)包的方式設(shè)計(jì)通信協(xié)議。</p><p> 通過前面的需求分析可以得知,系統(tǒng)本身通信協(xié)議要涉及到登錄、注冊、文本聊天、語音聊天、退出等情況。</p><p> 4.5 數(shù)據(jù)庫表設(shè)計(jì)&
69、lt;/p><p> 在本系統(tǒng)中涉及到3張表的設(shè)計(jì),分別為用戶信息表、好友表、臨時(shí)信息表,其中用戶信息表的作用是保存已注冊用戶的基本信息,用于處理用戶的登錄、注冊、狀態(tài);好友表用于記錄用戶之間的好友關(guān)系;臨時(shí)信息表用于記錄信息類型、發(fā)送者、接收者、文本聊天信息。</p><p> 在這三張表的設(shè)計(jì)如下所示。</p><p><b> 用戶信息表</
70、b></p><p><b> 系統(tǒng)詳細(xì)設(shè)計(jì)</b></p><p> 5.1 服務(wù)器詳細(xì)設(shè)計(jì)</p><p> 5.2 客戶端詳細(xì)設(shè)計(jì)</p><p> 5.2.1 連接服務(wù)器</p><p> 5.2.2 注冊模塊</p><p> 5.2.3 登錄模
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于linux平臺的局域網(wǎng)云監(jiān)控系統(tǒng)的分析與實(shí)現(xiàn)
- 基于linux平臺的im軟件
- 基于Linux平臺的局域網(wǎng)云監(jiān)控系統(tǒng)的分析與實(shí)現(xiàn).pdf
- 基于局域網(wǎng)的聊天軟件的設(shè)計(jì)與實(shí)現(xiàn)(畢業(yè)論文)
- 基于Android平臺局域網(wǎng)即時(shí)通訊軟件的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 局域網(wǎng)飛鴿傳書軟件的設(shè)計(jì)與實(shí)現(xiàn)
- 基于NP的可擴(kuò)展虛擬局域網(wǎng)的實(shí)現(xiàn).pdf
- 基于Android的無線局域網(wǎng)實(shí)時(shí)語音通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 局域網(wǎng)飛鴿傳書軟件的設(shè)計(jì)與實(shí)現(xiàn).doc
- 小型局域網(wǎng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于局域網(wǎng)的安全審計(jì)組件的設(shè)計(jì)與實(shí)現(xiàn)
- 可擴(kuò)展虛擬局域網(wǎng)驅(qū)動(dòng)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 無線局域網(wǎng)中NAS的軟件設(shè)計(jì)與實(shí)現(xiàn).pdf
- Linux下無線局域網(wǎng)安全認(rèn)證系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- _局域網(wǎng)監(jiān)聽軟件的設(shè)計(jì)與開發(fā).doc
- 基于無線局域網(wǎng)的Ad-Hoc仿真平臺的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 無線局域網(wǎng)的設(shè)計(jì)與實(shí)現(xiàn)論文
- 基于Winsock的局域網(wǎng)監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 局域網(wǎng)共享的實(shí)現(xiàn)
- 基于LINUX的無線局域網(wǎng)芯片驅(qū)動(dòng)程序的設(shè)計(jì)與開發(fā).pdf
評論
0/150
提交評論