簡單地說,P2P就是一種用於不同PC用戶之間,不經過中繼設備直接交換數據或服務的技術,它允許Internet用戶直接使用對方的文件。每個人可以直接連接到其他用戶的計算機,並進行文件的交換,而不需要連接到服務器上再進行浏覽與下載。
目前Internet的存儲模式是"內容位於中心",而P2P技術的運用將使Internet上的內容向邊緣移動。這將帶來以下改變:
首先,客戶不再需要將文件上傳到服務器,而只需要使用P2P與其他計算機進行共享;
其次,使用P2P技術的計算機不需要固定的IP地址和永久的Internet連接,這使得占有極大比例的撥號上網用戶也可以享受P2P帶來的變革。
實例介紹
理解P2P技術的最好方法莫過於仔細觀察並理解一個實際的P2P應用程序。C#作為微軟.Net戰略的重要棋子,對網絡編程提供了很好的支持和優化。本文就通過一個程序,向大家介紹一下C#下的P2P編程的方法和實現機理。本文的這個程序不是很有用,但卻很直觀地給出了P2P(點對點)編程以及套接口編程的一些基本知識和概念。它是建立在TcpListener以及TcpClient這兩個類基礎上的。程序實現的原理也比較簡單,但是用到了P2P技術重返"非中心化"的基本原則。簡言之,用這個程序可以在網絡中發送、接受消息,任何一台計算機既可以作為服務器端,又可以作為客戶端。
系統要求:
1.Widows 2000服務器版操作系統或後續版本的操作系統。
2.Visual Studio.net Framework正式版。
具體方法:
首先,打開VS.net,新建一個C#項目(注意:模板為Windows應用程序),不妨命名為"P2Pchat"。圖示如下:
其次,參照ICQ、OICQ等聊天工具,我們可以將程序的主界面布置成和常見聊天工具的消息發送對話框類似的布局。不過由於程序僅一個主界面,所以還要添加一些諸如"開始監聽"、"停止監聽"等控制按鈕。同時,程序是支持昵稱顯示的。於是,按照這個思想,我們可以開始布置程序的主界面了。首先,往主界面上拖放如下一些控件:兩個Label控件、三個Button控件、三個TextBox控件、一個RichTextBox控件以及一個StatusBar控件。
各個控件的屬性設置如下表所示:
Form1 Text屬性 P2P聊天工具 Label1 Text屬性 目標計算機地址: TestSlign屬性 MiddleCenter Label2 Text屬性 昵稱: TextAlign屬性 MiddleCenter Button1 Text屬性 開始監聽 FlatStyle屬性 Flat Button2 Text屬性 停止監聽 FlatStyle屬性 Flat Enabled屬性 False Anchor屬性 Top, Right Button3 Text屬性 發送消息 FlatStyle屬性 Flat Anchor屬性 Top, Right TextBox1 Text屬性 (空) Anchor屬性 Top, Left, Right TextBox2 Text屬性 (空) Multiline屬性 True Anchor屬性 Top, Left, Right TextBox3 Text屬性 (空) ForeColor屬性 Firebrick Anchor屬性 Top, Left, Right RichTextBox1 Text屬性 (空) ForeColor屬性 Steelblue ReadOnly屬性 True Anchor屬性 Top, Bottom, Left, Right
注:其中的Anchor屬性是設置窗體上控件布局用的,當窗體大小改變後各個控件如何在窗體上重新分布由該屬性決定,讀者可參考更詳細的介紹文章來理解。
其他屬性為默認即可,最終布置主窗體界面如下所示:
現在到了程序的主體部分,即代碼部分。在給出代碼之前,我想先向大家介紹一下實現的基本原理以及其中的一些邏輯關系。