色偷偷伊人-色偷偷综合-色无五月-色香蕉影院-色亚洲影院

基于P2P技術(shù)的語(yǔ)音通信及其在Delphi下的實(shí)現(xiàn)研究

所屬欄目:計(jì)算機(jī)網(wǎng)絡(luò)論文 發(fā)布日期:2010-09-18 09:52 熱度:

  摘要:P2P協(xié)議是由IETF定義的點(diǎn)對(duì)點(diǎn)的通信協(xié)議,用來(lái)取代串行鏈路互連網(wǎng)絡(luò)協(xié)議SLIP(SerialLineInternetProtocol),它為在點(diǎn)對(duì)點(diǎn)鏈路上直接相連的兩個(gè)設(shè)備之間提供一種傳送數(shù)據(jù)包的方法。文章闡述了P2P的基本原理,并在Delphi7平臺(tái)下實(shí)現(xiàn)了局域網(wǎng)的語(yǔ)音通信過(guò)程。
  
  一、引言
  P2P是一種網(wǎng)絡(luò)模型,在這種模型中所有的節(jié)點(diǎn)是對(duì)等的(稱(chēng)為對(duì)等點(diǎn)),各節(jié)點(diǎn)具有相同的責(zé)任與能力并協(xié)同完成任務(wù)。對(duì)等點(diǎn)之間通過(guò)直接互連共享信息資源、處理器資源、存儲(chǔ)資源甚至高速緩存資源等,無(wú)需依賴(lài)集中式服務(wù)器或資源就可完成。這種模式與當(dāng)今廣泛使用的客戶(hù)端/服務(wù)器(C/S)的網(wǎng)絡(luò)模式形成鮮明對(duì)比,C/S模式中服務(wù)器是網(wǎng)絡(luò)的控制核心,而P2P模式的節(jié)點(diǎn)則具有很高的自治性和隨意性。隨著像Napster、Gnutella這種信息共享應(yīng)用程序變得越來(lái)越流行,P2P技術(shù)受到人們的廣泛關(guān)注。實(shí)際上,P2P它可分為純粹的P2P和混合P2P兩類(lèi)。純粹的P2P模式是指所有參與的計(jì)算機(jī)都是對(duì)等點(diǎn),各對(duì)等點(diǎn)之間直接通訊,自始至終完全沒(méi)有中心服務(wù)器對(duì)對(duì)等點(diǎn)間的信息交換進(jìn)行控制、協(xié)調(diào)或處理。而混合P2P模式則依賴(lài)于中心服務(wù)器去執(zhí)行一些功能。
  P2P模式相對(duì)于C/S模式有一些主要優(yōu)點(diǎn)。P2P模式最主要的優(yōu)點(diǎn)就是資源的高度利用率。在P2P網(wǎng)絡(luò)上,閑散資源有機(jī)會(huì)得到利用,所有節(jié)點(diǎn)的資源總和構(gòu)成了整個(gè)網(wǎng)絡(luò)的資源,整個(gè)網(wǎng)絡(luò)可以被用作具有海量存儲(chǔ)能力和巨大計(jì)算處理能力的超級(jí)計(jì)算機(jī)。C/S模式下,即使客戶(hù)端有大量的閑置資源,也無(wú)法被利用。P2P模式相對(duì)于C/S模式的主要優(yōu)點(diǎn)有:
  (一)、可靠性高
  隨著節(jié)點(diǎn)的增加,C/S模式下,服務(wù)器的負(fù)載就越來(lái)越重,形成了系統(tǒng)的瓶頸,一旦服務(wù)器崩潰,整個(gè)網(wǎng)絡(luò)也隨之癱瘓。而在P2P網(wǎng)絡(luò)中,每個(gè)對(duì)等體都是一個(gè)活動(dòng)的參與者,每個(gè)對(duì)等點(diǎn)都向網(wǎng)絡(luò)貢獻(xiàn)一些資源,如存儲(chǔ)空間、CPU周期等。所以,對(duì)等點(diǎn)越多,網(wǎng)絡(luò)的性能越好,網(wǎng)絡(luò)隨著規(guī)模的增大而越發(fā)穩(wěn)固。
  (二)、基于內(nèi)容的尋址方式處于一個(gè)更高的語(yǔ)義層次
  因?yàn)橛脩?hù)在搜索時(shí)只需指定具有實(shí)際意義的信息標(biāo)識(shí)而不是物理地址,每個(gè)標(biāo)識(shí)對(duì)應(yīng)包含這類(lèi)信息的節(jié)點(diǎn)的集合。這將創(chuàng)造一個(gè)更加精煉的信息倉(cāng)庫(kù)和一個(gè)更加統(tǒng)一的資源標(biāo)識(shí)方法。
  (三)、信息在網(wǎng)絡(luò)設(shè)備間直接流動(dòng),高速及時(shí),降低中轉(zhuǎn)服務(wù)成本
  (四)、信息發(fā)布靈活
  但是,P2P也有不足之處。首先,P2P不易于管理,而對(duì)C/S網(wǎng)絡(luò),只需在中心點(diǎn)進(jìn)行管理。隨之而來(lái)的是P2P網(wǎng)絡(luò)中數(shù)據(jù)的安全性難于保證。因此,在安全策略、備份策略等方面,P2P的實(shí)現(xiàn)要復(fù)雜一些。另外,由于對(duì)等點(diǎn)可以隨意地加入或退出網(wǎng)絡(luò),會(huì)造成網(wǎng)絡(luò)帶寬和信息存在的不穩(wěn)定。
  二、P2P通信技術(shù)分析與設(shè)計(jì)方案
  
  圖1系統(tǒng)功能模型
  系統(tǒng)的基本模型是當(dāng)通信的雙方在通信之前必須進(jìn)行連接建立過(guò)程,即撥號(hào)。當(dāng)連接建立完成時(shí)即可進(jìn)行數(shù)據(jù)(本文為語(yǔ)音)包的傳輸,之后雙方之一可以申請(qǐng)斷開(kāi)連接,完成一次通信過(guò)程。其基本模型如圖1所示。
  三、點(diǎn)對(duì)點(diǎn)語(yǔ)音通信的實(shí)現(xiàn)
  (一)、實(shí)現(xiàn)思路
  IP層協(xié)議向上層(主要指?jìng)鬏攲樱┨峁┙y(tǒng)一的IP數(shù)據(jù)包,使得各種物理層的差異對(duì)上層協(xié)議不再存在。對(duì)下層提供標(biāo)準(zhǔn)的網(wǎng)絡(luò)接口。同時(shí),IP另外的功能還包含尋徑、數(shù)據(jù)塊的分組和片的重組、尋找新的路由、差錯(cuò)與控制、路徑報(bào)錯(cuò)等。IP層作為通訊子網(wǎng)的最高層,提供無(wú)連接的數(shù)據(jù)傳輸機(jī)制。它的協(xié)議很簡(jiǎn)單,不能保證傳輸?shù)目煽啃浴P協(xié)議是點(diǎn)到點(diǎn)的協(xié)議。IP層對(duì)等的實(shí)體之間的通信不用中間的機(jī)器。在本程序中只做了IP的打包及解包。
  該層為傳輸控制層提供可靠的面向連接的傳輸。面向連接是在通信之前建立鏈路,以確保通信的可靠性。建立連接是通過(guò)發(fā)送和接收雙方的三次握手協(xié)議來(lái)實(shí)現(xiàn)的:(假設(shè)A機(jī)向B機(jī)發(fā)出請(qǐng)求連接)第一次握手中,A機(jī)向B機(jī)發(fā)送連接請(qǐng)求;第二次,B機(jī)收到請(qǐng)求后,發(fā)送連接確認(rèn)信號(hào),其中包B的初始報(bào)文序號(hào)以及B對(duì)A的確認(rèn);第三次,A機(jī)向B機(jī)發(fā)送數(shù)據(jù),包含對(duì)B的初始序號(hào)的確認(rèn)。
  另外,作為應(yīng)用層與網(wǎng)際層的接口,它還提供報(bào)文的轉(zhuǎn)發(fā)等。將從應(yīng)用層接收來(lái)的數(shù)據(jù)按協(xié)議的標(biāo)準(zhǔn)進(jìn)行打包,再轉(zhuǎn)發(fā)給IP層;對(duì)于從IP層來(lái)的數(shù)據(jù),解包后送到應(yīng)用層。
  根據(jù)對(duì)TCP、PPP協(xié)議的剖析,該程序是在Winsocket的基礎(chǔ)上實(shí)現(xiàn)TCP/IP三層協(xié)議的模擬,包含應(yīng)用層到TCP層,再到IP層以及網(wǎng)絡(luò)接口層的模擬,其實(shí)也就是按這三層協(xié)議進(jìn)行報(bào)文的打包和解包。程序的編制是利用Delphi7提供的ClientSocket和ServerSocket將字符串類(lèi)型的數(shù)據(jù)在同一局域網(wǎng)內(nèi)發(fā)送。Socket通信在Windows中是排隊(duì)的形式,由操作系統(tǒng)處理,而且接收方和發(fā)送方相互協(xié)同工作,否則就會(huì)造成數(shù)據(jù)丟失。另外,和所有的通信編程一樣,SocketSocket編程也遵循數(shù)據(jù)分包傳送這一基本規(guī)則。也就是說(shuō),在Socket編程中,每次發(fā)送和接收一個(gè)包,以保證數(shù)據(jù)傳輸?shù)陌踩院头(wěn)定性,同時(shí)也不至于過(guò)多地占用系統(tǒng)資源。對(duì)于ClientSocket組件。它用于請(qǐng)求方。也就是說(shuō),它的動(dòng)作是主動(dòng)地建立連接。ServerSocket組件用于響應(yīng)方,它的動(dòng)作是偵聽(tīng)以及被動(dòng)接受連接。組件ClientSocket的屬性是相對(duì)靜態(tài)的,它和ServerSocket之間只是連接和斷開(kāi)的關(guān)系。并且僅當(dāng)ServerSocket對(duì)其接受才表示建立連接。組件ServerSocket的屬性是動(dòng)態(tài)的。伴隨著一個(gè)新的ClientSocket與之建立連接的同時(shí),就會(huì)產(chǎn)生一個(gè)新的Socket與該ClientSocket對(duì)應(yīng),保持單獨(dú)的連接,進(jìn)行單獨(dú)的通信。因此,在同一個(gè)ServerSocket中,可以與多個(gè)ClientSocket保持同時(shí)連接和各自獨(dú)立的通信。ServerSocket的屬性Socket。ActiveConnections用于表示客戶(hù)端連接的數(shù)量;屬性Socket。Connections[Index]用于訪問(wèn)單個(gè)與ClienSocket連接的Socket。在獨(dú)立的ClientSocket中,屬性Socket。Data是一個(gè)指針,缺省值是nil;在ServerSocket的每個(gè)獨(dú)立的Socket。Connections[Index]中,屬性Data也是一個(gè)指針,缺省值是nil。因此,可以通過(guò)該指針建立并保存各自獨(dú)立的相關(guān)信息,用于實(shí)現(xiàn)各自獨(dú)立的通信。而在ClientSocket的事件OnRead中,調(diào)用方法傳遞的Socket值就是響應(yīng)該事件的對(duì)象屬性ClientSocket.Socket。同樣,在ServerSocket的事件OnClientRead中,調(diào)用方法傳遞的參數(shù)Socket就是對(duì)應(yīng)于當(dāng)前發(fā)送數(shù)據(jù)客戶(hù)端的唯一的Socket連接。
  (二)、各功能的實(shí)現(xiàn)
  1.開(kāi)機(jī)核心代碼:
  procedureTFormMain.FormCreate(Sender:TObject);//窗口創(chuàng)建
  begin
  …
  UpdateButtons;//更新按鈕狀態(tài)
  FormCall:=TFormCall.Create(nil);
  FormSelIP:=TFormSelIP.Create(nil);
  LoadConfigInfo;
  ifFileExists(SocksProxyFile)thenEdSocksIP.Items.LoadFromFile(SocksProxyFile);
  ifFileExists(HttpProxyFile)thenEdHttpIP.Items.LoadFromFile(HttpProxyFile);
  end;
  procedureTFormMain.BtOpenClick(Sender:TObject);//開(kāi)機(jī)按鈕
  varip,port:string;
  begin
  …
  Listen:=TAudioListenThread.Create(Handle,EdListenPort.Text);//監(jiān)聽(tīng)線程的創(chuàng)建
  withListen.Socketdo
  begin
  SocksIP:='';//Socks的IP初始值為空
  SocksPort:='';//Socks的端口號(hào)初始值為空
  SocksUsername:='';//Socks的用戶(hù)名初始值為空
  SocksPassword:='';//Socks的密碼初始值為空
  SocksTimeout:=60000;//Socks的延遲初始值為一分鐘
  SocksType:=ST_Socks4;//Socks的類(lèi)型為Socks
  HTTPTunnelIP:='';//Socks的IP初始值為空
  HTTPTunnelPort:='';//Socks的端口號(hào)初始值為空
  HTTPTunnelUser:='';//Socks的用戶(hù)名初始值為空
  HTTPTunnelPass:='';//Socks的密碼初始值為空
  HTTPTunnelTimeout:=60000;//Socks的延遲初始值為一分鐘
  ifCkSocks.Checkedthen//如果選擇Socks代理服務(wù)器
  begin
  ParseIpPort(EdSocksIP.Text,ip,port);//分析Socks的IP和端口號(hào)
  SocksIP:=ip;//把本機(jī)的IP賦值給Socks的IP
  SocksPort:=port;//把本機(jī)的端口號(hào)賦值給Socks的端口號(hào)
  SocksUsername:=EdSocksUser.Text;//把本機(jī)的用戶(hù)名賦值給Socks的用戶(hù)名
  SocksPassword:=EdSocksPass.Text;//把本機(jī)的密碼賦值給Socks的密碼
  ifRbSocks5.CheckedthenSocksType:=ST_Socks5;//如果選擇Socks服務(wù)類(lèi)型
  end;
  ifCkHttp.Checkedthen//如果選擇HTTP代理服務(wù)器
  begin
  ParseIpPort(EdHttpIP.Text,ip,port);//分析HTTP的IP和端口號(hào)
  HTTPTunnelIP:=ip;//把本機(jī)的IP賦值給HTTP的IP
  HTTPTunnelPort:=port;//把本機(jī)的端口號(hào)賦值給HTTP的端口號(hào)
  HTTPTunnelUser:=EdHttpUser.Text;//把本機(jī)的用戶(hù)名賦值給HTTP的用戶(hù)名
  HTTPTunnelPass:=EdHttpPass.Text;//把本機(jī)的密碼賦值給HTTP的密碼
  end;
  end;
  Listen.Resume;
  end;
  procedureTFormMain.DoListenFinal;//監(jiān)聽(tīng)終端
  begin
  Listen:=nil;
  IsOpen:=False;//更新按鈕設(shè)置
  UpdateButtons;
  StatusBar.Panels[0].Text:='就緒';
  LbMyIP.Caption:='本機(jī)IP:無(wú)';
  end;
  procedureParseIpPort(constaddr:string;varip,port:string);//分析IP和端口號(hào)
  vari:Integer;
  begin
  port:=addr;
  i:=Pos(':',port);
  ip:=Copy(port,1,i-1);
  Delete(port,1,i);
  end;
  procedureTerminateThread(thread:TThread);//終端線程
  begin
  ifAssigned(thread)then
  begin
  thread.Terminate;
  tryPostThreadMessage(thread.ThreadID,WM_TERMINATE,0,0);//主要發(fā)送消息
  exceptend;
  end;
  end;
  procedureTFormSelIP.LsAllIPClick(Sender:TObject);//選擇地址窗口
  begin
  ifLsAllIP.ItemIndex>=0then
  LbMySelIP.Caption:='我的選擇是:'+LsAllIP.Items[LsAllIP.ItemIndex]
  elseLbMySelIP.Caption:='我的選擇是:';
  end;
  procedureTFormMain.BtCloseClick(Sender:TObject);//關(guān)機(jī)
  begin
  ifAssigned(Listen)then//如果正在監(jiān)聽(tīng)
  begin
  BtClose.Enabled:=False;//關(guān)機(jī)按鈕設(shè)置為非
  Listen.Terminate;//結(jié)束監(jiān)聽(tīng)
  end;
  end;
  代碼所實(shí)現(xiàn)的NetPhone開(kāi)機(jī)界面如圖2,3所示。
  
  圖2開(kāi)機(jī)界面1
  
  圖3開(kāi)機(jī)界面2
  2..NetPhone通話界面的代碼實(shí)現(xiàn):
  procedureTFormMain.OnConnected(varms:TMessage);//連接
  begin
  ATimer.Enabled:=True;
  StatusBar.Panels[1].Text:='通話中...';
  LbCaller.Caption:='對(duì)方IP:'+Sock.GetRemoteSinIP+':'+IntToStr(Sock.GetRemoteSinPort);
  Send:=TAudioSendThread.Create(Handle,Sock,tfDoNothing);//發(fā)送線程
  Send.PhoneOpen:=CkPhone.Checked;
  Send.Resume;//發(fā)送
  OpenAudioIn(Send.ThreadID);
  ifAudioInOpenedthenStartAudioInelseShowMessage('打開(kāi)語(yǔ)音輸入設(shè)備失敗!');
  OpenAudioOut(Recv.ThreadID);
  ifAudioOutOpenedthenStartAudioOutelseShowMessage('打開(kāi)語(yǔ)音輸出設(shè)備失敗!');
  end;
  
  procedureTFormMain.OnClientConnect(varms:TMessage);//
  vars:TDblProxyTcpSocket;
  t:TAudioRecvThread;
  begin
  s:=TDblProxyTcpSocket.Create;
  s.Socket:=ms.WParam;
  s.GetSins;
  ifIsBusythen
  begin
  t:=TAudioRecvThread.Create(Handle,s,tfDoBusy);//接收線程
  t.Resume;
  end
  elsebegin
  IsBusy:=True;
  UpdateButtons;//更新按鈕設(shè)置
  ifMessageDlg('是否接聽(tīng)來(lái)電?'+s.GetRemoteSinIP+':'+IntToStr(s.GetRemoteSinPort),
  mtConfirmation,[mbYes,mbNo],0)=mrYesthen
  begin
  Sock:=s;
  Recv:=TAudioRecvThread.Create(Handle,s,tfDoAgree);//接收線程
  Recv.SpeakerOpen:=CkSpeaker.Checked;//接收聲音
  Recv.Resume;//接收
  end
  elsebegin
  t:=TAudioRecvThread.Create(Handle,s,tfDoRefuse);//接收線程
  t.Resume;
  IsBusy:=False;//設(shè)置為不忙
  UpdateButtons;//更新按鈕設(shè)置
  end;
  end;
  end;
  代碼所實(shí)現(xiàn)的NetPhone的通話界面如圖4-5所示。
  3.NetPhone掛機(jī)的代碼實(shí)現(xiàn):
  procedureTFormMain.FormClose(Sender:TObject;varAction:TCloseAction);//關(guān)閉主窗口
  begin
  …
  end;
  procedureTFormMain.BtStopClick(Sender:TObject);//掛機(jī)
  begin
  BtStop.Enabled:=False;//掛機(jī)屬性設(shè)置為非
  CloseAudioIn;
  CloseAudioOut;
  ifAssigned(Recv)thenTerminateThread(Recv);//結(jié)束接收線程
  ifAssigned(Send)thenTerminateThread(Send);//結(jié)束發(fā)送線程
  ifAssigned(Sock)thenSock.CloseSocket;//結(jié)束通信Socks
  end;
  四、結(jié)束語(yǔ)
  隨著多媒體應(yīng)用領(lǐng)域的不斷擴(kuò)展,特別是分布式多媒體應(yīng)用的逐漸成熟,多媒體通信對(duì)多媒體通信網(wǎng)絡(luò)提出了很高的要求。大容量的媒體數(shù)據(jù)在網(wǎng)上的實(shí)時(shí)傳輸對(duì)窄帶網(wǎng)絡(luò)和包交換協(xié)議提出了挑戰(zhàn)。人們一直關(guān)注著那些能夠滿(mǎn)足交互式和實(shí)時(shí)多媒體通信要求的網(wǎng)絡(luò)技術(shù)的發(fā)展。多媒體網(wǎng)絡(luò)技術(shù)的進(jìn)展將直接影響“信息高速公路”的建設(shè)速度,并將對(duì)人類(lèi)的生活和生產(chǎn)方式產(chǎn)生深遠(yuǎn)的影響。綜上所述下一步在語(yǔ)音實(shí)時(shí)通信系統(tǒng)的基礎(chǔ)上實(shí)現(xiàn)多媒體的實(shí)時(shí)通信。
  參考文獻(xiàn)
  
  [1]CeufreyFox.Peer-to-PeerNetworks[J].WebComputing,2001,5
  [2]DanaMoore,JohnHebeler.PeerToPeer.McGraw-HillCompanies,Inc2003,4
  [3]P2P技術(shù)概覽.http://www.yesky.com/20010926/198848_1.shtml
  [4]天極P2P專(zhuān)欄.http://www.yesky.com/20010926/198947.shtml

  搜論文知識(shí)網(wǎng)致力于為需要刊登論文的人士提供相關(guān)服務(wù),提供迅速快捷的論文發(fā)表、寫(xiě)作指導(dǎo)等服務(wù)。具體發(fā)表流程為:客戶(hù)咨詢(xún)→確定合作,客戶(hù)支付定金→文章發(fā)送并發(fā)表→客戶(hù)接收錄用通知,支付余款→雜志出版并寄送客戶(hù)→客戶(hù)確認(rèn)收到。鳴網(wǎng)系學(xué)術(shù)網(wǎng)站,對(duì)所投稿件無(wú)稿酬支付,謝絕非學(xué)術(shù)類(lèi)稿件的投遞!
  

文章標(biāo)題:基于P2P技術(shù)的語(yǔ)音通信及其在Delphi下的實(shí)現(xiàn)研究

轉(zhuǎn)載請(qǐng)注明來(lái)自:http://www.anghan.cn/fblw/dianxin/wangluo/4223.html

相關(guān)問(wèn)題解答

SCI服務(wù)

搜論文知識(shí)網(wǎng) 冀ICP備15021333號(hào)-3

主站蜘蛛池模板: 国产成人精品视频免费 | 小明成人永久视频在线观看 | 一区二区三区四区日韩 | yjizz视频国产网站在线播放 | 一本久道久久综合婷婷五 | 欧美一级毛片生活片 | 亚洲 中文 欧美 日韩 在线人 | 免费麻豆国产一区二区三区四区 | 羞羞答答91麻豆网站入口 | 国产一区二区三区四区五区六区 | 久久不卡日韩美女 | 美国a级黄色片 | 亚洲一区二区约美女探花 | 日韩欧美在线视频观看 | 免费看黄在线观看 | 国产精品爱久久久久久久电影 | 特黄特级高清免费视频毛片 | 午夜天堂在线视频 | 西川结衣在线精品视频 | 久久综合图片 | 午夜精品在线观看 | 亚洲人成s大片在线播放 | 制服丝袜第一页在线观看 | 免费啪视频观在线视频在线 | 亚洲欧美日韩久久一区 | 91在线播放视频 | 午夜国产在线观看 | 美国黄色网| 日本一级淫一片免费 | 亚洲综合视频一区 | 大学生一级一片第一次欧美 | 91短视频在线免费观看 | 欧美日韩乱妇高清免费 | 久久久久国产精品 | 日韩国产欧美一区二区三区 | 女人帮男人橹的视频网站 | 高清对白精彩国产国语 | 美女免费观看一区二区三区 | 女日韩优在线 | 青青热久久综合网伊人 | 国产精品1024永久观看 |