所屬欄目:計(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
攝影藝術(shù)領(lǐng)域AHCI期刊推薦《Phot...關(guān)注:106
Nature旗下多學(xué)科子刊Nature Com...關(guān)注:152
中小學(xué)教師值得了解,這些教育學(xué)...關(guān)注:47
2025年寫(xiě)管理學(xué)論文可以用的19個(gè)...關(guān)注:192
測(cè)繪領(lǐng)域科技核心期刊選擇 輕松拿...關(guān)注:64
及時(shí)開(kāi)論文檢索證明很重要關(guān)注:52
中國(guó)水產(chǎn)科學(xué)期刊是核心期刊嗎關(guān)注:54
國(guó)際出書(shū)需要了解的問(wèn)題解答關(guān)注:58
合著出書(shū)能否評(píng)職稱(chēng)?關(guān)注:48
電信學(xué)有哪些可投稿的SCI期刊,值...關(guān)注:66
通信工程行業(yè)論文選題關(guān)注:73
SCIE、ESCI、SSCI和AHCI期刊目錄...關(guān)注:121
評(píng)職稱(chēng)發(fā)論文好還是出書(shū)好關(guān)注:68
復(fù)印報(bào)刊資料重要轉(zhuǎn)載來(lái)源期刊(...關(guān)注:51
英文期刊審稿常見(jiàn)的論文狀態(tài)及其...關(guān)注:69
Web of Science 核心合集期刊評(píng)估...關(guān)注:59
電子信息論文范文
智能科學(xué)技術(shù)論文 廣播電視論文 光電技術(shù)論文 計(jì)算機(jī)信息管理論文 計(jì)算機(jī)網(wǎng)絡(luò)論文 計(jì)算機(jī)應(yīng)用論文 通信論文 信息安全論文 微電子應(yīng)用論文 電子技術(shù)論文 生物醫(yī)學(xué)工程論文 軟件開(kāi)發(fā)論文
SCI期刊分析
copyright © www.anghan.cn, All Rights Reserved
搜論文知識(shí)網(wǎng) 冀ICP備15021333號(hào)-3