用Visual C 實現P2P應用程式

2021-09-05 23:13:56 字數 2535 閱讀 2788

一.前言:

1.listener類:

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

**以及注釋如下:

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

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

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

2.sender類:

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

**以及注釋如下:

namespace p2ptest

{using system;

using system.io;

using system.net.sockets;

public class sender

{public void send(string ainput)

{string stream = "";

//獲得要傳送的資訊

for(int i=2; i

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

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

3.inputhandler類:

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

**以及注釋如下:

對inputhandler類的補充說明:

該類中有乙個靜態的listener物件li,一旦計算機執行此程式並執行"start"操作,該計算機就可以成為網路中的伺服器來監聽其他計算機的連線請求。而該類的核心部分是乙個switch case語句系列,通過不同的操作,我們可以使計算機扮演不同的角色:"send"操作表明該計算機相對目的計算機而言成了客戶端;而"start"操作就將計算機自身置為伺服器端,這正體現了p2p的既是伺服器端又是客戶端的"非中心化"的原則;同時程式也提供了一些其他的輔助操作。

4.initialize類:

到此為止,四個類已經介紹完畢,我想大家也早已等不及了吧,下面就簡單給大家介紹一下具體實現程式的方法。

三.實現方法

首先,開啟visual studio.net,新建乙個名為p2ptest的控制台應用程式的visual c#專案,圖示如下:

其次,將以上四個類分別儲存為四個檔案:listener.cs,sender.cs,inputhandler.cs,initialize.cs。然後將這四個檔案新增到當前的工程中,同時把原有的主檔案刪除即可(因為在initialize.cs中已經有主函式了)。

最後,按ctrl+f5即可執行程式了。

為了進行測試,我們需要開啟兩個p2ptest程式,乙個作為伺服器端,另乙個作為客戶端。伺服器端的圖示如下(此時已經開始監聽了):

客戶端的圖示如下(輸入命令列:send 10.85.7.79 hello,i'm pitt.can you hear me??):

再看伺服器端的情況,圖示如下:

從圖示可以看到伺服器端已經收到訊息了。同時,只要客戶端也開啟了監聽功能,伺服器端也就能向客戶端傳送資訊了。這樣它們的關係就不再是伺服器-客戶機的關係了,而是peer-to-peer的關係了。

四.總結:

現在乙個很基本的p2p應用程式以及完成,通過它,我們可以利用p2p技術的基本特性實現點對點通訊。通過這個程式,我相信大家對c#下的p2p程式設計應該有了大致的了解。對於這個程式,不足的一點是功能比較簡單,只可以傳送、接受資訊,而且還是基於控制台的,讀者可以試著開發出功能更強大的基於 windows forms的p2p應用程式。

最後,筆者希望能通過此文喚起大家對p2p技術的興趣。因為p2p身後所蘊藏著的無比的創造力使人們對未來網際網路充滿了美好的憧憬,現在世界範圍的p2p應用熱潮也是一浪高過一浪。在可以預見的未來,隨著對p2p研究的進一步深入和關注 p2p的群體逐漸增多,p2p必將進入乙個飛速發展的新時期。

用Visual C 實現P2P應用程式

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

用Visual C 實現P2P應用程式

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

認識P2P,利用P2P

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