基于TCP的語音聊天通信系統(tǒng)試驗設(shè)計_第1頁
基于TCP的語音聊天通信系統(tǒng)試驗設(shè)計_第2頁
基于TCP的語音聊天通信系統(tǒng)試驗設(shè)計_第3頁
基于TCP的語音聊天通信系統(tǒng)試驗設(shè)計_第4頁
基于TCP的語音聊天通信系統(tǒng)試驗設(shè)計_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

一、試驗綜述設(shè)計目標(biāo)套接字〕進展編程。通信雙IP地址和端口號相關(guān)聯(lián)。本試驗承受通信系統(tǒng)。完成功能建立效勞器;連接效勞器;文字談天;語音談天;程序界面如下:1語音談天系統(tǒng)界面二、系統(tǒng)設(shè)計和整體架構(gòu)語音談天系統(tǒng)功能模塊圖語音談天通信系統(tǒng)語音談天通信系統(tǒng)聲音采集模塊聲音數(shù)據(jù)發(fā)送模塊聲音數(shù)據(jù)接收模塊聲音播放模塊2語音談天系統(tǒng)功能模塊圖利用套接字TCP網(wǎng)絡(luò)通信流程輸。socket調(diào)用得到一個socketInternetlisten調(diào)用指出等待效勞accept調(diào)用等待客戶端發(fā)起連接,一般是accept返回客戶的地址信息,并返回socket有一樣的特性,這時效勞端socketaccept返回后accept調(diào)用處等待另一個連接??蛻舳诉M程一般先使用socket調(diào)用得到一個socket描述符,然后使用connect向指定的效勞器上的指定端口發(fā)起連接,一旦連接成功返回,就說明已經(jīng)建立了與效勞器的連接,這時就可以通過socket描述符進展讀寫操作了。其34所示開頭創(chuàng)立套接字開頭創(chuàng)立套接字開頭創(chuàng)立套接字綁定套接字到效勞器接收連接信息輸入信息是是否退出完畢通信否發(fā)送信息承受應(yīng)答信息綁定套接字收聽套接字接收連接綁定套接字收聽套接字接收連接對象發(fā)送連接信息對象接收客戶信息推斷承受信息是否完畢是完畢通信否發(fā)送應(yīng)答信息語音談天的套接字實現(xiàn)效勞器Socket模塊的根本設(shè)計⑴創(chuàng)立套接字〔;⑵將套接字綁定到一個本地地址和端口上〔d;⑷將套接字設(shè)為監(jiān)聽模式,預(yù)備接收客戶懇求〔;連接套接字〔accept;⑹用返回的套接字和客戶端進展通信〔;⑺返回,等待另一客戶懇求;客戶端Socket模塊的根本設(shè)計⑴創(chuàng)立一個套接字〔;server端的連接;⑷和效勞器端進展通信〔send/recv〕;聲音的采集和播放模塊的實現(xiàn)錄音的預(yù)備工作主要有4給相應(yīng)的窗口,通知程序做相關(guān)處理,這內(nèi)存塊,并關(guān)閉錄音設(shè)備。播放的流程和錄音流程相像,所以不再介紹。IP中語音的連續(xù)性和延時性有直接關(guān)系,內(nèi)存越大,是說錄滿的內(nèi)存要準時返回,使得循環(huán)能夠順當(dāng)進展。三、關(guān)鍵模塊分析程序模塊劃分依據(jù)關(guān)鍵技術(shù)的分析,程序有如下幾個模塊:監(jiān)聽。SocketSocket的發(fā)送數(shù)據(jù)和接收數(shù)據(jù)進展消息處理。和播放聲音數(shù)據(jù)。Socekt消息。生成一個基于對話框的工程,該工程包含以下一些文件:,尤其是音頻響應(yīng)信息。網(wǎng)絡(luò)連接。括文字談天數(shù)據(jù)和語音談天數(shù)據(jù)。API,負責(zé)采集聲音數(shù)據(jù)和播放聲音數(shù)據(jù)。局部核心代碼分析中的核心代碼如下:#include“ServerSocket.h“#include“ClientSocket.h“#include“Sound.h“#include<afxmt.h>classCExample2_ChatRoomDlg:publicCDialog{public:voidProcessPendingAccept; //做效勞器端的時候用來處理socketvoidCloseSessionSocket; //關(guān)閉會話的socketvoidClearContent; //去除edit窗口的內(nèi)容voidOnClearconnection; //去除socket的連接public:boolm_bInit; //是否已經(jīng)網(wǎng)絡(luò)連接boolm_bClient; //客戶端還是效勞器端的表示CClientSocketm_clientsocket//假設(shè)應(yīng)用程序做客戶端,則使用這個socketCServerSocketm_pListenSocket;//假設(shè)應(yīng)用程序做效勞器端,則使用這個socket聽窗口CPtrListm_connectionList; //客戶端socketCStringm_sMsgList; //editCSoundm_sound;//音頻處理對象CMutexm_mutex;m_willchating;//需要進展鎖處理的一個對象//是否需要進展語音傳輸protected:afx_msgvoidOnInputText; //在edit窗口輸入文字的消息處理afx_msgvoidOnConnectserver; //連接到效勞器的消息處理afx_msgvoidOnSetserver; //設(shè)置為效勞器的消息處理afx_msgvoidOnSound; //開頭進展語音談天,它承受了一個dll對語音進展處理afx_msgvoidOnNewsend; //CSound//CSound中錄音的bufferafx_msgvoidWriteBufferFull(LPARAMlp,WPARAMwp);VoiceChat_jiajiaDlg.cpp中的核心代碼如下://做效勞器端時,對連接上的客戶端socket{CClientSocket*pSocket=newCClientSocket;if(m_pListenSocket.Accept(*pSocket)){CMessgmsg;msg.m_strText=“一個游客進入談天室了“;一個游客進入談天室了\n“;POSITIONpos;for(pos=m_connectionList.GetHeadPosition;pos!=NULL;){CClientSocket*t=(CClientSocket*)m_connectionList.GetNext(pos);t->SendMessage(&msg);}}}

pSocket->Init(this);deletepSocket;//做客戶端,連接到效勞器端的消息處理voidCVoiceChat_jiajiaDlg::OnConnectserver{if(!m_bInit){BYTEf0,f1,f2,f3;CStringname;CStringip;m_bClient=true;m_clientsocket.Create;if(m_clientsocket.Connect(ip,GetDlgItemInt(IDC_PORT))){}{}}}

m_clientsocket.Init(this);ConnectionSucceed“);m_bInit=true;m_clientsocket.Close;AfxMessageBox(“clientconnectionfailed“);m_bInit=false;//設(shè)置效勞器端的消息處理voidCVoiceChat_jiajiaDlg::OnSetserver{if(!m_bInit){m_bInit=true;if(m_pListenSocket.Init(GetDlgItemInt(IDC_PORT),this)==FALSE){return;}}}//語音談天按鈕的消息處理函數(shù)voidCVoiceChat_jiajiaDlg::OnNewsend{//TODO:Addyourcontrolnotificationhandlercodehereif(m_willchating==TRUE){}{}}

m_sound.Init(this);m_willchating=FALSE;CSingleLocklock(&m_mutex,TRUE);m_sound.StopRecord;m_willchating=TRUE;lock.Unlock;//錄音buffervoidCVoiceChat_jiajiaDlg::WriteBufferFull(LPARAMlp,WPARAMwp){m_sound.Play; //在本地發(fā)出聲音CSingleLocklock(&m_mutex,TRUE);CMessgmsg;msg.m_tag=1;if(!m_bClient) //效勞器端,發(fā)送聲音數(shù)據(jù)到全部的客戶端{POSITIONpos;for(pos=m_connectionList.GetHeadPosition;pos!=NULL;){CClientSocket*t=(CClientSocket*)m_connectionList.GetNext(pos);t->SendMessage(&msg);}}else //客戶端,發(fā)送聲音數(shù)據(jù)到效勞器端{m_clientsocket.SendMessage(&msg);}m_sound.FreeRecordBuffer;//buffer重置m_sound.FreePlayBuffer; //buffer重置lock.Unlock;}其他的一些如效勞器端Socket 類CserverSocket,客戶端Socket 類Csound類的核心代碼在程序文件夾中均可找到,在這里就不作一一解釋。四、測試報告VisualC+6.0對語音談天系統(tǒng)進展測試,具體測試步驟為:選定一臺主機即作為效勞器,又作為其中一個客戶端1。IP地址為此主ServerHasBeenSetOK!”的提示。XXConnectionSucceed”的提示,等待另一個客戶端的連接。2,運行程序,serverIP為效勞器IP地址。點擊“連接效勞器”按鈕,同樣會有彈出窗口提示“請輸入登錄1X2Xnd信息,開頭文字談天。在兩個客戶端上分別點擊“語音談天”按鈕,即可進展語音談天通信。假設(shè)要中斷語音談天,點擊“停頓語音談天“即可。談天功能。測試結(jié)果如下:效勞器端12建立連接開頭文字談天和語音談天五、試驗總結(jié)和展望VC++網(wǎng)絡(luò)通信編程的相關(guān)學(xué)問,深入體會原理,第一次將通信網(wǎng)絡(luò)相關(guān)學(xué)問用于實踐,我收獲了很多。通過這次編程,我學(xué)到了很多學(xué)問。如:Csocket類不是線程安全的。要使用CsocketCreat函數(shù)創(chuàng)立一個Socket句柄。,ReceiveFrom,和WSAE

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論