2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  基于VC的語音傳輸系統(tǒng)的設(shè)計(jì)與開發(fā)</p><p><b>  摘 要</b></p><p>  隨著計(jì)算機(jī)應(yīng)用技術(shù)的快速發(fā)展和日益普及,網(wǎng)絡(luò)也遍及到我們生活的每個(gè)角落,為我們的學(xué)習(xí)和工作帶來極大的方便。很多人都使用過傳統(tǒng)的文字輸入聊天方式,與之不同的另外一種聊天方式就是語音聊天。主要對那些不會(huì)使用鍵盤的老年用戶和追求時(shí)尚的年輕人,語音聊

2、天是一種非常好的聊天方式,它能增加聊天雙方的親切感和真實(shí)感,語音聊天就涉及到語音的傳輸。</p><p>  本系統(tǒng)主要討論了Windows系統(tǒng)下網(wǎng)絡(luò)語音的傳輸,尤其是對網(wǎng)絡(luò)編程做了較深入的學(xué)習(xí)和應(yīng)用,并以語音聊天為例給出了應(yīng)用實(shí)例。本系統(tǒng)主要利用Windows系統(tǒng)下的API函數(shù)和SOCKET函數(shù)以及VC開發(fā)平臺的強(qiáng)大功能來實(shí)現(xiàn)。經(jīng)過半年多的努力,終于完成了語音傳輸系統(tǒng)的需求分析、模塊功能劃分、多媒體編程、服務(wù)器

3、-客戶端模型等。本系統(tǒng)可以實(shí)現(xiàn)網(wǎng)絡(luò)間文字、語音信息的傳輸。</p><p>  關(guān)鍵詞 信息傳輸;網(wǎng)絡(luò)編程;語音傳輸;多媒體</p><p>  The design and development of voice transmission based on VC</p><p><b>  Abstract</b></p>&

4、lt;p>  The Internet is more and more popular in our lives because of the development of computer technology. Internet helps us in study and work. Many people use the traditional input method to chat, but there is a ne

5、w method that we can speak to our friends in real-time. Voice chatting is developed for ones who do not know how to type, or the young people, it can increase the realistic and friendliness. </p><p>  This p

6、aper discusses the transmission of voice by network in windows operation system, such as voice chats. The system is programmed with API functions and Socket functions of the windows. After six months of effort, the voice

7、 chatting system was completed. This system includes requirements analysis, and functional modules, multimedia programming, server-client model. In network, the text and voice can be transported through this system . <

8、;/p><p>  Key words: Information transmission; Network programming; Voice transmission; Multimedia</p><p>  目 錄 </p><p><b>  論文總頁數(shù):19頁</b></p><p>

9、<b>  1引言1</b></p><p>  2語音傳輸系統(tǒng)需求分析1</p><p>  3開發(fā)工具與環(huán)境介紹2</p><p>  3.1Visual C++概述2</p><p>  3.1.1Visual C++簡介2</p><p>  3.1.2Visual

10、C++的發(fā)展過程2</p><p>  3.1.3Visual C++的特點(diǎn)3</p><p>  3.2Visual C++的集成開發(fā)環(huán)境3</p><p>  3.3Windows程序設(shè)計(jì)基礎(chǔ)4</p><p>  3.3.1概述4</p><p>  3.3.2消息處理函數(shù)4</p&g

11、t;<p>  3.3.3窗口的建立5</p><p>  3.3.4消息循環(huán)6</p><p>  4Windows網(wǎng)絡(luò)編程8</p><p>  4.1網(wǎng)絡(luò)和協(xié)議8</p><p>  4.2Winsock 接口9</p><p>  4.3服務(wù)器程序和客戶程序創(chuàng)建過程11&l

12、t;/p><p>  5語音傳輸系統(tǒng)功能實(shí)現(xiàn)13</p><p>  5.1語音模塊實(shí)現(xiàn)13</p><p>  5.2服務(wù)器和客戶端功能的實(shí)現(xiàn)14</p><p>  6系統(tǒng)功能的測試與分析15</p><p>  6.1語音聊天程序使用介紹15</p><p>  6.2測

13、試與分析16</p><p><b>  結(jié) 論16</b></p><p><b>  參考文獻(xiàn)17</b></p><p><b>  致 謝18</b></p><p><b>  聲 明19</b></p>

14、<p><b>  引言</b></p><p>  20世紀(jì)是計(jì)算機(jī)的世紀(jì),計(jì)算機(jī)及相關(guān)技術(shù)的快速發(fā)展令人目不暇接。伴隨著計(jì)算機(jī)技術(shù)的發(fā)展,網(wǎng)絡(luò)的發(fā)展更加迅猛,令人不禁有“只有想不到,沒有做不到”之感。網(wǎng)絡(luò)已經(jīng)成為最大的信息傳輸方式之一。在新的世紀(jì)里,我們更要掌握好計(jì)算機(jī)知識。隨著高新技術(shù)的不斷發(fā)展,計(jì)算機(jī)更新速度越來越快,計(jì)算機(jī)已經(jīng)逐漸溶入人們的生活。很難想象沒有計(jì)算機(jī)的現(xiàn)代

15、社會(huì)將變成一個(gè)什么樣子。計(jì)算機(jī)已經(jīng)和我們的生活息息相關(guān)。而可視化操作簡單的Microsoft Windows操作系統(tǒng)就越來越頻繁的出現(xiàn)在我們的工作學(xué)習(xí)中,給我們帶來了很多便利。隨著計(jì)算機(jī)的不斷發(fā)展,網(wǎng)絡(luò)技術(shù)也在不斷發(fā)展?,F(xiàn)在我們通過網(wǎng)絡(luò)進(jìn)行學(xué)習(xí)、討論、交流、游戲等等,網(wǎng)絡(luò)正逐漸成為我們身邊不可或缺的東西。那么要進(jìn)行交流,語言、文字是不可缺少的。如何進(jìn)行網(wǎng)絡(luò)間的語言文字交流?通過對Visual C++和Windows網(wǎng)絡(luò)編程技術(shù)的學(xué)習(xí),本

16、系統(tǒng)研制出一個(gè)能夠進(jìn)行網(wǎng)絡(luò)間語言文字交流的語音傳輸軟件。 </p><p>  Visual C++是一種可視化的、面向?qū)ο蟮腤indows開發(fā)語言,它具有易用、通用和開發(fā)效率高的特點(diǎn)。隨著微軟公司對他不斷的改進(jìn)以及計(jì)算機(jī)本身在性能上的迅速提高,使得Visual C++越來越適合于一般的應(yīng)用程序的開發(fā)。自從Visual C++ 6.0推出以來,已經(jīng)為非常多的開發(fā)人員所使用,一直是當(dāng)前最主流的開發(fā)工具之一。而Win

17、dows操作系統(tǒng)大家更是熟悉不過了。那么提到Windows編程就不能不提API。API是Application Programming Interface的簡寫,意思是應(yīng)用程序編程接口??梢园阉胂蟪梢粋€(gè)程序庫,提供各式各樣與Windows系統(tǒng)服務(wù)有關(guān)的函數(shù),例如CreateFile是用來創(chuàng)建文件的API函數(shù),C的標(biāo)準(zhǔn)庫函數(shù)create也提供了創(chuàng)建文件的函數(shù),但是他是靠調(diào)用CreateFile函數(shù)完成創(chuàng)建文件功能的。事實(shí)上,在Windo

18、ws下運(yùn)行的程序最終都是通過調(diào)用API函數(shù)來完成創(chuàng)建工作的,因此,可以把Win32 API看成是最底層的服務(wù)。本文所介紹的網(wǎng)絡(luò)語音傳輸程序就是一個(gè)在Windows環(huán)境下以Visual C++為編程語言的應(yīng)用程序。</p><p>  語音傳輸系統(tǒng)需求分析</p><p>  隨著現(xiàn)代計(jì)算機(jī)技術(shù)的不斷發(fā)展,多媒體已經(jīng)成為現(xiàn)代計(jì)算機(jī)不可缺少的功能,而計(jì)算機(jī)的音頻,視頻功能是其中最為重要的部分。

19、而隨著網(wǎng)絡(luò)的不斷發(fā)展,網(wǎng)絡(luò)已經(jīng)成為人們最重要的交流方式之一。計(jì)算機(jī)硬件的更新,特別是海量存儲設(shè)備和大容量內(nèi)存在PC機(jī)上的實(shí)現(xiàn),對音頻媒體進(jìn)行數(shù)字化處理早已經(jīng)成為可能。</p><p>  現(xiàn)在,企業(yè)、機(jī)關(guān)、學(xué)校都建立起了局域網(wǎng)。雖然可以通過文件共享的方式進(jìn)行通訊,但單使用這種方式,非常不方便。在網(wǎng)上鄰居里,只能看到機(jī)器名,不清楚對方是誰,也不知道對方機(jī)器里有什么資源可以共享,尤其當(dāng)局域網(wǎng)的機(jī)器很多時(shí),這種方式就更

20、加麻煩了。而文字聊天方式比較單一缺乏真實(shí)感,所以語音通信就有了必要。但是語音傳輸需要有很大的網(wǎng)絡(luò)帶寬,對于撥號上網(wǎng)用戶,語音傳輸仍然是奢侈品,不過對于局域網(wǎng)和寬帶用戶來說,是很不錯(cuò)的選擇,本系統(tǒng)就是研究的基于局域網(wǎng)的語音傳輸,并以語音聊天為例給出了實(shí)例。</p><p>  語音聊天方式一般有兩種,一種是專門的語音聊天室,采用Web方式,B/S結(jié)構(gòu),另外一中則是類似于QQ、MSN等聊天工具,采用C/S結(jié)構(gòu)。本設(shè)計(jì)

21、是采用的后者。TCP/IP網(wǎng)絡(luò)中兩個(gè)進(jìn)程間的相互作用的主機(jī)模式是客戶機(jī)/服務(wù)器模式(Client/Server model)。該模式的建立基于以下兩點(diǎn):1、非對等作用;2、通信完全是異步的??蛻魴C(jī)/服務(wù)器模式在操作過程中采取的是主動(dòng)請示方式,首先服務(wù)器方要先啟動(dòng),并根據(jù)請示提供相應(yīng)服務(wù)。</p><p>  綜上所述,做一個(gè)語音通信軟件是有必要的,也是能夠?qū)崿F(xiàn)的。</p><p><

22、b>  開發(fā)工具與環(huán)境介紹</b></p><p>  Visual C++概述</p><p>  Visual C++簡介</p><p>  VC是Microsoft公司的重要?dú)埰分弧狣eveloper Studio工具集的重要組成部分。他用來在Windows(包括95、98、NT、2000、XP等)環(huán)境下開發(fā)應(yīng)用程序,是一種功能強(qiáng)大、行

23、之有效的可視化編程工具。VC以可視化技術(shù)為基礎(chǔ),以C++語言為藍(lán)本,以眾多的集成工具為骨架,在計(jì)算機(jī)領(lǐng)域的諸多方面都發(fā)揮著重要的作用。VC提供了簡潔實(shí)用的開發(fā)環(huán)境,集成的工具集能讓用戶高效率地開發(fā)應(yīng)用程序。VC提供了MFC類庫,一般性的工作可以全部交給VC來完成,用戶只要在其基礎(chǔ)上做出自己想要實(shí)現(xiàn)的功能即可。VC完成目標(biāo)所花費(fèi)的時(shí)間要少得多。</p><p>  Visual C++的發(fā)展過程</p>

24、<p>  作為一種C/C++語言的集成開發(fā)環(huán)境(IDE),產(chǎn)生VC的最早的根源其實(shí)要追溯到DOS時(shí)代的Borland公司,當(dāng)初Borland公司開發(fā)的Turbo Pascal和Turbo C讓程序員們深刻感受到了把編輯器和編譯器集成在一起的IDE是多么的方便,微軟公司也看到了這一優(yōu)點(diǎn),于是相繼開發(fā)了Quick C和Microsoft C/C++等多個(gè)DOS版本的C/C++集成開發(fā)工具。隨著Windows的不斷成熟,Mic

25、rosoft公司決定放棄DOS下的開發(fā)工作,正式推出Windows下的VC 1.0,早期的VC功能并不怎么強(qiáng)大,使用起來也不方便,1.0版和1.5版都是16位編程工具。VC的革命性改變得益于Windows95的推出,從VC2.0開始,微軟公司又放棄了16位編程,以后的VC都只用于32位編程開發(fā),為了與MFC類庫的版本號保持一致,微軟公司跳過了版本3,直接推出了VC4.0,這個(gè)版本及修訂版4.2的部分界面風(fēng)格一直保留到VC6.0。從VC4

26、.0到VC6.0,VC的各種功能不斷增強(qiáng),MFC類庫的內(nèi)容也越來越豐富,現(xiàn)在利用VC開發(fā)應(yīng)用程序已經(jīng)是一種相對輕松的事情了。</p><p>  Visual C++的特點(diǎn)</p><p>  在VC發(fā)展的同時(shí),Borland公司也在不斷改進(jìn)他的C/C++開發(fā)工具,并相繼推出了Borland C++和C++ Builder等產(chǎn)品,其實(shí),現(xiàn)在的C++ Builder也是一個(gè)非常優(yōu)秀的開發(fā)工具

27、,但是基于下邊的幾點(diǎn)原因,我們可以看出VC有著不可比擬的優(yōu)越性:</p><p>  1 VC的核心——MFC類庫已經(jīng)是事實(shí)上的行業(yè)標(biāo)準(zhǔn),Borland自己開發(fā)的類庫也在向MFC看齊。</p><p>  2 VC與Visual Studio中的其他可視化開發(fā)工具緊密集成,可用于開發(fā)非常專業(yè)的應(yīng)用程序。</p><p>  3 VC的聯(lián)機(jī)幫助已經(jīng)被集成到MSDN庫中

28、去了,后者包含了微軟公司大部分產(chǎn)品的技術(shù)文檔和支持資料,內(nèi)容相當(dāng)豐富,是程序員不可多得的參考資料,現(xiàn)在MSDN庫隨著Visual Studio6.0一起發(fā)行,極大地方便了用戶。</p><p>  Visual C++的集成開發(fā)環(huán)境</p><p>  Visual Studio 6.0企業(yè)版一共有6張光盤,如果只安裝VC 6.0那么需要第一張光盤和MSDN庫。VC 6.0可以安裝在所有運(yùn)

29、行Windows 95/98/NT/2000/XP等的系統(tǒng)上。安裝按提示完成后,開始菜單的程序中應(yīng)生成Microsoft Visual Studio 6.0和Microsoft Developer Network兩個(gè)程序組。</p><p>  從Visual Studio 6.0的程序組中運(yùn)行VC6.0,便可啟動(dòng)VC6.0的開發(fā)環(huán)境——Developer Studio。每次運(yùn)行VC6.0時(shí),首先會(huì)彈出一個(gè)“Ti

30、p of the Day”的對話框,其中介紹有很多關(guān)于開發(fā)環(huán)境的使用方法以及編程調(diào)試方面的小技巧,如果不想看他,可以選擇在下一次啟動(dòng)時(shí)不再顯示。</p><p>  如圖3-1所示,VC6.0的窗口被分成了幾部分,最上邊是標(biāo)題條、菜單和工具欄,中間左邊的窗口是工作區(qū)窗口,右邊為文檔窗口,顯示正在編輯的文本文件(或資源),下方為輸出窗口和狀態(tài)欄。</p><p>  除了主菜單和工具欄外,V

31、C6.0開發(fā)環(huán)境還提供了大量的上下文關(guān)聯(lián)菜單,用鼠標(biāo)右鍵單擊窗口中的很多地方都會(huì)彈出一個(gè)關(guān)聯(lián)菜單,此菜單包含與被單擊項(xiàng)目相關(guān)的各種命令,從而可以加快一些常規(guī)操作的速度。</p><p>  VC啟動(dòng)之后,窗口中幾乎一切都是空白的,所以我打開了一個(gè)工程。中文版的VC++ 6.0,其工作界面如下:</p><p>  圖3-1 VC主窗口</p><p>  Windo

32、ws程序設(shè)計(jì)基礎(chǔ)</p><p><b>  概述</b></p><p>  Windows程序具有相對固定的結(jié)構(gòu),對編寫者而言,不需要書寫整個(gè)過程,大部分過程由系統(tǒng)完成。程序中只要按一定的格式填寫系統(tǒng)留給客戶的那一小部分。</p><p>  所需要完成的有:窗口類的定義、窗口的建立、消息函數(shù)的書寫、消息循環(huán)。</p><

33、;p><b>  消息處理函數(shù)</b></p><p>  Windows程序是事件驅(qū)動(dòng)的,對于一個(gè)窗口,它的大部分例行維護(hù)是由系統(tǒng)維護(hù)的。每個(gè)窗口都有一個(gè)消息處理函數(shù)。  在消息處理函數(shù)中,對傳入的消息進(jìn)行處理。系統(tǒng)內(nèi)還有它自己的缺省消息處理函數(shù)。  客戶寫一個(gè)消息處理函數(shù),在窗口建立前,將消息處理函數(shù)與窗口關(guān)聯(lián)。這樣,每當(dāng)有消息產(chǎn)生時(shí),就會(huì)去調(diào)用這個(gè)消息處理函數(shù)。</p&

34、gt;<p>  通常情況下,客戶都不會(huì)處理全部的消息,而是只處理自己感興趣的消息,其他的,則送回到系統(tǒng)的缺省消息處理函數(shù)中去。</p><p>  LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)</p><p><b>  {</b><

35、;/p><p>  switch (message)</p><p><b>  {</b></p><p><b>  case ...</b></p><p><b>  ...</b></p><p><b>  case ...</b

36、></p><p><b>  ...</b></p><p><b>  }</b></p><p>  return DefWindowProc (hwnd, message, wParam, lParam) ;</p><p><b>  }</b></p&g

37、t;<p><b>  窗口的建立</b></p><p>  客戶需要自己建立窗口,建立后會(huì)得到系統(tǒng)返回的窗口句柄(HWND),后繼的針對窗口的操作都針對句柄進(jìn)行。</p><p><b>  1.注冊窗口類</b></p><p>  建立窗口前,需要制定好這個(gè)窗口的相關(guān)屬性,最主要的就是將自己定義的消息

38、處理函數(shù)與窗口關(guān)聯(lián),其他的屬性還包括:菜單、圖標(biāo)等等。</p><p>  這個(gè)屬性指定步驟是通過指定"窗口類"來完成的。</p><p>  對于自己建立的窗口,這個(gè)"窗口類"需要自己制定,也即自己充一個(gè)WNDCLASS結(jié)構(gòu),然后向系統(tǒng)注冊。</p><p>  對于一些特殊窗口,如按鈕等控件,他們的行為是系統(tǒng)制定好了的,所

39、以不需要自己注冊,直接使用對應(yīng)的“窗口類”名稱就行了。</p><p><b>  2.建立窗口</b></p><p>  建立窗口時(shí),注冊的"窗口類"名稱作為參數(shù)傳入。</p><p>  這樣,當(dāng)有針對該窗口的消息時(shí),將調(diào)用“窗口類”中指定的消息處理函數(shù),在其中得到處理。</p><p>  在

40、應(yīng)用程序中使用對話框是很方便的,因?yàn)閷υ捒蚩梢詮哪0鍎?chuàng)建,而模板可以使用可視化資源編譯器進(jìn)行編譯,這就大大簡化了窗口界面的設(shè)計(jì)過程。同時(shí)為了簡化程序設(shè)計(jì),Windows在內(nèi)部也定義了許多窗口類,即常說的字窗口控件,應(yīng)用程序直接使用這些類名就可以創(chuàng)建子窗口。</p><p>  同子窗口控件類似,對話框的窗口函數(shù)也由User32.dll提供,所以在創(chuàng)建對話框之前不需要注冊窗口類。在創(chuàng)建對話框時(shí)并不需要調(diào)用Creat

41、eWindowEx函數(shù),而是調(diào)用了DialogBoxParam或CreateDialogBox函數(shù)。前一個(gè)函數(shù)用來創(chuàng)建模式對話框,后一個(gè)函數(shù)用來創(chuàng)建非模式對話框,它們都在內(nèi)部調(diào)用了CreateWindowEx函數(shù),使用的風(fēng)格、大小和位置等參數(shù)取自資源中定義的對話框模板。</p><p>  要?jiǎng)?chuàng)建對話框就要先創(chuàng)建對話框模板。對話框模板定義了對話框的基本屬性,這包括該對話框的寬度和高度及其中包含的控件。創(chuàng)建對話框模

42、板最簡單的方法是使用VC自帶的資源編譯器,使用VC++的“Insert/Resource”菜單命令,可以非常方便地向工程中加入對話框資源。</p><p><b>  消息循環(huán)</b></p><p>  系統(tǒng)會(huì)將針對這個(gè)程序的消息依次放到程序的“消息隊(duì)列”中,由程序自己依次取出消息,在分發(fā)到對應(yīng)的窗口中去。</p><p>  因此,建立窗口

43、后,將進(jìn)入一個(gè)循環(huán)。</p><p>  在循環(huán)中,取出消息、派發(fā)消息,循環(huán)往復(fù),直到取得的消息是退出消息。</p><p>  循環(huán)退出后,程序即結(jié)束。</p><p>  #include "stdafx.h"</p><p>  #include <windows.h></p><p><

44、;b>  //消息處理函數(shù)</b></p><p>  //參數(shù):窗口句柄,消息,消息參數(shù),消息參數(shù)</p><p>  LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)</p><p><b>  {</b><

45、/p><p>  //處理感興趣的消息</p><p>  switch (message)</p><p><b>  {</b></p><p>  case WM_DESTROY:</p><p>  //當(dāng)用戶關(guān)閉窗口,窗口銷毀,程序需結(jié)束,發(fā)退出消息,以退出消息循環(huán)</p>&

46、lt;p>  PostQuitMessage (0) ;</p><p>  return 0 ;</p><p><b>  }</b></p><p>  //其他消息交給由系統(tǒng)提供的缺省處理函數(shù)</p><p>  return ::DefWindowProc (hwnd, message, wParam,

47、lParam) ;</p><p><b>  }</b></p><p><b>  //應(yīng)用程序主函數(shù)</b></p><p>  //參數(shù):實(shí)例句柄、前一個(gè)實(shí)例的句柄、命令行參數(shù)、窗口顯示方式int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstan

48、ce,PSTR szCmdLine, int iCmdShow)</p><p><b>  {</b></p><p><b>  //注冊窗口類</b></p><p>  static TCHAR szAppName[] = TEXT ("HelloWin") ; //窗口類名稱</p&g

49、t;<p>  //定制"窗口類"結(jié)構(gòu)</p><p>  WNDCLASS wndclass ;</p><p>  wndclass.style = CS_HREDRAW | CS_VREDRAW ;</p><p>  wndclass.lpfnWndProc = WndProc ; //關(guān)聯(lián)消息處理函數(shù)</p>

50、<p>  wndclass.cbClsExtra = 0 ;</p><p>  wndclass.cbWndExtra = 0 ;</p><p>  wndclass.hInstance = hInstance ; //實(shí)例句柄</p><p>  wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION)

51、; //圖標(biāo)</p><p>  wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; //光標(biāo)</p><p>  wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); //畫刷</p><p>  wndclass.lpszMenuName =

52、 NULL ;</p><p>  wndclass.lpszClassName = szAppName; //類名稱</p><p><b>  //注冊</b></p><p>  if (!ReGISterClass (&wndclass))</p><p><b>  {</b>&l

53、t;/p><p>  MessageBox (NULL, TEXT ("RegisterClass Fail!"),</p><p>  szAppName, MB_ICONERROR) ;</p><p>  return 0 ;</p><p><b>  }</b></p><p

54、><b>  //建立窗口</b></p><p>  HWND hwnd ;</p><p>  hwnd = CreateWindow (szAppName, //窗口類名稱</p><p>  TEXT ("The Hello Program"), //窗口標(biāo)題</p><p>  WS_

55、OVERLAPPEDWINDOW, //窗口風(fēng)格</p><p>  CW_USEDEFAULT,</p><p>  CW_USEDEFAULT,</p><p>  CW_USEDEFAULT,</p><p>  CW_USEDEFAULT,</p><p><b>  NULL,</b>&

56、lt;/p><p><b>  NULL,</b></p><p>  hInstance, //實(shí)例句柄</p><p><b>  NULL);</b></p><p>  ShowWindow (hwnd, iCmdShow) ;</p><p>  UpdateWindo

57、w (hwnd) ;</p><p><b>  //消息循環(huán)</b></p><p><b>  MSG msg ;</b></p><p>  while (GetMessage (&msg, NULL, 0, 0)) //從消息隊(duì)列中取消息</p><p><b>  {&l

58、t;/b></p><p>  TranslateMessage (&msg) ; //轉(zhuǎn)換消息</p><p>  DispatchMessage (&msg) ; //派發(fā)消息</p><p><b>  }</b></p><p>  return msg.wParam ;</p>

59、<p><b>  }</b></p><p>  Windows網(wǎng)絡(luò)編程</p><p><b>  網(wǎng)絡(luò)和協(xié)議</b></p><p>  網(wǎng)絡(luò)是可以交換數(shù)據(jù)的互相連接的計(jì)算機(jī)的集合。網(wǎng)絡(luò)的類型很多,如LAN(局域網(wǎng))、WAN(廣域網(wǎng))、Internet。為了確保所有的傳輸平穩(wěn)地進(jìn)行,網(wǎng)絡(luò)建立在協(xié)議之上。

60、協(xié)議是一組規(guī)定,他描述了數(shù)據(jù)傳送的格式。</p><p>  用戶發(fā)送的信息要經(jīng)過各層協(xié)議的封裝,如圖4-1所示:</p><p><b>  應(yīng)用層</b></p><p><b>  TCP層</b></p><p><b>  IP層</b></p><

61、;p><b>  鏈路層</b></p><p>  圖4-1 TCP/IP協(xié)議棧</p><p>  TCP/IP是面向連接的協(xié)議。連接的兩個(gè)設(shè)備之間,每一方都使用他自己的IP地址和端口號。通常,一方稱為客戶,另外一方稱為服務(wù)器??蛻羰前l(fā)出請求方,服務(wù)器響應(yīng)他們。例如,當(dāng)打開網(wǎng)站時(shí),瀏覽器是客戶,WebServer是服務(wù)器。瀏覽器發(fā)出連接請求,初始化和服務(wù)器的

62、連接,請求指定的資源。服務(wù)器然后返回響應(yīng)和請求的數(shù)據(jù)。</p><p>  服務(wù)器通常是等待客戶連接,這叫做監(jiān)聽,這一般是在特定的IP地址和端口號進(jìn)行??蛻魞H在有需要時(shí)才啟動(dòng),因?yàn)榭蛻艨偸且粋€(gè)連接的發(fā)起者,信息的請求者。為了創(chuàng)建連接,客戶需要知道服務(wù)起正在監(jiān)聽的IP地址和端口號。</p><p>  服務(wù)器和客戶方都需要使用IP地址和端口號,但是服務(wù)器的IP地址和端口號一般都是固定的。在客

63、戶方,端口號并不重要,任何端口都可以使用。</p><p>  工作在軟件層的幾個(gè)協(xié)議,如HTTP、FTP、POP3、SMTP等,大多數(shù)是以服務(wù)器/客戶機(jī)方式工作的。例如,客戶產(chǎn)生請求,服務(wù)器響應(yīng)。請求和響應(yīng)數(shù)據(jù)的準(zhǔn)確格式由這些協(xié)議定義。</p><p>  Winsock 接口</p><p>  Winsock是處理網(wǎng)絡(luò)的Windows API。許多函數(shù)與BSD

64、 Unix中使用的Berkeley套接字函數(shù)是相同的。</p><p>  通信的雙方要建立連接,這個(gè)連接的終端就是套接字。客戶端和服務(wù)器端都有一個(gè)套接字,每個(gè)套接字與特定的IP地址和端口號關(guān)聯(lián)。</p><p>  幾乎所有的Winsock函數(shù)都在套接字上進(jìn)行操作,因?yàn)樘捉幼质沁B接的句柄。連接的兩端都要使用一貫套接字,它們與平臺無關(guān)。套接字是雙通的,也就是說在同一個(gè)套接字上既能夠接收也能

65、夠發(fā)送數(shù)據(jù)。</p><p>  套接字主要有兩種類型,一種是流套接字(SOCK_STREAM),另外一種是數(shù)據(jù)報(bào)套接字(SOCK_DGRAM)。流套接字是為需要可靠連接的應(yīng)用程序設(shè)計(jì)的。這些程序經(jīng)常使用連續(xù)的數(shù)據(jù)流。用于這種類型套接字的協(xié)議是TCP。流套接字最常用,一些眾所周知的協(xié)議如HTTP、TCP、SMTP、POP3等都使用它。</p><p>  數(shù)據(jù)報(bào)套接字使用UDP作為下層協(xié)議

66、,是無連接的,有一個(gè)最大緩沖區(qū)大小。它是為那些需要發(fā)送小數(shù)據(jù)包,并且對可靠性要求不高的應(yīng)用程序設(shè)計(jì)的。與套接字不同,數(shù)據(jù)包套接字并不保證數(shù)據(jù)會(huì)到達(dá)終端,也不保證他是以正確的順序到來的。數(shù)據(jù)報(bào)套接字傳輸效率相當(dāng)高,他經(jīng)常用于音頻或視頻應(yīng)用程序。對這些程序來說,速度比可靠性更加重要。</p><p>  另外,也存在一些不常用的套接字類型,如原始套接字(raw socket)等。</p><p&g

67、t;  因?yàn)閃insock要兼容幾個(gè)協(xié)議,所以必須使用通用的尋址方式。TCP/IP使用IP地址和端口號來指定一個(gè)地址,但是其他協(xié)議也許采用不同的形式。如果Winsock強(qiáng)迫使用特定的尋址方式,添加其他協(xié)議就不大可能。Winsock的第一個(gè)版本使用sockaddr結(jié)構(gòu)來解決此問題。</p><p>  Struct sockaddr</p><p>  { u_short sa_f

68、amily;</p><p>  Char sa_data[14];</p><p><b>  };</b></p><p>  如果僅僅使用互聯(lián)網(wǎng)地址家族(TCP/IP),Winsock已經(jīng)定義了sockaddr結(jié)構(gòu)的TCP/IP版本——sockaddr_in結(jié)構(gòu)。它們本質(zhì)上是相同的結(jié)構(gòu),但是第2個(gè)更容易操作。</p>

69、;<p>  Struct sockaddr_in{</p><p>  Short sin_family; // 地址家族</p><p>  U_short sin_port; // 端口號</p><p>  Struct in_addr sin_addr; //IP地址</p><p&

70、gt;  Char sin_zero[8]; //空字節(jié),要設(shè)為0</p><p><b>  };</b></p><p>  Sin_addr是IP地址(32位),他被定義為一個(gè)聯(lián)合來處理整個(gè)32位的值,兩個(gè)16位部分或者每個(gè)字節(jié)單獨(dú)分開。描述32位IP地址的in_addr結(jié)構(gòu)定義如下。</p><p>  Struct

71、in_addr{</p><p><b>  Union{</b></p><p>  Struct{u_char s_b1,s_b2,s_b3.s_b4;}S_un_b;</p><p>  Struct{u_short s_w1.s_w2;}s_un_w; </p><p>  U_long s_addr;</

72、p><p><b>  }s_un;</b></p><p><b>  };</b></p><p>  使用winsock編程的一般步驟是比較固定的,如下:</p><p>  1 winsock庫的裝入、初始化和釋放</p><p>  2套接字的創(chuàng)建和關(guān)閉</p&g

73、t;<p>  3綁定套接字到指定的IP地址和端口號</p><p>  4設(shè)置套接字進(jìn)入監(jiān)聽狀態(tài)</p><p><b>  5接受連接請求</b></p><p><b>  6收發(fā)數(shù)據(jù)</b></p><p>  服務(wù)器程序和客戶程序創(chuàng)建過程</p><p&g

74、t;  在現(xiàn)在的軟件開發(fā)中,軟件開發(fā)環(huán)境越來越多地涉及了網(wǎng)絡(luò)環(huán)境以及網(wǎng)絡(luò)下的C/S(Client/Server)模式。</p><p>  C/S模式,即客戶機(jī)/服務(wù)器模式興起于20世紀(jì)90年代初,到90年代中期達(dá)到鼎盛時(shí)期。C/S模式是第一個(gè)應(yīng)用于網(wǎng)絡(luò)的模式,它在擁有友好的用戶界面的基礎(chǔ)上,利用分布技術(shù)成功地提高了執(zhí)行效率和系統(tǒng)容量,從而得到了廣泛的應(yīng)用。</p><p>  C/S模式

75、的基本思想是把原先集中在一起的應(yīng)用劃分為功能不同的兩個(gè)部分,一個(gè)成為服務(wù)器軟件,用來響應(yīng)和提供固定的服務(wù);另一個(gè)被稱為客戶機(jī)軟件,用來向服務(wù)器端提請和要求某種服務(wù)。運(yùn)行服務(wù)器軟件的計(jì)算機(jī)被簡稱為服務(wù)器,而運(yùn)行客戶機(jī)軟件的計(jì)算機(jī)被成為客戶機(jī),從這個(gè)意義上來說,客戶機(jī)和服務(wù)器都是軟件意義上的概念,同時(shí)也是相對的概念。例如,一臺計(jì)算機(jī)運(yùn)行了某個(gè)網(wǎng)絡(luò)應(yīng)用的服務(wù)器軟件,它就成為這個(gè)應(yīng)用的服務(wù)器;如果同時(shí)它還在運(yùn)行另外一個(gè)軟件的客戶機(jī)程序,則它同時(shí)

76、又是另外一個(gè)應(yīng)用的客戶機(jī)。不過,因?yàn)榉?wù)器通常被設(shè)計(jì)為可以響應(yīng)多臺客戶機(jī)的請求,所以一般都工作在性能較強(qiáng)、配置較高的計(jì)算機(jī)上。</p><p>  服務(wù)器方創(chuàng)建監(jiān)聽套接字,并為他關(guān)聯(lián)一個(gè)本地地址(指定IP地址和端口號)。然后進(jìn)入監(jiān)聽狀態(tài)準(zhǔn)備接收客戶的連接請求。為了接受客戶的連接請求,服務(wù)器必須調(diào)用accept函數(shù)。</p><p>  客戶方創(chuàng)建套接字后即可調(diào)用connect函數(shù)去試圖連接

77、服務(wù)器監(jiān)聽套接字。當(dāng)服務(wù)起方接受函數(shù)返回后。連接函數(shù)也返回。此時(shí)客戶方使用socket函數(shù)創(chuàng)建套接字,服務(wù)器使用accept函數(shù)創(chuàng)建的套接字,雙方就可以進(jìn)行相互間的通信了。</p><p><b>  其過程圖如下: </b></p><p>  圖4-2 服務(wù)器程序和客戶程序的創(chuàng)建過程</p><p>  語音傳輸系統(tǒng)功能實(shí)現(xiàn)</p&g

78、t;<p>  本系統(tǒng)以語音聊天為例給出了應(yīng)用實(shí)例。</p><p><b>  語音模塊實(shí)現(xiàn)</b></p><p>  隨著計(jì)算機(jī)技術(shù)的發(fā)展,特別是海量存儲設(shè)備和大容量內(nèi)存在PC機(jī)上的實(shí)現(xiàn),對音頻媒體進(jìn)行數(shù)字化處理便成為可能。數(shù)字化處理的核心是對音頻信息的采樣,通過對采集到的樣本進(jìn)行加工,達(dá)成各種效果,這是對音頻媒體數(shù)字化處理的基本含義。</p

79、><p>  基本的音頻數(shù)字化處理包括以下幾種。</p><p>  1、不同采樣率、頻率、通道數(shù)之間的變換和轉(zhuǎn)換。其中變換只是將其視為另外一種格式,而轉(zhuǎn)換通過重新采樣來進(jìn)行,其中還可以根據(jù)需要采用插值算法以補(bǔ)償失真。</p><p>  2、針對音頻數(shù)據(jù)本身進(jìn)行的各種變換,如淡入、淡出、音量調(diào)節(jié)等。</p><p>  3、通過數(shù)字濾波算法進(jìn)行

80、的變換,如高通、低通濾波器。</p><p>  但是最基本、最常用的還是聲音的錄制和播放。作為一個(gè)語音傳輸軟件,聲音的錄制、保存、傳輸和播放都是必不可少的,也是最重要的一環(huán)。本軟件需要語音輸入、輸出功能。這些技術(shù)的實(shí)現(xiàn)借助了Windows系統(tǒng)提供的底層音頻API。</p><p>  MIDI的意思是樂器數(shù)字接口(Musical Instrument Digital Interface)

81、,它在微軟公司開發(fā)Windows系統(tǒng)以前就有的一個(gè)用于電子鍵盤的標(biāo)準(zhǔn)。MIDI定義了一個(gè)傳輸和存儲音樂信息的協(xié)議。它在多媒體音頻中占有重要的位置,是播放和錄制音樂的國際標(biāo)準(zhǔn),它確定了連接音樂設(shè)備的電纜線、硬件和通信協(xié)議。</p><p>  下邊將介紹程序的具體實(shí)現(xiàn)。</p><p>  對于錄入和播放的聲音存儲時(shí)必須以特定的格式才可以,本軟件的格式定義如下:</p><

82、;p>  m_soundFormat.wFormatTag=WAVE_FORMAT_PCM;</p><p>  m_soundFormat.nChannels=1;</p><p>  m_soundFormat.nSamplesPerSec=8000;</p><p>  m_soundFormat.nAvgBytesPerSec=16000;</p

83、><p>  m_soundFormat.nBlockAlign=2;</p><p>  m_soundFormat.cbSize=0;</p><p>  m_soundFormat.wBitsPerSample=16;</p><p>  只定義了聲音的格式是不夠的,要實(shí)現(xiàn)聲音的存儲還得對數(shù)據(jù)塊進(jìn)行定義,數(shù)據(jù)塊的定義采用如下結(jié)構(gòu)描述:<

84、;/p><p>  m_pWaveHdrIn[0].lpData=m_cBufferIn;</p><p>  m_pWaveHdrIn[0].dwBufferLength=MAX_BUFFER_SIZE;</p><p>  m_pWaveHdrIn[0].dwBytesRecorded=0;</p><p>  m_pWaveHdrIn[0]

85、.dwFlags=0;</p><p>  為了能夠進(jìn)行錄制和播放,還需要利用低級音頻函數(shù)——wave系列函數(shù)。對于播放過程,需要利用waveOutPrepareHeader函數(shù)準(zhǔn)備緩沖數(shù)據(jù)頭信息,然后調(diào)用函數(shù)waveOutWrite將音頻數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)寫到播放設(shè)備中去進(jìn)行播放。對于錄制過程,需要先調(diào)用waveInPrepareHeader進(jìn)行接收數(shù)據(jù)緩沖區(qū)的準(zhǔn)備工作,然后調(diào)用waveInAddBuffer函

86、數(shù)添加錄制數(shù)據(jù)緩沖區(qū),最后調(diào)用函數(shù)waveInStart進(jìn)行錄制。下邊將列出這些函數(shù)在源程序中的應(yīng)用:</p><p>  result=waveOutPrepareHeader(m_hWaveOut,&m_pWaveHdrOut[0],sizeof(WAVEHDR)); </p><p>  if (result!= MMSYSERR_NOERROR) </p>

87、<p><b>  {</b></p><p>  AfxMessageBox(_T("Cannot OutPrepareHeader !"));</p><p><b>  return;</b></p><p><b>  };</b></p><

88、;p>  If以后為信息出錯(cuò)警告,以下函數(shù)省略。</p><p>  result=waveOutWrite(m_hWaveOut,&m_pWaveHdrOut[0],sizeof(WAVEHDR)); </p><p>  result=waveInPrepareHeader(m_hWaveIn,&m_pWaveHdrIn[0],sizeof(WAVEHDR));

89、</p><p>  result=waveInAddBuffer(m_hWaveIn,&m_pWaveHdrIn[0],sizeof(WAVEHDR)); </p><p>  void CSound::Record()</p><p><b>  {</b></p><p>  waveInStart(m_h

90、WaveIn);//開始錄音</p><p><b>  }</b></p><p>  服務(wù)器和客戶端功能的實(shí)現(xiàn)</p><p>  服務(wù)器端與客戶端是程序與外界聯(lián)系的窗口。其主要功能實(shí)現(xiàn)如下:</p><p>  if(temp.m_tag==1&&m_dlg->m_willchating==F

91、ALSE)</p><p>  //如果有聲音過來并且本機(jī)的聲音設(shè)備已經(jīng)準(zhǔn)備好了則首先在本機(jī)發(fā)出聲音</p><p>  if (m_aSessionOut != NULL)</p><p><b>  {</b></p><p>  msg->Serialize(*m_aSessionOut);</p>

92、;<p>  m_aSessionOut->Flush();</p><p>  return TRUE;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>&

93、lt;p>  //對方關(guān)閉了連接 </p><p>  int CClientSocket::GetLocalHostName(CString &sHostName)//獲得本地計(jì)算機(jī)名稱</p><p>  int CClientSocket::GetIpAddress(const CString &sHostName, CString &sIpAddre

94、ss)//獲得本地IP</p><p>  以上為部分功能實(shí)現(xiàn)。其他實(shí)現(xiàn)詳見源文件。 </p><p>  系統(tǒng)功能的測試與分析</p><p>  語音聊天程序使用介紹</p><p>  語音聊天程序的使用方法如下:</p><p>  (1) 雙擊應(yīng)用程序圖標(biāo),將會(huì)彈出一窗口。</p><p

95、>  (2) 在窗口相應(yīng)位置填寫服務(wù)器IP地址和端口號,默認(rèn)IP地址為本機(jī)IP地址,默認(rèn)端口號為4000。</p><p>  (3) 如果是要建立服務(wù)器,點(diǎn)擊建立服務(wù)器按鈕,此時(shí)如果建立成功文本框會(huì)顯示“Server Has Been Set OK!”。如果失敗則會(huì)彈出警告窗口,請仔細(xì)檢查IP和端口號是否填寫正確。服務(wù)端運(yùn)行界面見圖5-1。</p><p>  (4) 如果要建立客

96、戶端,那么在填寫好服務(wù)器IP和端口號后點(diǎn)擊連接服務(wù)器按鈕。客戶端運(yùn)行界面見5-2。</p><p>  (5) 此時(shí),大家可以進(jìn)行文本聊天。如果想進(jìn)行語音聊天那么請點(diǎn)擊語音聊天按鈕,當(dāng)然你要有相應(yīng)的硬件設(shè)備——音箱(耳機(jī))和麥克風(fēng)。那么現(xiàn)在你就可以進(jìn)行語音聊天了。</p><p>  (6) 如果想停止語音聊天的話,那么請點(diǎn)擊停止語音聊天按鈕,此按鈕和語音聊天按鈕是同一個(gè)。</p&g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論