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

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p><b>  1.緒論1</b></p><p>  1.1選題的意義1</p><p>  1.2網(wǎng)絡(luò)通信的研究現(xiàn)狀2</p><p>  1.3畢業(yè)設(shè)計解決的主要問題2</p><p>  2.C/S即

2、時網(wǎng)絡(luò)通信軟件的概述2</p><p>  2.1系統(tǒng)的概念2</p><p>  2.2可行性分析2</p><p>  2.3系統(tǒng)的關(guān)鍵技術(shù)3</p><p>  2.4系統(tǒng)的開發(fā)方法與開發(fā)工具4</p><p>  2.5 通信軟件流程分析5</p><p>  3.服務(wù)器端的

3、設(shè)計6</p><p>  3.1服務(wù)器端功能的設(shè)計6</p><p>  3.2服務(wù)器端功能框架圖7</p><p>  3.3服務(wù)器端的工作流程7</p><p>  3.4服務(wù)器端控件設(shè)計8</p><p>  3.5服務(wù)器端界面設(shè)計8</p><p>  4.客戶端功能設(shè)計

4、9</p><p>  4.1客戶端功能框架圖9</p><p>  4.2客戶端工作流程10</p><p>  4.3客戶端控件的設(shè)計11</p><p>  4.4客戶端界面的設(shè)計12</p><p>  5.網(wǎng)絡(luò)通信軟件代碼的實現(xiàn)14</p><p>  5.1網(wǎng)絡(luò)通信軟件服務(wù)

5、器端代碼的實現(xiàn)14</p><p>  5.2建立服務(wù)器代碼的實現(xiàn)14</p><p>  5.3實現(xiàn)文字與語音通信代碼的實現(xiàn)15</p><p>  5.4客戶端實現(xiàn)文件交換代碼的實現(xiàn)16</p><p>  6.通信軟件的測試17</p><p>  7.結(jié)論與展望18</p><p

6、><b>  7.1結(jié)論18</b></p><p><b>  7.2 展望18</b></p><p><b>  參考文獻(xiàn)19</b></p><p>  Abstract19</p><p>  基于C/S即時網(wǎng)絡(luò)通訊軟件的設(shè)計與實現(xiàn)</p>

7、<p>  內(nèi)容提要:敘述了傳統(tǒng)通信方式,新興網(wǎng)絡(luò)通信的現(xiàn)狀和優(yōu)缺點,重點講述了基于C/S的即時網(wǎng)絡(luò)通訊軟件的設(shè)計與實現(xiàn),設(shè)計工具采用微軟開發(fā)的Visual C++ 6.0中的Win32 SDK和MFC類庫。通過在服務(wù)器端安裝服務(wù)器程序,在客戶端安裝客戶端程序,實現(xiàn)了多個用戶之間的文字聊天、文件發(fā)送,并初步實現(xiàn)了語音聊天的功能。通過開發(fā)一個與實際應(yīng)用相結(jié)合的通信軟件深入學(xué)習(xí)和理解了軟件的初步開發(fā)流程。</p>

8、<p>  關(guān)鍵詞: 網(wǎng)絡(luò)通訊軟件 Client/Server 文件發(fā)送 語音聊天 Visual C++ </p><p>  DESIGINATION AND IMPLEMENTION OF REAL-TIME NETWORK COMMUNACATION SOFTWARE BASED ON C/S</p><p>  Abstract: This paper state

9、s the advantages and disadvantages between traditional and emerging ways of communication. It introduces mainly on the designation and implement of real-time network communication software based on C/S. The tool used to

10、develop this software is MFC and Win32 SDK of Microsoft Visual C++ 6.0. It implements text chatting, sending files and also some basic steps of voice chatting through installing the server and the client programs. The ar

11、ticle combines the reality usage o</p><p>  Keywords: Network Communication Software, Client/Server, File Transportation, Voice Chatting, Visual C++</p><p><b>  1. 緒論</b></p>

12、<p><b>  1.1選題的意義</b></p><p>  21世紀(jì)是信息的時代,人與人之間的交流越來越密切,傳統(tǒng)的通信方式,如電話,電報等在實時上雖仍占有一定的優(yōu)勢,但是在信息高速發(fā)展的今天,傳統(tǒng)通信方式由于其成本過高,方式單一的缺點,越來越暴露其弊端。</p><p>  傳統(tǒng)的通訊方式的缺點:</p><p> ?。?)

13、成本高。目前人們所使用的通訊方式普遍價格過高,移動通信的價格更是不菲。這就在某種程度上限制了用戶的使用和數(shù)量。作為用戶來講,消費水平是一個很重要的選擇標(biāo)準(zhǔn)。</p><p> ?。?)使用方式單一。我們現(xiàn)在使用的傳統(tǒng)通信方式主要是電話,電報,傳真等。這些方式只能聽到聲音或看到文字,用戶并不能感受到對方,缺乏身臨其境的感覺。</p><p> ?。?)傳輸數(shù)據(jù)量少。傳統(tǒng)的通訊方式的帶寬并不高

14、,所以傳輸?shù)臄?shù)據(jù)量大大受到限制。</p><p>  新興的網(wǎng)絡(luò)通訊的優(yōu)點:</p><p> ?。?)成本低。網(wǎng)絡(luò)具有價格便宜,對于大多數(shù)用戶來說,購買一臺電腦不僅可以成為日常的通信工具,更重要的是電腦可以作為很多方面的用途,如處理日常的文件,存儲個人的資料等,而網(wǎng)絡(luò)通訊僅僅是一個很小的附加功能,更由于隨著經(jīng)濟(jì)的發(fā)展,擁有電腦就像擁有電視機(jī)一樣普遍,電腦的價值已經(jīng)被普遍認(rèn)可。</p

15、><p> ?。?)方便快捷。網(wǎng)絡(luò)聊天非常方便,傳統(tǒng)的手機(jī)短信編輯相比電腦鍵盤來說具有很大的劣勢,電腦打字要更加地快速,同時網(wǎng)絡(luò)也可以進(jìn)行語音聊天,更加省去了輸入的麻煩。視頻聊天也是網(wǎng)絡(luò)通信的一個很大的優(yōu)勢,拉近了聊天雙方的距離,使交流更加親切。</p><p> ?。?)傳輸?shù)男畔⒘看?。和傳統(tǒng)的方式相比較,其數(shù)據(jù)量提高了數(shù)十倍,并且隨著科技的進(jìn)步,這種優(yōu)勢將會繼續(xù)擴(kuò)大。我國擁有世界上最多的網(wǎng)

16、絡(luò)用戶,目前正在進(jìn)行高速信息化建設(shè),因此對網(wǎng)絡(luò)的使用將會進(jìn)一步擴(kuò)大。</p><p>  網(wǎng)絡(luò)通訊軟件具有上述的優(yōu)勢,因此其發(fā)展的前景將是廣闊的,這也是研究它的意義</p><p><b>  所在。 </b></p><p>  1.2網(wǎng)絡(luò)通信的研究現(xiàn)狀</p><p>  當(dāng)前網(wǎng)絡(luò)通訊軟件在生活中的應(yīng)用非常廣泛,如我

17、們平時使用的QQ、MSN、Xychat等軟件,這些軟件給我們的通訊帶來了便利。隨著網(wǎng)絡(luò)的普及,人們對網(wǎng)絡(luò)的依賴性也越來越大。</p><p>  聊天軟件已經(jīng)得到人們的認(rèn)可,關(guān)于聊天軟件的實現(xiàn)技術(shù)也獲得了極大的突破,在實現(xiàn)最基本的文字聊功能后,人們更好的實現(xiàn)了語音聊天等帶有多媒體效果的通訊方式。同時,在聊天的過程中,向?qū)Ψ桨l(fā)送諸如圖片,音樂等文件也非常的方便,使用戶從單一枯燥的文字聊天轉(zhuǎn)向豐富多彩的多媒體聊天方式

18、。</p><p>  目前,國內(nèi)外對于聊天軟件的研究技術(shù)比較成熟,QQ作為中國聊天軟件的早期產(chǎn)品,已經(jīng)占據(jù)了國內(nèi)約70%的聊天軟件市場,同時創(chuàng)造了年產(chǎn)值幾百億的企業(yè),可見聊天軟件的地位和對人們的作用。我國經(jīng)濟(jì)現(xiàn)在正在處于高速發(fā)展的階段,中央將信息化的發(fā)展作為今后經(jīng)濟(jì)增長的主要促進(jìn)因素,網(wǎng)絡(luò)通訊軟件屬于信息產(chǎn)業(yè),因此在未來將獲得更好的發(fā)展。</p><p>  隨著計算機(jī)的應(yīng)用和網(wǎng)絡(luò)普及,

19、對計算機(jī)技術(shù)的研究將會更加深入,如當(dāng)前出現(xiàn)的人工智能和嵌入式等方面,網(wǎng)絡(luò)通訊也必將是以后研究的重點。作為在校學(xué)習(xí)計算機(jī)的大學(xué)生,學(xué)習(xí)網(wǎng)絡(luò)通信應(yīng)是必不可少的,無論使用VC,還是J2EE等編程平臺,有很多地方都會涉及到網(wǎng)絡(luò)編程,所以學(xué)習(xí)網(wǎng)絡(luò)應(yīng)用方面的知識是一個很好的聯(lián)系實際的例子,對于以后進(jìn)入工作及以后的學(xué)習(xí)也會是一個很好的鍛煉機(jī)會</p><p>  1.3畢業(yè)設(shè)計解決的主要問題</p><p&

20、gt;  本畢業(yè)設(shè)計“即時網(wǎng)絡(luò)通訊軟件的設(shè)計與實現(xiàn)”將解決的主要問題如下:</p><p> ?。?)實現(xiàn)用戶上下線管理,維護(hù)用戶的個人信息。</p><p>  (2)實現(xiàn)兩兩用戶之間的文字交流。</p><p>  (3)在文字聊天的基礎(chǔ)上增加了語音聊天,使用戶之間的通信方式更加靈活與方便。</p><p>  (4)添加了遠(yuǎn)程文件傳輸?shù)?/p>

21、功能,用戶可以將本地計算機(jī)的資源通過網(wǎng)絡(luò)發(fā)送聊天的對方,實現(xiàn)了資源的共享。</p><p>  2.C/S即時網(wǎng)絡(luò)通信軟件系統(tǒng)的概述</p><p><b>  2.1系統(tǒng)的概念</b></p><p>  C/S就是客戶機(jī)/服務(wù)器模型,客戶機(jī)下載客戶端程序并安裝,在服務(wù)器端安裝服務(wù)器軟件??蛻舳耸紫冗B接服務(wù)器,向服務(wù)器報告自己的數(shù)據(jù),然后可以

22、向服務(wù)器提出請求,由服務(wù)器根據(jù)請求的內(nèi)容進(jìn)行響應(yīng),從而實現(xiàn)了用戶之間的通訊。</p><p><b>  2.2可行性分析</b></p><p><b>  2.2.1 目標(biāo)</b></p><p>  即時網(wǎng)絡(luò)通訊軟件是一個集經(jīng)濟(jì)性、易用性、互動性于一身的通信平臺,在實際的通信中將受到越來越廣泛地應(yīng)用。網(wǎng)絡(luò)通訊作為一種

23、新的通信方式,將最大限度利用現(xiàn)有網(wǎng)絡(luò)資源,可以滿足不同用戶之間通信和資源共享的需要。使人們花費最小的代價來獲得最大的經(jīng)濟(jì)效益。</p><p>  2.2.2 經(jīng)濟(jì)上的可行性分析</p><p>  本軟件作為一個畢業(yè)設(shè)計的一個項目,無需開發(fā)經(jīng)費,在經(jīng)濟(jì)上是完全可以接受的,并且本軟件實施后可以顯著提高通信的效率,有助于更好的交流溝通,所以本系統(tǒng)在經(jīng)濟(jì)上是可行的。從軟件系統(tǒng)開發(fā)的成本—收益角

24、度方面,基于C/S的即時網(wǎng)絡(luò)通訊軟件的開發(fā)設(shè)計屬于一項低投入高效益的工作,可以大大減少傳統(tǒng)通信方式的成本,網(wǎng)絡(luò)通訊是計算機(jī)應(yīng)用的一個很小的功能,它的傳輸載體僅是網(wǎng)絡(luò)通道,同時它的應(yīng)用不會給網(wǎng)絡(luò)帶來任何損失,所以在經(jīng)濟(jì)上它是非常節(jié)約成本的。同時它可以僅在企業(yè)內(nèi)部網(wǎng)絡(luò)里運行,給內(nèi)部人員的交流帶來極大的方便,省去了撥打電話的時間與費用,總之,在經(jīng)濟(jì)上是完全可行的。</p><p>  2.2.3 技術(shù)可行性分析<

25、/p><p>  (1)計算機(jī)的應(yīng)用越來越廣泛,網(wǎng)絡(luò)也以十分迅速的方式在發(fā)展,各種硬件設(shè)施已經(jīng)比較便宜,絕大部分家庭或企業(yè)均可接受。通過網(wǎng)絡(luò)可以實現(xiàn)信息共享與管理、信息的發(fā)布與管理,從而方便使用者進(jìn)行信息交流和信息共享。</p><p> ?。?)現(xiàn)代計算技術(shù)、網(wǎng)絡(luò)技術(shù)的發(fā)展給通信方式帶來了翻天覆地的變化,以現(xiàn)有的技術(shù)已經(jīng)可以開發(fā)出功能強(qiáng)大的通訊軟件。</p><p>

26、  (3)開發(fā)人員具備良好的技術(shù)基礎(chǔ)和較強(qiáng)的學(xué)習(xí)能力,能較快掌握新技術(shù),有能力開發(fā)新軟件,在已有的知識基礎(chǔ)上實現(xiàn)網(wǎng)絡(luò)通訊軟件</p><p>  2.2.4社會環(huán)境可行性分析 </p><p>  隨著計算機(jī)網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,通信方式已經(jīng)漸漸從傳統(tǒng)方式向網(wǎng)絡(luò)方式轉(zhuǎn)變,人們對網(wǎng)絡(luò)的使用也非常多,尤其是青年一代對網(wǎng)絡(luò)的使用。通信軟件可以滿足人們在日常生活娛樂時的通信需求。</p&

27、gt;<p>  2.2.5 結(jié)論意見</p><p>  本通訊軟件的開發(fā).使得通信方式更加多樣化、節(jié)約化、高效化。同時.該系統(tǒng)較好的結(jié)構(gòu)、較全面的功能.使得本系統(tǒng)具備良好的實用價值。經(jīng)過可行性分析研究,本系統(tǒng)可立即著手組織開發(fā)。</p><p>  2.3系統(tǒng)的關(guān)鍵技術(shù)</p><p>  2.3.1網(wǎng)絡(luò)傳輸協(xié)議</p><p&

28、gt; ?。?)TCP傳輸協(xié)議。TCP協(xié)議是面向連接的協(xié)議,即在點點進(jìn)行連接之前必須首先建立數(shù)據(jù)通路,就向我們平時打電話一樣,在通話之前必須先撥號,等待對方的接聽以后才能進(jìn)行通話。它的數(shù)據(jù)傳輸采取的是同步方式,當(dāng)數(shù)據(jù)發(fā)送到對方時,必須等待接收方的應(yīng)答信號后才能繼續(xù)下一次的發(fā)送工作,即我們平時所說的“握手”方式。由于TCP協(xié)議采用的是這種連接方式,因此由它建立的連接,是可靠的,在網(wǎng)絡(luò)不是十分理想的情況下,速度犧牲很大,但是卻能夠保證所傳輸

29、的數(shù)據(jù)的正確性。</p><p> ?。?)UDP傳輸協(xié)議。UDP協(xié)議采用的是面向無連接的通信方式,它在通信前不需要提前建立通信鏈路,它是異步的,數(shù)據(jù)的發(fā)送比較迅速,不需要等待應(yīng)答信號。優(yōu)點是發(fā)送速度較快,但是在數(shù)據(jù)的一致性方面不好,在網(wǎng)絡(luò)差的情況下,容易丟失數(shù)據(jù)包。一般用于遠(yuǎn)程視頻等對一致性要求并不是很高的數(shù)據(jù)傳輸方面。</p><p>  2.3.2 音頻數(shù)據(jù)采集與播放技術(shù)</p

30、><p> ?。?)在語音聊天方面,要熟悉有關(guān)音頻數(shù)據(jù)的采集與播放的流程,下圖給出了詳細(xì)的音頻數(shù)據(jù)采集流程圖。</p><p>  圖1 音頻數(shù)據(jù)采集流程圖。</p><p>  2.4系統(tǒng)的開發(fā)方法與開發(fā)工具</p><p>  2.4.1 Visual C++ 6.0平臺概述</p><p>  關(guān)于Visual C

31、++ 6.0,是由微軟開發(fā)的成熟的工具平臺。Visual C++ 6.0包括Win32 SDK,MFC等,它也支持C語言程序的開發(fā),是一款使用非常廣泛的面向?qū)ο缶幊坦ぞ?。Visual C++ 6.0在開發(fā)基于C/S的軟件時具有自身的優(yōu)勢,但是Visual C++ 6.0與其他編程語言相比較具有一定的難度,要對其熟練的掌握,沒有長時間的應(yīng)用是不容易的。選擇使用Visual C++ 6.0的主要原因是微軟提供了Win32 SDK和MFC開發(fā)

32、包,它把所有使用的函數(shù)進(jìn)行了封裝,使用者不需要具有底層開發(fā)的知識便可以開發(fā)高質(zhì)量的應(yīng)用軟件。</p><p>  2.4.2 Visual C++ 6.0的特征</p><p>  (1)既支持面向過程的編程方式,同時主要支持面向?qū)ο蟮木幊谭绞健?lt;/p><p> ?。?)Visual C++ 6.0包含了微軟開發(fā)的MFC類庫和Win32 SDK,極大的方便了開發(fā)人

33、員的工作,能夠產(chǎn)生高質(zhì)量的軟件</p><p> ?。?)使用面廣,是一款應(yīng)用非常廣泛的開發(fā)平臺,它可以應(yīng)用在開發(fā)各種形式的軟件方面。</p><p> ?。?)學(xué)習(xí)起來較一般的語言有一定的難度,不容易掌握。</p><p> ?。?)高效率。Visual C++ 6.0采用一次編譯的方式,使得它在運行的實效性上,具有其他編程工具所不具備的優(yōu)勢。</p>

34、<p> ?。?)支持性好。其以Windows作為主要支持平臺。</p><p><b>  2.4.3開發(fā)環(huán)境</b></p><p>  操作系統(tǒng):Microsoft XP Service Pack2 </p><p><b>  程序語言:C++</b></p><p>  開發(fā)

35、環(huán)境:Visual C++ 6.0</p><p>  2.5 軟件通信流程分析</p><p>  在基于C/S模型的網(wǎng)絡(luò)通信中,服務(wù)器在整個系統(tǒng)的作用很關(guān)鍵,處于中心位置,客戶端的關(guān)鍵操作要經(jīng)由服務(wù)器來提供,下圖展示了C/S結(jié)構(gòu)的模型圖:</p><p>  圖2 C/S模型圖</p><p>  軟件系統(tǒng)的大概信息流程圖如下:<

36、/p><p><b>  圖3 通信流程圖</b></p><p>  圖3 描述了系統(tǒng)的通信流程,客戶端首先要登錄服務(wù)器來獲得所需要的數(shù)據(jù),服務(wù)器處于客戶端之間,它可以維護(hù)數(shù)據(jù)庫,管理客戶端,其中客戶端之間的文件傳輸在客戶端點與點之間直接進(jìn)行。 </p><p>  圖中采用的數(shù)據(jù)庫是Microsoft Access,首先它可以滿足小型系統(tǒng)對數(shù)據(jù)

37、庫的需求,其次它不需要過多的配置,而SQL Server一般是作為大型數(shù)據(jù)庫來應(yīng)用,它的配置操作要繁瑣的多。Visual C++ 6.0對Microsoft Access有著很好的支持,使用很少的代碼就可以實現(xiàn)數(shù)據(jù)庫的連接與存取等操作,這是它的優(yōu)勢所在。</p><p><b>  3.服務(wù)器端的設(shè)計</b></p><p>  3.1服務(wù)器端功能的設(shè)計</p&

38、gt;<p>  服務(wù)器作為處于本軟件的核心,具有多種功能,它維護(hù)了客戶端的信息和上下線管理信息,工作比較復(fù)雜,下面介紹服務(wù)器端的主要功能:</p><p>  (1)初始化機(jī)器。初始化工作包括:申請內(nèi)存空間用于和客戶端通信,建立客戶端連接數(shù)據(jù)庫,建立監(jiān)聽套接字,綁定端口,監(jiān)聽連接,維護(hù)客戶端連接出入的數(shù)據(jù)庫,初始化服務(wù)器的各個控件的值</p><p> ?。?)存儲客戶端的

39、信息。服務(wù)器和Microsoft Access數(shù)據(jù)庫結(jié)合,維護(hù)用戶的個人信息,包括ID、密碼、昵稱、姓名、年齡、地址等,同時還保存客戶端的IP信息。</p><p> ?。?)轉(zhuǎn)發(fā)語音聊天信息。服務(wù)器端對由客戶端發(fā)來的語音信息進(jìn)行監(jiān)聽,并發(fā)回其他客戶端,或做其他的處理。</p><p> ?。?)實現(xiàn)客戶端的上下線的管理。用戶的操作都反映在服務(wù)器的在線用戶列表中,通過此列表也為其他客戶端提

40、供在線用戶信息。</p><p>  3.2 服務(wù)器端功能框架圖 </p><p>  圖4 服務(wù)器功能框架圖</p><p>  圖4 顯示了服務(wù)器的主要的功能,服務(wù)器要處理部分作業(yè),用來為客戶端提供服務(wù)。其中,配置環(huán)境包括加載套接字庫,綁定端口,建立監(jiān)聽等。維護(hù)信息包括維護(hù)客戶端的用戶信息,向客戶端發(fā)送其他的客戶端信息。通信請求所需做的工作最多,服務(wù)器接收客戶端

41、發(fā)來的消息,進(jìn)行判斷,決定下一步操作。語音傳遞功能,由服務(wù)器將接收到的語音信息傳遞給其它客戶端。</p><p>  服務(wù)器功能的優(yōu)化設(shè)計:</p><p>  服務(wù)器作為客戶端之間的橋梁,從實際應(yīng)用的角度出發(fā),不應(yīng)該把客戶端所有的操作全部由服務(wù)器來承擔(dān),做這樣的優(yōu)化,一方面為了減輕服務(wù)器端處理的信息量,使服務(wù)器從繁重的任務(wù)中解脫出來,處理更加緊迫的任務(wù);另一方面,客戶端之間的一些不涉及到

42、服務(wù)器的操作,由客戶端之間采取點對點的方式來完成,這就可以減少數(shù)據(jù)傳遞的時間。比如在文件發(fā)送的時候,若采取將客戶端的數(shù)據(jù)發(fā)到服務(wù)器,然后再由服務(wù)器發(fā)回接收客戶端,這就會花費很多的時間,使用戶難以接受。</p><p>  3.3 服務(wù)器端的工作流程</p><p>  圖5 服務(wù)器的工作流程圖</p><p>  圖5顯示了詳細(xì)的服務(wù)器工作流程,服務(wù)器啟動以后建立

43、了兩個線程,其中一個用于監(jiān)聽客戶端的連接,以便維護(hù)在線用戶的數(shù)據(jù)庫,另外一個線程用于處理由客戶端發(fā)來的各種請求。如用戶刷新在線用戶列表,服務(wù)器則通過此線程將新的在線客戶端信息傳遞給該客戶端。</p><p>  3.4服務(wù)器端控件的設(shè)計</p><p>  服務(wù)器界面的控件屬性表如下所示:</p><p>  表1 服務(wù)器的控

44、件屬性表:</p><p>  3.5服務(wù)器端界面的設(shè)計</p><p>  圖6 服務(wù)器啟動界面</p><p>  圖6 顯示了服務(wù)器初始界面的設(shè)計,當(dāng)單擊了啟動按鈕以后,便可以在電腦上建立服務(wù)器,通過此程序來為客戶端的登錄做準(zhǔn)備,并為其提供服務(wù)。</p><p>  圖7 語音聊天服務(wù)器</p><p>  圖7

45、 顯示了語音聊天服務(wù)器的界面,系統(tǒng)將語音聊天服務(wù)器獨立出來,用來轉(zhuǎn)發(fā)客戶端之間的語音信息。獨立出來此模塊,有助于更好的實現(xiàn)語音通信。</p><p>  4. 客戶端的功能設(shè)計</p><p>  客戶端的工作也比較復(fù)雜,它具有如下基本功能:</p><p>  (1)創(chuàng)建文字信息接收線程,收發(fā)文字信息,可以實現(xiàn)客戶端之間的文字信息的通信。</p>&

46、lt;p>  (2)語音信息的收集與播放功能??蛻舳私邮諄碜苑?wù)器發(fā)來的語音信息,將信息存儲到本地內(nèi)存,然后播放,實現(xiàn)語音聊天??蛻舳司哂胁杉Z音信息的能力,采集后發(fā)送。</p><p>  (3) 客戶端之間的文件交換。設(shè)計了另外兩個線程,用于發(fā)送和接收文件。當(dāng)另一用戶請求文件發(fā)送時,先將此信息發(fā)送給對方,等待對方的確認(rèn)。若同意接收,由接收方新建一個接收線程,并連接發(fā)送方,由此可以實現(xiàn)文件的傳輸。在傳輸?shù)?/p>

47、過程中顯示文件發(fā)送的進(jìn)度。發(fā)送和接收文件獨立于文字聊天和語音聊天的功能,通過建立獨立的套接字,在另一個端口進(jìn)行綁定。</p><p>  4.1 客戶端的功能框架圖</p><p>  在客戶端的功能中,增加了文字聊天,文件發(fā)送和語音聊天,其功能圖如下所示:</p><p>  圖8 客戶端功能框架圖</p><p>  為了更好的完成上述功

48、能,對客戶端功能的實現(xiàn)采取如下優(yōu)化設(shè)計:</p><p>  文件交換功能采用點對點的方式,客戶端在登錄服務(wù)器以后,便保存了由服務(wù)器發(fā)來的在線的客戶端基本信息。當(dāng)發(fā)送文件時,直接調(diào)出該信息,建立一個線程,等待接收方的連接,連接成功后就可以進(jìn)行文件的傳輸。這種點對點的文件傳輸方式大大減少了所需的時間,使文件傳遞的更加迅速。</p><p>  語音聊天的功能采用了比較底層的波形處理API函數(shù)

49、,主要是考慮到底層函數(shù)對設(shè)備操作的方便性,及時性,底層的函數(shù)可以更好的處理傳遞來的語音數(shù)據(jù)。它將數(shù)據(jù)收集在設(shè)定的內(nèi)存緩沖區(qū)內(nèi),當(dāng)語音數(shù)據(jù)裝滿緩沖區(qū)時,便發(fā)出數(shù)據(jù)滿消息,然后調(diào)用播放函數(shù),如此循環(huán)控制,完成語音聊天。</p><p>  4.2客戶端工作流程</p><p>  當(dāng)用戶登錄服務(wù)器之后會新建一個線程,用于接收其他客戶端發(fā)來的請求或消息。若是接收到來自其它客戶端的消息則直接顯示在

50、聊天窗口上。若不是,此線程會檢測到包含在其中的請求命令,而決定下一步的操作。如接收到FILE 指令時,說明對方希望傳遞文件,則客戶端建立一個新的線程,用于雙方之間的文件交換。同樣,若是雙方進(jìn)行語音聊天或者和其他的客戶端之間進(jìn)行聊天,也會創(chuàng)建一個新的線程來連接,這就可以實現(xiàn)多人之間的點對點的通訊。</p><p>  圖9 客戶端工作流程圖</p><p>  圖9所示為客戶端的工作流程圖,

51、處于核心的處理線程接收外部請求,通過過濾處理后而建立相應(yīng)的線程,圖中線程1,線程2代指其它客戶端要進(jìn)行的工作,交由這些線程處理??蛻舳丝梢詣?chuàng)建很多個線程,直到到達(dá)聊天用戶的聊天上限為止。</p><p>  4. 3客戶端控件的設(shè)計</p><p>  表2 客戶端登錄頁面控件設(shè)計表</p><p>  下表列舉了客戶端

52、中聊天界面控件的屬性表:</p><p>  表3 聊天界面控件設(shè)計表</p><p>  4.4客戶端界面的設(shè)計</p><p>  用戶在只有圖10界面輸入正確的用戶名,密碼,和服務(wù)器的IP后,和服務(wù)器進(jìn)行通信,在通過登錄后才能顯示用戶的數(shù)據(jù)信息。</p><p>  圖10 客戶端登錄界面&

53、lt;/p><p>  客戶端主界面的設(shè)計:</p><p>  圖11 用戶列表界面</p><p>  圖11 界面用來顯示在線的用戶,用戶可以雙擊來和其他的用戶進(jìn)行聊天,文件發(fā)送或語音聊天。</p><p>  圖12 聊天對話框頁面</p><p>  圖12 是用戶之間進(jìn)行聊天的主界面,用戶之間發(fā)送的文字消息都可

54、以顯示在編輯框之中。</p><p>  圖13 修改資料頁面</p><p>  圖13 是用戶修改個人資料時顯示的界面,當(dāng)修改完資料后,點擊修改按鈕,就可以將新的個人資料發(fā)送給服務(wù)器,服務(wù)器進(jìn)行保存。</p><p>  圖14 語音聊天頁面</p><p>  圖14 是用戶之間語音聊天的界面,當(dāng)用戶按下語音聊天按鈕時,客戶端向服務(wù)

55、器發(fā)出連接,連接成功后,若對方同意此次語音請求,則雙方可以進(jìn)行通信。</p><p>  5. 網(wǎng)絡(luò)通訊軟件代碼的實現(xiàn)</p><p>  5.1 網(wǎng)絡(luò)通訊軟件服務(wù)器端代碼的實現(xiàn)</p><p>  系統(tǒng)使用的是MFC架構(gòu),大部分代碼均是繼承于MFC原有的類,在服務(wù)器的建立時,對文字聊天和語音聊天采用的是TCP傳輸協(xié)議。下面敘述建立工程的步驟:</p>

56、<p> ?。?)建立MFC工程:打開Visual C++ 6.0 ,選擇【文件】——【新建】</p><p> ?。?)在Project欄目下選擇MFC AppWizard,工程名輸入Server</p><p> ?。?)在下面的選擇步驟中,分別選擇,Dialog Based,選擇Windows Sockets Support,Static MFC DLL</p>

57、;<p> ?。?)完成即可建立一個標(biāo)準(zhǔn)的基于對話框的MFC程序。</p><p>  項目包含的主要文件如下:</p><p>  NetMsgClientDlg.cpp</p><p>  ChatDlg.cpp</p><p>  LoginDlg.cpp</p><p>  RegisterDlg

58、.cpp</p><p>  ShowUserInfoDlg.cpp</p><p>  TRAYICON.cpp</p><p>  Server.cpp</p><p>  ServerDlg.cpp</p><p>  ServerSocket.cpp</p><p><b> 

59、 Messg.cpp</b></p><p>  HandleMessg.cpp</p><p>  SendFile.cpp</p><p>  RecvFile.cpp</p><p>  Sound.cpp </p><p><b>  Server.rc</b></p&g

60、t;<p>  NetMsgClient.rc</p><p>  NetMSG.mdb </p><p>  5.2建立服務(wù)器代碼的實現(xiàn)</p><p>  CNetMsgServerDlg.cpp的部分關(guān)鍵代碼:</p><p>  //創(chuàng)建socket</p

61、><p>  if((sListen=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET)</p><p><b>  {</b></p><p>  AfxMessageBox("錯誤:create socket");<

62、/p><p>  WSACleanup();</p><p>  return -1;</p><p><b>  }</b></p><p><b>  //邦定主機(jī)地址</b></p><p>  inetAddr.sin_addr.s_addr=htonl(INADDR_

63、ANY);</p><p>  inetAddr.sin_family=AF_INET;</p><p>  inetAddr.sin_port=htons(SERVER_PORT);</p><p>  if(bind(sListen,(SOCKADDR*)&inetAddr,sizeof(inetAddr)) ==SOCKET_ERROR)</p&

64、gt;<p><b>  {</b></p><p>  AfxMessageBox("錯誤:bind in start");</p><p>  WSACleanup();</p><p>  return -1;</p><p><b>  }</b></

65、p><p><b>  //偵聽</b></p><p>  if(listen(sListen,5)!=0)</p><p><b>  {</b></p><p>  AfxMessageBox("錯誤:listen failed in start");</p>&

66、lt;p>  return -1;</p><p><b>  }</b></p><p>  g_serverSocket = sListen;</p><p>  dlg->m_list.InsertString(g_dwListCount++, "創(chuàng)建服務(wù)器成功");</p><p>

67、;  dlg->m_list.SetTopIndex(g_dwListCount-1);</p><p>  dlg->GetDlgItem(IDC_SERVER_BEGIN)->EnableWindow(FALSE);</p><p><b>  //創(chuàng)建處理線程</b></p><p>  HANDLE h_Handle;

68、</p><p>  if((h_Handle =CreateThread(NULL,0,ProcessThreadIO,NULL,0,&dwThreadID))==NULL)</p><p><b>  {</b></p><p>  PrintSystemError("不能創(chuàng)建線程");</p>&

69、lt;p>  return -1;</p><p><b>  }</b></p><p>  5. 3實現(xiàn)語音通信代碼的實現(xiàn)</p><p>  void CHandleMessg::OnReceive(int nErrorCode) </p><p><b>  {</b></p&g

70、t;<p>  CSocket::OnReceive(nErrorCode);</p><p><b>  do</b></p><p><b>  {</b></p><p>  CMessg temp;</p><p>  temp.Serialize(*m_Recvbit);&l

71、t;/p><p>  m_dlg->m_sMsgList+=temp.m_strText;</p><p>  m_dlg->SetDlgItemText(IDC_SERVERMONITOR,m_dlg->m_sMsgList);</p><p>  if(temp.m_tag==1&&m_dlg->m_voicechat==TR

72、UE) //語音數(shù)據(jù) memcpy(m_dlg->m_sound.m_cBufferOut,temp.m_buffer,MAX_BUFFER_SIZE);</p><p>  int linenum=((CEdit *)(m_dlg->GetDlgItem(IDC_SERVERMONITOR)))->GetLineCount();</p><p>  

73、((CEdit *)(m_dlg->GetDlgItem(IDC_SERVERMONITOR)))->LineScroll(linenum);</p><p>  for(POSITION pos=m_dlg->m_connectionList.GetHeadPosition();pos!=NULL;)</p><p><b>  {</b><

74、/p><p>  CHandleMessg * t = (CHandleMessg*)m_dlg->m_connectionList.GetNext(pos);</p><p>  if(t->m_hSocket!=this->m_hSocket)</p><p>  t->SendMessage(&temp);</p>&

75、lt;p><b>  }</b></p><p><b>  }</b></p><p>  while (!m_Recvbit->IsBufferEmpty());</p><p><b>  }</b></p><p>  5.4 客戶端文件交換代碼的實現(xiàn)&l

76、t;/p><p>  SendFile的部分代碼如下:</p><p><b>  //接收文件線程</b></p><p>  UINT threadRecvFile(LPVOID v)</p><p><b>  {</b></p><p>  //創(chuàng)建SOCKET結(jié)構(gòu)代碼省

77、略</p><p>  //開始接受文件文件信息</p><p>  if(recv(cliFileSock,(char *)&( dlg->m_streamFileInfo),sizeof( dlg->m_streamFileInfo),0) == SOCKET_ERROR)</p><p><b>  {</b><

78、/p><p>  AfxMessageBox("連接文件信息出錯!");</p><p>  dlg->GetDlgItem(IDC_SENDFILE)->EnableWindow(TRUE);</p><p>  closesocket (cliFileSock);</p><p>  return FALSE;

79、</p><p><b>  }</b></p><p><b>  //存儲文件為:</b></p><p>  CFileDialog saveFileDlg( FALSE,NULL,dlg->m_streamFileInfo.szFileTitle,</p><p>  OFN_HIDE

80、READONLY|OFN_OVERWRITEPROMPT,</p><p>  _T("所有 (*.*)|*.*|"));</p><p>  if(IDOK!=saveFileDlg.DoModal())</p><p><b>  {</b></p><p>  memset(buff,0,si

81、zeof(buff));</p><p>  sprintf(buff,"%s","NO\t\n");</p><p>  send(cliFileSock,buff,sizeof(buff),0);</p><p>  closesocket(cliFileSock);</p><p>  dlg-&

82、gt;GetDlgItem(IDC_SENDFILE)->EnableWindow(TRUE);</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  CString filePathname;</p><p>  filePath

83、name = saveFileDlg.GetPathName();</p><p><b>  //接受文件</b></p><p>  memset(buff,0,sizeof(buff));</p><p>  sprintf(buff,"%s","YES\t\n");</p><

84、p>  send(cliFileSock,buff,sizeof(buff),0);</p><p>  CFile destFile(filePathname, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);</p><p>  if(dlg->m_streamFileInfo.nFileSizeLow/

85、(1024*1024) != 0)</p><p><b>  {</b></p><p>  nfileSize = dlg->m_streamFileInfo.nFileSizeLow/(1024.0*1024.0);</p><p>  strPrompt.Format("正在接收文件[%s],大?。?.2fMB"

86、;,dlg->m_streamFileInfo.szFileTitle,nfileSize);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  nfileSize = dlg

87、->m_streamFileInfo.nFileSizeLow/(1024.0);</p><p>  strPrompt.Format("正在接收文件[%s],大小:%.2fKB",dlg->m_streamFileInfo.szFileTitle,nfileSize);</p><p><b>  }</b></p>

88、<p><b>  //循環(huán)接收文件</b></p><p>  UINT dwRead = 0;</p><p>  UINT dw = 0;</p><p>  while(dwRead<dlg->m_streamFileInfo.nFileSizeLow)</p><p><b> 

89、 {</b></p><p>  byte* data = new byte[MAX_BUFF_SIZE];</p><p>  memset(data,0,MAX_BUFF_SIZE);</p><p>  dw=recv(cliFileSock,(char *)data,MAX_BUFF_SIZE,0);</p><p>&l

90、t;b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  SetFileTime((HANDLE)destFile.m_hFile,&(dlg->m_streamFileInfo).ftCreationTime,<

91、/p><p>  &(dlg->m_streamFileInfo).ftLastAccessTime,&(dlg->m_streamFileInfo).ftLastWriteTime);</p><p>  destFile.Close();</p><p>  SetFileAttributes(dlg->m_streamFileIn

92、fo.szFileTitle,dlg->m_streamFileInfo.dwFileAttributes);</p><p>  strPrompt.Empty();</p><p>  strPrompt.Format("完成接收文件[%s]",dlg->m_streamFileInfo.szFileTitle);</p><p&

93、gt;  dlg->ShowMsg("系統(tǒng)",strPrompt);</p><p><b>  }</b></p><p>  dlg->m_progressFile.SetPos(0);</p><p>  dlg->m_progressFile.ShowWindow(FALSE);</p>

94、<p>  if(cliFileSock !=INVALID_SOCKET)</p><p>  closesocket(cliFileSock);</p><p>  dlg->GetDlgItem(IDC_SENDFILE)->EnableWindow(TRUE);</p><p>  AfxEndThread(0);</p&g

95、t;<p><b>  return 1;</b></p><p><b>  }</b></p><p>  6. 網(wǎng)絡(luò)通訊軟件的測試</p><p>  通訊軟件測試工作比較順利,可以實現(xiàn)文字和文件的傳輸,對于語音聊天,可以完成基本的語音傳輸與播放工作。但在測試過程中出現(xiàn)了很多問題,如語音通信上不夠清晰,

96、噪音過大,出現(xiàn)回聲,語音的響應(yīng)不夠及時。這是因為沒有對語音數(shù)據(jù)進(jìn)行壓縮與過濾處理,使得音頻數(shù)據(jù)在傳遞過程中不是很理想,是需要改進(jìn)的方面。文件傳輸功能目前對于文件的容量有一定的限制,對很大的文件的傳輸,出現(xiàn)了數(shù)據(jù)丟失的問題或者文件不能打開的錯誤。</p><p><b>  7. 總結(jié)與展望</b></p><p><b>  7.1總結(jié)</b>&

97、lt;/p><p>  經(jīng)過精心設(shè)計制作和反復(fù)地調(diào)試工作,基于C/S的即時網(wǎng)絡(luò)通訊軟件基本完成。軟件的功能包括:文字聊天、文件發(fā)送、語音聊天。可以滿足基本的通信交流的要求,方便了用戶。</p><p>  通過這次畢業(yè)設(shè)計,我深入學(xué)習(xí)和理解了軟件的開發(fā)流程,基本掌握了VC++開發(fā)工具,在軟件實現(xiàn)過程中我能認(rèn)真思考,不斷鉆研,在實際的開發(fā)中變換新的思路,提高了軟件的整體效率和質(zhì)量,如對服務(wù)器功能

98、的界定上,重新定義了服務(wù)器的工作任務(wù),使它更好的實現(xiàn)了橋梁的作用。在語音聊天的功能的實現(xiàn)上,創(chuàng)建了自己的類,對語音的采集與播放功能進(jìn)行了封裝,形成了一個獨立的模塊。用戶之間的各種通信,通過創(chuàng)建不同的進(jìn)程來完成,可以實現(xiàn)較多的工作。在軟件開發(fā)過程中也遇到了很多的問題,文件發(fā)送的實現(xiàn)花費了較多的時間,在剛開始做的時候,我采用的是發(fā)送客戶端先將數(shù)據(jù)發(fā)送到服務(wù)器,然后再由服務(wù)器傳回接收客戶端。但是每次在發(fā)送稍大一點的文件時都會非常的慢,同時丟失

99、一部分?jǐn)?shù)據(jù),導(dǎo)致文件不可用。后來,我研究了聊天軟件QQ的文件發(fā)送的功能,發(fā)現(xiàn)QQ的這項功能在本地計算機(jī)之間傳送文件特別的迅速,我認(rèn)為它肯定不是采取我的那種方法,因此我將文件發(fā)送改為點對點的方式,這樣實現(xiàn)就容易得多,從而成功地解決了這個問題。在今后的工作學(xué)習(xí)中,我仍會不斷的完善它,充實它,使之提供更方便、更準(zhǔn)確、更快捷,更全面的服務(wù)。</p><p>  由于時間和技術(shù)水平的緣故,本系統(tǒng)還存在著許多方面的工作尚未完

100、善。比如,實現(xiàn)的功能較少,只能滿足通信軟件的一般需求,系統(tǒng)在可靠性上相對較弱,在系統(tǒng)的更進(jìn)一步的實現(xiàn)階段,應(yīng)提高系統(tǒng)的正確性和穩(wěn)定性,以及系統(tǒng)的容錯性。另外,本系統(tǒng)只提供了一些基本的文件操作功能,這些功能還不能反應(yīng)應(yīng)用中的全貌,還需要進(jìn)一步地提高和完善。</p><p><b>  7.2 展望</b></p><p>  隨著寬帶的普及,即時通訊的內(nèi)涵也開始變化。與

101、過去的純文本交流不同,新型的即時通信業(yè)務(wù)融合了視頻、音頻交流等寬帶應(yīng)用元素。目前各種即時通信除提供了基本的即時互動交流外,還能提供視頻、語音通信服務(wù),在短信收發(fā)、文件共享、數(shù)據(jù)傳輸、游戲、娛樂、個性化設(shè)置等方面也都有大的開拓和創(chuàng)新。即時通訊軟件正在面臨第二次發(fā)展浪潮,即基于P2P技術(shù)的多媒體以及基于IP技術(shù)的通信。</p><p>  在未來的一段時間,即時網(wǎng)絡(luò)通訊軟件的發(fā)展將會更加迅速,更加趨于多樣化。從我國目

102、前的國情來看,信息產(chǎn)業(yè)是重點促進(jìn)發(fā)展的產(chǎn)業(yè),信息產(chǎn)業(yè)面臨著難得的機(jī)遇期。即時網(wǎng)絡(luò)通信軟件在普通大眾的生活之中必將越來越廣泛,對通訊軟件的功能和性能的要求也會越來越高。</p><p><b>  參考文獻(xiàn):</b></p><p>  [1] 周靄如,林偉健編著.《 C++程序設(shè)計基礎(chǔ)》[M].北京:電子工業(yè)出版社,2005年版,435頁</p>&l

103、t;p>  [2] 孫鑫,于安萍編著.《VC++深入詳解》[M].北京:電子工業(yè)出版社,2006年版,767頁</p><p>  [3] 四維科技,曹衍龍,劉海英編著.《Visual C++網(wǎng)絡(luò)通信編程實用案例精選》[M].北京:人民郵電出版社,2006年版,504頁</p><p>  [4] 尹立民,王興東主編,《Vsual C++ 6.0應(yīng)用編程150例》[M].:北京:電子

104、工業(yè)出版社,2004版,484頁</p><p>  [5] 唐彬,劉超編著,《Visual C++案例開發(fā)集錦》[M].北京:電子工業(yè)出版社,2005版,302頁</p><p>  [6] 楊富國主編 ,《Visual C++ 程序開發(fā)案例解析》[M].北京:清華大學(xué)出版社,北京交通大學(xué)出版社,2006版,352頁</p><p>  [7] 張越 等編著,《V

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論