用JAVA实现P2P网络通信

来源:互联网 发布:iphone 163 smtp端口 编辑:程序博客网 时间:2024/05/21 06:52

一、 前言 
    P2P(Peer-to-Peer 端到端)模型是与C/S(客户/服务器)模型相对应。基于C/S的用户间通信需要由服务器中转,在C/S中的服务器故障将导致整个网络通信的瘫痪。。而基于P2P的用户间通信则是直接通信,去掉了服务器这一层,带来的显著优点是通信时没有单一的失败点,一个用户的故障不会影响整个P2P网络。本文提供了一种用JAVA实现P2P网络通信的方法。

 

 二、P2P通信的关键技术分析

1.P2P通信模型

   在P2P网络中,任意两个端点之间可实现直接通信。在基于C/S的网络中,客户端可以通过向服务器注册来实现彼此之间的定位(获得IP和端口)。对于P2P网络中,是如何实现彼此之间的定位和通信,下面做一阐述。
2.获得网络中可以通信端点的IP和端口
   假设有一个端点A,欲和P2P网络中其他端点通信,在通信之前,端点A必须首先把自己的IP和端口通知P2P网络中的其他每一个端点。其他每个端点收到这个信息后,就获得了端点A的IP和端口,随后向端点A反馈自己的IP和端口信息,使端点A也获得P2P网络中每个端点的IP和端口。
   这里有两个技术可以完成端点A向其他端点通知其IP和端口的工作,一是广播技术,二是多播技术。
   广播技术主要在局域网中使用,在局域网中的每一个端点(主机)都不得不接受并处理一个广播数据包。因此为了避免网络阻塞,路由器均限制广播数据包的通过。所以设计基于互联网的P2P程序不适合采用广播技术。
   多播技术是一种允许一个或多个发送者(多播源)发送单一的数据包到多个接收者(一次的,同时的)的网络技术。 多播源把数据包发送到特定多播组,而只有属于该多播组的地址才能接收到数据包。多播可以大大的节省网络带宽,提高了数据传送效率。减少了主干网出现拥塞的可能性。多播组中的端点(主机)可以是在同一个物理网络, 也可以来自不同的物理网络(如果有多播路由器的支持)。因此,多播技术是我们的选择。

注:广播同一客户端只能运行一个(端口占用),多播不会;

 

关于广播、多播 请见:http://oma1989.iteye.com/blog/1967744

1 0
原创粉丝点击