久久精品电影网_久久久久久电影_久久99精品久久久久久按摩秒播_天堂福利影院_国产男女爽爽爽免费视频_国产美女久久

基于P2P技術的語音通信及其在Delphi下的實現研究

所屬欄目:計算機網絡論文 發布日期:2010-09-18 09:52 熱度:

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

  搜論文知識網致力于為需要刊登論文的人士提供相關服務,提供迅速快捷的論文發表、寫作指導等服務。具體發表流程為:客戶咨詢→確定合作,客戶支付定金→文章發送并發表→客戶接收錄用通知,支付余款→雜志出版并寄送客戶→客戶確認收到。鳴網系學術網站,對所投稿件無稿酬支付,謝絕非學術類稿件的投遞!
  

文章標題:基于P2P技術的語音通信及其在Delphi下的實現研究

轉載請注明來自:http://www.56st48f.cn/fblw/dianxin/wangluo/4223.html

相關問題解答

SCI服務

搜論文知識網 冀ICP備15021333號-3

主站蜘蛛池模板: 国产精品美女在线观看 | 精品一区在线 | 亚洲精品一区久久久久久 | 免费av观看| 久久国产婷婷国产香蕉 | 国产成人免费 | 日韩视频精品在线 | 日韩精品免费视频 | 亚洲精品一区二区三区蜜桃久 | 特级生活片 | 亚洲国产一区二区三区在线观看 | 亚洲精久| 毛片免费观看 | 天堂久久av | 日韩欧美高清dvd碟片 | 亚洲精品日韩精品 | 日本免费一区二区三区四区 | 日韩三级在线 | 亚洲国产成人精品久久久国产成人一区 | 精品在线一区二区三区 | 日本三级网址 | 奇色影视| 日韩中文久久 | 国产精品国产三级国产aⅴ浪潮 | 国产午夜在线观看 | 国产视频黄色 | 欧美在线观看一区二区 | 久久久国产一区 | 视频精品一区二区三区 | 精品亚洲一区二区三区四区五区高 | 欧美99 | 亚洲欧美视频一区二区 | 国产精品久久久久久久久久久久久 | 日韩看片| 国产精品欧美一区二区三区不卡 | 成人视屏在线观看 | 亚洲精品一区二区三区中文字幕 | 亚洲美女在线一区 | 欧美精品一区在线发布 | 国产精品一区久久久久 | 精品中文字幕久久 |