用Visual C 實現P2P應用程式

2021-04-15 13:45:45 字數 2558 閱讀 6827

一.前言:

p2p,即英文peer-to-peer的縮寫,中譯為對等互聯或點對點技術。講到p2p,人們就會想起napster,napster讓人們認識到了p2p技術的威力,p2p技術也就通過napster進入了大多數使用者的視野,napster的**檔案交換功能是p2p的乙個主要應用。p2p技術可以讓使用者可以直接連線到其他使用者的計算機,進行檔案共享與交換。同時p2p在深度搜尋、分布計算、協同工作等方面也大有用途。

目前internet的儲存模式是"內容位於中心",而p2p技術的運用將使internet上的內容向邊緣移動。這將帶來以下改變:首先,客戶不再需要將檔案上傳到伺服器,而只需要使用p2p與其他計算機進行共享;其次,使用p2p技術的計算機不需要固定的ip位址和永久的internet連線,這使得占有極大比例的撥號上網使用者也可以享受p2p帶來的變革。

理解p2p技術方面的最好方法是仔細觀察並理解乙個實際的p2p應用程式。c#作為微軟.net戰略的重要棋子,對網路程式設計提供了很好的支援和優化。本文就通過乙個程式,向大家介紹一下c#下的p2p程式設計的方法和實現機理。本文的這個程式雖然不是很有用,但卻很直觀地給出了p2p(點對點)程式設計以及套介面程式設計的一些基本知識和概念。它是建立在tcplistener以及tcpclient這兩個類基礎上的,除外還有相應的輸入和輸出控制。實現的原理也比較簡單,但是用到了p2p技術重返"非中心化"的基本原則。簡言之,用這個程式可以在網路中傳送、接受資訊,任何一台計算機既可以作為伺服器端,又可以作為客戶端。程式共用到了四個類:乙個listener類(用來監聽新的連線)、乙個sender類(用來傳送資訊)、乙個inputhandler類(用來控制輸入)、乙個initialize類(用來完成初始化工作)。下面,我先給大家介紹一下這四個類,最後再給出程式的具體實現方法。

二.基本類介紹:

1.listener類:

listener類是用來監聽新的連線。當它的乙個物件被建立並開啟後,該物件就開始不斷監聽來自網路中的連線請求。一旦有了乙個連線請求,該物件就設法建立連線並取得它的位元組流進而轉化成字串顯示在控制台中。當乙個連線結束後,該物件就繼續進行監聽來自網路中的連線請求。

**以及注釋如下:

namespace p2ptest

public void stop()

private void listen() }

catch(system.security.securityexception)

catch(exception) }

} }

對listen()函式的補充說明:

這個函式是listener類的核心部分。該函式首先被構造函式呼叫。只要布林值listenerrun為true,我們就可以在埠5656建立並開始乙個tcp監聽物件tcplistener進行監聽網路中的連線請求,而一旦listenerrun被置為false,則表示程式結束了。在迴圈體內部,我們先接受乙個連線,用s.remoteendpoint獲得它的ip位址並獲得其位元組流。根據獲得的位元組流,我們用utf8編碼將它轉化為字串。最後,我們就在控制台中顯示獲得的字串。

對於catch語句,第乙個塊捕獲乙個可能由防火牆引起的例外。因為對於防火牆而言,它可能認為這是乙個特洛依木馬或是儒蟲病毒什麼的,所以就會拒絕通過。解決辦法就是重新配置防火牆。第二個塊用於捕獲一般的例外,比如當我們呼叫了stop()函式後,我們銷毀了tcplistener物件,那就自然不可能再進行監聽了。

2.sender類:

sender類就乙個函式,所以是相當簡單的。

**以及注釋如下:

namespace p2ptest

try

catch(exception) }

} }

對send()函式的補充說明:

在try塊中,我們根據遠端計算機的ip位址在埠5656(要確保埠號統一)建立了乙個tcpclient物件。然後,我們建立乙個networkstream和乙個stremwriter物件來傳送我們的資訊。在catch塊中,我們用它來捕獲一般的例外,比如遠端計算機拒絕連線請求、網路不通什麼的。

3.inputhandler類:

inputhandler類主要用來控制使用者輸入。

**以及注釋如下:

namespace p2ptest

private static listener li;//乙個靜態的listener物件

private string inparam;

private string ainput;//陣列ainput用於接受使用者輸入的資訊

public void input()

catch(nullreferenceexception)

finally

break;

case "stop"://如果是"stop",則停止監聽

try

catch(nullreferenceexception)

{ 本文**

用Visual C 實現P2P應用程式

一 前言 p2p,即英文peer to peer的縮寫,中譯為對等互聯或點對點技術。講到p2p,人們就會想起napster,napster讓人們認識到了p2p技術的威力,p2p技術也就通過napster進入了大多數使用者的視野,napster的 檔案交換功能是p2p的乙個主要應用。p2p技術可以讓使...

用Visual C 實現P2P應用程式

一 前言 1 listener類 listener類是用來監聽新的連線。當它的乙個物件被建立並開啟後,該物件就開始不斷監聽來自網路中的連線請求。一旦有了乙個連線請求,該物件就設法建立連線並取得它的位元組流進而轉化成字串顯示在控制台中。當乙個連線結束後,該物件就繼續進行監聽來自網路中的連線請求。以及注...

認識P2P,利用P2P

是peer to peer的縮寫 好象還看到過文章說是point to point,我也不清楚,網上的資料也不清楚,鬱悶 peer在英語裡有 地位 能力等 同等者 同事 和 夥伴 等意義。這樣一來,p2p也就可以理解為 夥伴對夥伴 的意思,或稱為對等聯網。目前人們認為其在加強網路上人的交流 檔案交換...