简单地说,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属性是设置窗体上控件布局用的,当窗体大小改变后各个控件如何在窗体上重新分布由该属性决定,读者可参考更详细的介绍文章来理解。
其他属性为默认即可,最终布置主窗体界面如下所示:
现在到了程序的主体部分,即代码部分。在给出代码之前,我想先向大家介绍一下实现的基本原理以及其中的一些逻辑关系。