UDP點(diǎn)對(duì)點(diǎn)語(yǔ)音通信開(kāi)發(fā)文檔(word文檔良心出品)_第1頁(yè)
UDP點(diǎn)對(duì)點(diǎn)語(yǔ)音通信開(kāi)發(fā)文檔(word文檔良心出品)_第2頁(yè)
UDP點(diǎn)對(duì)點(diǎn)語(yǔ)音通信開(kāi)發(fā)文檔(word文檔良心出品)_第3頁(yè)
UDP點(diǎn)對(duì)點(diǎn)語(yǔ)音通信開(kāi)發(fā)文檔(word文檔良心出品)_第4頁(yè)
UDP點(diǎn)對(duì)點(diǎn)語(yǔ)音通信開(kāi)發(fā)文檔(word文檔良心出品)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、編號(hào):計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)說(shuō)明書(shū)題目:UDP點(diǎn)對(duì)點(diǎn)語(yǔ)音通信系別: 專業(yè): 學(xué)生姓名: 學(xué)號(hào): 指導(dǎo)教師:題目類型:理論研究 實(shí)驗(yàn)研究 工程設(shè)計(jì) 工程技術(shù)研究 軟件幵發(fā)2011年3月22日隨著計(jì)算機(jī)網(wǎng)絡(luò)的日益普及,人們通過(guò)網(wǎng)絡(luò)進(jìn)行交流顯得越來(lái)越重要,出現(xiàn)了很多語(yǔ)音 聊天軟件。 為了把所學(xué)知識(shí)用于實(shí)踐之中, 我利用 Eclipse 軟件平臺(tái), 利用 Datagram Socket 套接字和Datagram Packet數(shù)據(jù)包來(lái)發(fā)送用戶數(shù)據(jù),實(shí)現(xiàn)了基于UDp專輸協(xié)議的點(diǎn)對(duì)點(diǎn)語(yǔ)音 通信。UDP( User Datagram Protocol)是一種無(wú)連接 ,與TCP操作不同,計(jì)算機(jī)之間并不需要建立一個(gè)連

2、接,同時(shí),一個(gè)UDP應(yīng)用可同時(shí)作為應(yīng)用的客戶端或者服務(wù)器端,基于C/S但是模式。雖然UDF不提供可靠性,不保證能不能到達(dá)目的地,而且它沒(méi)有超時(shí)重發(fā)機(jī)制,正因?yàn)檫@樣,但是它的傳輸速度非???。所以作一個(gè)基于 UDP的局域網(wǎng)點(diǎn)對(duì)點(diǎn)語(yǔ)音是比較好的。因?yàn)榫钟蚓W(wǎng)中, 數(shù)據(jù)一般不會(huì)丟失,同時(shí)又可以達(dá)到很快的速度, 用戶使用起來(lái)比較方便。該程序主要完成了局域網(wǎng)中兩臺(tái)電腦之間語(yǔ)音通信,在做好這個(gè)前提的情況下,我也增加了文字聊天的功能,不過(guò)由于時(shí)間匆忙,界面看起來(lái)比較粗糙,不夠晚上。關(guān)鍵字:UDP協(xié)議,語(yǔ)音通信,In ternet引言 課設(shè)要求2.1 、課設(shè)目的2.2 、課設(shè)要求2.3 、課設(shè)開(kāi)發(fā)環(huán)境2.4 、課

3、設(shè)前準(zhǔn)備工作概要設(shè)計(jì)3.1 、需求分析3.2 、可行性分析3.3 、系統(tǒng)的總體結(jié)構(gòu)四、詳細(xì)設(shè)計(jì)4.1 、主要的設(shè)計(jì)細(xì)想4.2 、總體的流程圖4.3 、接收信息的過(guò)程程3.4 、發(fā)送消息的過(guò)程4.5 、發(fā)現(xiàn)文件的過(guò)程五、運(yùn)行調(diào)試和截圖5.1 、客戶端之間的聊天5.2 、客戶實(shí)現(xiàn)組播實(shí)現(xiàn)群聊5.3 、客戶端之間的文件傳輸六、課程設(shè)計(jì)體會(huì)6.1 、總結(jié)七、參考文獻(xiàn)八、附錄如今已進(jìn)入網(wǎng)絡(luò)化時(shí)代,就好像有句話說(shuō)的好,寧愿一天不吃飯,也不能一天不上網(wǎng)。從而可以看出網(wǎng)絡(luò)時(shí)代已經(jīng)悄悄來(lái)臨。網(wǎng)上購(gòu)物,網(wǎng)上從商,網(wǎng)上作業(yè),網(wǎng)絡(luò)課堂,網(wǎng)上聊 天等等, 社會(huì)已進(jìn)入信息時(shí)代。 由此而產(chǎn)生的聊天工具也越來(lái)越多, 語(yǔ)音聊天

4、系統(tǒng)的發(fā)展日 新月異。 網(wǎng)上聊天使現(xiàn)實(shí)距離變短, 加強(qiáng)了聯(lián)系, 同時(shí)通過(guò)制作該程序來(lái)更好的學(xué)習(xí)網(wǎng)絡(luò)軟 件的編程知識(shí)和鞏固計(jì)算機(jī)網(wǎng)絡(luò)知識(shí)。UDP 傳輸數(shù)據(jù)包需這次基于UDP點(diǎn)對(duì)點(diǎn)語(yǔ)音通信的課設(shè), 能夠?qū)崿F(xiàn)在局域網(wǎng)中兩臺(tái)電腦語(yǔ)音通信。但是實(shí) 現(xiàn)過(guò)程中,發(fā)現(xiàn)也解決好多問(wèn)題。比如,音頻捕捉以及怎么發(fā)送,利用 要注意的些什么問(wèn)題,怎么才能讓其不丟包; 音頻捕捉后如何讓它輸出等等。所以,這次課 設(shè)我們不僅能學(xué)習(xí)網(wǎng)絡(luò)編程知識(shí), 鞏固網(wǎng)絡(luò)理論知識(shí), 還能鍛煉我們分析問(wèn)題和解決問(wèn)題的 能力,為我們提供了一次實(shí)踐操作的機(jī)會(huì),也為以后的學(xué)習(xí)提供了寶貴的經(jīng)驗(yàn)。二、課設(shè)要求2.1 課設(shè)目的1) 利用所學(xué)的計(jì)算機(jī)網(wǎng)絡(luò)的理

5、論知識(shí)進(jìn)行基于UDP協(xié)議點(diǎn)對(duì)點(diǎn)語(yǔ)音通信,體會(huì)網(wǎng)絡(luò)協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)過(guò)程,以及專業(yè)技術(shù)人員所使用的基本方法和技巧;2) 熟悉相關(guān)應(yīng)用開(kāi)發(fā)工具,掌握網(wǎng)絡(luò)協(xié)議應(yīng)用開(kāi)發(fā)技術(shù);培養(yǎng)一定的自學(xué)能力和獨(dú)立分析問(wèn)題、解決問(wèn)題的能力;3) 對(duì)設(shè)計(jì)中遇到的問(wèn)題,能通過(guò)獨(dú)立思考、查閱資料、參考文獻(xiàn),尋求解決方案。2.2 課設(shè)要求(1)通過(guò)基于UDP的連接方式進(jìn)行局域網(wǎng)上的兩臺(tái)電腦的語(yǔ)音通信。2)客戶端具有圖形化界面2.3 課設(shè)開(kāi)發(fā)環(huán)境這次做的基于UDP的點(diǎn)對(duì)點(diǎn)語(yǔ)音通信程序的主要開(kāi)發(fā)環(huán)境包括:1)硬件環(huán)境: Intel P4 2.8G CPU1G DDF內(nèi)存2) 軟件環(huán)境: Microsoft Windows XP 操

6、作系統(tǒng)Eclipse8.5+JDK1.6Java 書(shū)2.4 課設(shè)前準(zhǔn)備工作在圖書(shū)館借閱有關(guān)計(jì)算機(jī)網(wǎng)絡(luò)和語(yǔ)音通信的書(shū)籍,同時(shí)我也再次翻閱了以前的籍和計(jì)算機(jī)網(wǎng)絡(luò)相關(guān)知識(shí),結(jié)合自己對(duì)UDP協(xié)議的了解和對(duì)java編程的認(rèn)識(shí),對(duì)這次課設(shè)進(jìn)行了詳細(xì)的功能分析和劃分。同時(shí)我在博客園,infoq 等網(wǎng)站論壇尋找解決問(wèn)題的方法,同時(shí)也積極同水平較高的同學(xué)請(qǐng)教。三、課設(shè)要求設(shè)計(jì)3.1 、需求分析局域網(wǎng)點(diǎn)對(duì)點(diǎn)語(yǔ)音聊天(UDp這個(gè)軟件能實(shí)現(xiàn)在兩臺(tái) Pc機(jī)之間用麥克風(fēng)進(jìn)行語(yǔ)音聊天, 并且通訊采用 UDP協(xié)議。Datagram Socket是基于TCP/IP協(xié)議之上的一個(gè)接口規(guī)范,它為 應(yīng)用層之間的通信提供了保障。3.2

7、 、可行性分析1 )環(huán)境可行性:因?yàn)槲覀兠總€(gè)人都有了自己的電腦,而且這次課設(shè)主要用到Eclipse 軟件的可以在Eclipse 軟件,所以我們只要在自己的電腦上安裝該軟件即可。沒(méi)有 網(wǎng)上免費(fèi)下載一個(gè),安裝上即可。2)經(jīng)濟(jì)可行性:我們要用到的資源和材料,圖書(shū)館都有,而且現(xiàn)在網(wǎng)上也有很多免費(fèi)的資源共享,所以,我們要花的成本并不高,經(jīng)濟(jì)上可行。3.3、系統(tǒng)的總體結(jié)構(gòu)本程序的總體功能結(jié)構(gòu)圖如下所示:個(gè)為UDP沒(méi)有嚴(yán)格的服務(wù)器方和客戶方,可以隨便定義一方為客戶方)(1 )點(diǎn)對(duì)點(diǎn)語(yǔ)音通信UDP服務(wù)器方 (UDP客戶機(jī)方)UDP客戶機(jī)方 (UDP服務(wù)器方)Datagram SocketDatagram So

8、cket1receive /rsendsend/rejceive關(guān)閉Socket關(guān)閉Socket四、詳細(xì)設(shè)計(jì)4.1主要設(shè)計(jì)思想是基于C/S模型下的點(diǎn)對(duì)點(diǎn)的實(shí)時(shí)語(yǔ)音通信系統(tǒng)的軟件。該系統(tǒng)主要分為波形音頻的采集回放、音頻數(shù)據(jù)分組及還原、語(yǔ)音傳輸三個(gè)模塊。音頻模塊主要由windows 提供的 wave系列函數(shù)完成。分組后即使在傳輸時(shí)丟包也不會(huì)丟失一整段聲音數(shù)據(jù)而只是造成聲音的部分失真,從而保證了聲音可以得到盡可能完整的還原,進(jìn)一步保證了正常實(shí)時(shí)的語(yǔ)音通信。傳輸采用了實(shí)時(shí)性強(qiáng)的無(wú)連接的UDP協(xié)議。在開(kāi)發(fā)時(shí)使用Eclipse開(kāi)發(fā)工具結(jié)合套接字來(lái)實(shí)現(xiàn)。本軟件的界面非常簡(jiǎn)單,易于操作,用戶可以輕松的和對(duì)方進(jìn)

9、行語(yǔ)音通信??傮w的流程圖用戶上線4.3、4.2、發(fā)送消息的過(guò)程運(yùn)行調(diào)試和截圖宋ismin夭! I坦送 關(guān)閉姫絕:遴I 共閉Ihgp I已 耳劉 力卻=上耳捉*樓舖月.3=億 My 2613-i些:23 CST EO1 11 T賤供 IK自KAM I 工質(zhì)I I六、課程設(shè)計(jì)體會(huì)對(duì)于這次課程設(shè)計(jì),一早覺(jué)得語(yǔ)音通信應(yīng)該是比較簡(jiǎn)單的,后來(lái)真正上手后發(fā)現(xiàn)音頻處理那一塊確實(shí)比較難,但已經(jīng)選了這個(gè)題目, 所以就上網(wǎng)看了比較多資料,可以說(shuō)對(duì)我們所學(xué)知識(shí)的一個(gè)大總結(jié)吧,也是是一次寶貴的學(xué)習(xí)和自我提高的機(jī)會(huì),在實(shí)現(xiàn)過(guò)程需要自己不斷的思考,查閱資料,調(diào)試這樣一個(gè)循序漸進(jìn)的過(guò)程,也正是因?yàn)檫@樣的實(shí)踐才把我們所學(xué)的很多

10、專業(yè)基礎(chǔ)知識(shí)教會(huì)融合在一起了,這可以說(shuō)是一個(gè)很難得的機(jī)會(huì)。在做完這個(gè)課設(shè)的時(shí)候,我對(duì)自己做了一個(gè)總結(jié),覺(jué)得基礎(chǔ)知識(shí)非常重要,很多東西不能只看眼前, 要放眼未來(lái),只有基礎(chǔ)打牢了,才能更快,更容易的上手。所以說(shuō)大一大二學(xué)的數(shù)據(jù)結(jié)構(gòu)啊,一些數(shù)學(xué)之類的東西到了后面都非常有用,當(dāng)沒(méi)有用到的時(shí)候,是因?yàn)槲覀兯鶎W(xué)的知識(shí)太狹 隘了,太粗淺了。七、參考文獻(xiàn)2008-12-1著機(jī)械工業(yè)出版社2006-1-1語(yǔ)言程序設(shè)計(jì)Y.Daniel Liang著機(jī)械工業(yè)出版社網(wǎng)絡(luò)編程與分布式計(jì)算David Reilly Michael ReillyJavaJava計(jì)算機(jī)網(wǎng)絡(luò)An drew S.Ta nen baum著清華大學(xué)出

11、版社 2008-12-12九、附錄:核心代碼/下面是音頻輸岀的代碼:class Playback implements Runnable finalSourceDataLineint bufsize = 16384; / 緩存大小 line ;Thread thread ;DatagramSocketsocket ;byte buffer = DatagramPacket/* Creates a new instance of UDPPlay */ public Playback()new byte 1024;pac = new DatagramPacket( buffer , buffer

12、. length );public void start()thread = new Thread( this ); thread .setName( "Playback" ); thread .start();public void stop()thread = null ;public void run()trysocket = new DatagramSocket(20001);catch (Exception e)System.out .println( "Socket Error" );AudioFormat format =new Audio

13、Format(8000, 16, 2,/audioformat(float samplerate( 采樣率) , /int samplesizeinbits, int channels, boolean signed, booleantrue , true );DataLine.Info info = trynew DataLine.Info(SourceDataLine.class , format);lineline catch= (SourceDataLine) AudioSystem. getLine (info); .open(format, bufsize );(LineUnava

14、ilableException ex)return ;int numbytesread = 0; line .start();while ( thread != null )trysocket .receive( pac);numbytesread = pac.getData(). length ;line .write( pac.getData(), 0, numbytesread);/write(byte b, int off, int len)/Writes audio data to the mixer via this source data line catch (Exceptio

15、n e)break ;iflinelinelinethread != null ) line .drain();.stop();.close();= null ;音頻捕捉以及發(fā)送程序class Capture implements Runnable TargetDataLine line ;Thread thread ;DatagramPacket pacToSend;DatagramSocket soc;String ip ;/* Creates a new instance of UDPCapture */ public Capture(String ip)this . ip =ip;pu

16、blic void start()thread = new Thread( this ); thread .setName( "Capture" ); thread .start();public void stop()thread = null ;public void run()trysoc = new DatagramSocket();/ 建立輸出流 此處可以加套壓縮流用來(lái)壓縮數(shù)據(jù) catch (Exception ex) return ;AudioFormat format =new AudioFormat(8000, 16, 2,true , true );/au

17、dioformat(float samplerate, int samplesizeinbits, int channels, / boolean signed, boolean bigendian )class , format);DataLine.Info info = new DataLine.Info(TargetDataLine.tryline = (TargetDataLine) AudioSystem. getLine (info);/TargetDataLine 接口是 DataLine 接口的一種,通過(guò)它就可以直接從音頻硬件獲取數(shù)據(jù)了line .open(format, li

18、ne .getBufferSize();catch (Exception ex)return ;byte data =new byte 1024; / 跟下面的 1024應(yīng)保持一致int numbytesread = 0;line .start();while ( thread != null )numbytesread =line .read(data, 0, 1024);InetAddress.line line linetrypacToSend = new DatagramPacket(data,data. length ,getByName( ip ),20001);soc.send(

19、 pacToSend); / 寫入網(wǎng)絡(luò)流 catch (Exception ex)break ;.stop(); .close();= null ;監(jiān)聽(tīng)按鈕事件代碼 public void actionPerformed(ActionEvent e)if 內(nèi)容添加到(e.getSource()= send) / 如果是命令是發(fā)送則啟動(dòng)發(fā)送線程并且將要發(fā)送的display 面板中去String s;if ( write .getText().toString().equals("" )JOptionPane. showMessageDialog( null , "發(fā)

20、送的內(nèi)同不能為空 !" ," 注意 ",J0 ptio nPan e. INFORMATION_MESSAGEffl果發(fā)送內(nèi)容是空的則禁止發(fā)送elseDate().toString()+display .append( "n 老大 :" +(new"n" +write .getText(); / 這是顯示當(dāng)前時(shí)間 new SendThread().start();if(e.getSource()= close ) / 如果命令是關(guān)閉 則整個(gè)程序結(jié)束System. exit (0);if(e.getSource()= talk

21、 )/ 如果命令是語(yǔ)音聊天 進(jìn)行判斷 第一次點(diǎn)擊該命令的 時(shí)候是請(qǐng)求語(yǔ)聊第二次則是關(guān)閉語(yǔ)聊請(qǐng)求開(kāi)請(qǐng)求也要斷開(kāi)if( begin ) / 如果是第一次 則是請(qǐng)求語(yǔ)聊display .append( "n 正與對(duì)方建立連接! ");talk .setLabel( " 關(guān)閉語(yǔ)音 "); / 設(shè)置按鈕的內(nèi)容 begin=false ;new TalkRequestThread( "talkstart" ).start(); / 發(fā)出一個(gè)語(yǔ)音聊天 elsedisplay .append( "n 已經(jīng)斷開(kāi)連接! "); / 斷開(kāi)語(yǔ)音聊天 并且發(fā)出一個(gè)斷talk .setLabel( "

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論