`
wezly
  • 浏览: 490506 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

如何使用JXTA技术建立P2P网络

阅读更多

 
     通过之前将近一个月对于JXTA技术的研究,终于大致了解了P2P网络JXTA技术的JAVA语言实现过程,特整理出来,以供大家交流讨论。其实,关于概念和该技术的介绍,也可以找到一些资料,在此我就不再介绍,我直接通过代码来描述一个P2P网络在JXTA技术下用JAVA语言实现的过程。

 第一步,大家需要下载JXTA的类库,在http://www.jxta.org上可以下载到最新版本。我这里提供JXTA2.4.1的版本(很抱歉,超过限制上传不了!我会在论坛上另外上传,包括CHM格式的技术手册)。

 第二步,新建一个JAVA工程,将这些JAR包添加至构建路径(此处是采用Eclipse,用其他IDE,或是直接将这些JAR包添加到CLASSPATH也行)。

 第三步,我们将开始代码编写了。新建一个类。其main方法及其调用方法代码如下:


 

public static void main(String[] args) {
 RestoPeer myapp = new RestoPeer();   //此处实例化一个对等体对象。
 myapp.startJxta();                                  //此处启动JXTA方法,用来加入组,获得服务等等。
 System.exit(0);                                      //功能至完成,退出系统。
 }
public void startJxta() {
 try {
         加入默认对等组NetPeerGroup
 netpg = new NetPeerGroupFactory().getInterface();
 } catch (PeerGroupException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
  ......
 }

 此处需要注意的是,由于JXTA技术的不断更新,其类库结构和实现已发生很大变化,此处加入默认对等组是2.4.1版本中的新方法。JXTA技术手册上的方法已过时。

 第四步,我们需要获得默认对等组为我们提供的发现服务:

 

 DiscoveryService disco = netpggetDiscoveryService(); 

 此时,我们便可以利用disco服务来查找我们所需的广告了。
 第五步,我们需要查找一个属于我们自己的对等组,如果找不到,我们则创建一个这样的对等组。此时只是为了得到我们所需要的服务。因为每个对等组里所提供的服务并不全部相同。我们通常会把相同的目的的对等体通过一个对等组来组织起来。一个加入对等组的代码如下:(此例采用JXTA技术手册里的一个餐馆的拍卖服务案例来描述)

// 加入拍卖组
 private void joinRestoNet() {
 int count = 3; // 试图发现的最高循环次数
 System.out.println(" 试图发现组名为 RestoNet 对等组");

 从NetPeerGroup获得发现服务
 DiscoveryService hdisco = netpg.getDiscoveryService();

 Enumeration ae = null; // 记录发现的广告。

 // 循环直到我们发现RestoNet对等组或是直到我们达到了试图预期发现的次数。
 while (count-- > 0) {
 try {
 // 第一次搜索对等体的本地缓存来查找RestoNet对等组通告。
// 通过NetPeerGroup组提供的发现服务发现"Name"属性为"RestoNet"的对等组
 ae = hdisco.getLocalAdvertisements(DiscoveryService.GROUP,"Name", "RestoNet");

// 如果发现RestoNet对等组通告,该方法完成,退出循环。
 if ((ae != null) && ae.hasMoreElements()) {
       break;
     }

// 如果我们没有在本地找到它,便发送发现远程请求。
 // 参数依次为要查找的对等体ID,为空时不以此为发现条件;发现的通告类型,取值还有PEER,和ADV;
 // 要发现的通告属性名称;属性取值;需获取的最大通告数量;发现监听器
  hdisco.getRemoteAdvertisements(null, DiscoveryService.GROUP,"Name", "RestoNet", 1, null);

 // 线程暂停一下等待对等体內该发现请求。
  try {
         Thread.sleep(timeout);
         } catch (InterruptedException e) {
           // TODO Auto-generated catch block
               e.printStackTrace();
               }
          } catch (IOException e) {
            // TODO Auto-generated catch block
               e.printStackTrace();
               }
       }

 /*-------------------------------------------
 *     以上为循环发现目标组过程,以下为加入过程
 * ----------------------------------------*/
                
 // 创建一个对等组通告引用
PeerGroupAdvertisement restoNetAdv = null;

 // 检查我们是否找到RestoNet通告。如果没有找到,表示我们可能是第一个试图加入该组的对等体,
//或是其他知道RestoNet组的对等体成员已经关闭或不可到达
// 万一出现这种情况,我们必须创建一个RestoNet对等组。
 if (ae == null || !ae.hasMoreElements()) {

// 如果该组不在,给出提示信息,创建该组
 System.out.println("Could not find the RestoNext peergroup;createing me");
try {
         // 创建一个新的对等组RestoNet,全能对等组
         // 通过NetPeerGroup获得一个一般对等组的通告。
         ModuleImplAdvertisement implAdv = netpg.getAllPurposePeerGroupImplAdvertisement();

        // 通过NetPeerGroup创建一个新的对等组,JXTA会自行发布该对等组通告,
        //参数依次为对等组ID,通告,组名,描述
        restoNet = netpg.newGroup(mkGroupID(), implAdv, "RestoNet","RestoNet,Inc.");

        // 获得一个对等组通告
        restoNetAdv = netpg.getPeerGroupAdvertisement();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
} else {
           // RestoNet通告在缓存内找到意味着我们可以加入这个存在的组。
           // 在集合中提取一个对等组通告元素
           restoNetAdv = (PeerGroupAdvertisement) ae.nextElement();
try {
          // 加入该对等组,由于该通告已经发布,JXTA不会再行发布。
          restoNet = netpg.newGroup(restoNetAdv);
          System.out.println("找到RestoNet对等组,并加入存在的该组");
       } catch (PeerGroupException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
       }
}

   // 获得RestoNet提供的发现服务和管道服务
   disco = restoNet.getDiscoveryService();
    pipes = restoNet.getPipeService();

    System.out.println("RestoNet Restaurant_(" + brand + ") is on-line");
    return;
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bangni_lz/archive/2007/08/28/1762762.aspx

  此时,我们已经加入或者创建了一个RestoNet对等组了,该组位于NetPerrGroup组内,所以通过NetPeerGroup提供的发现服务可以找到该组广告。如若找不到,则跟网络环境有关,可能是等待时间太短或是循环次数太少,因为P2P网络是不可靠的网络,因此这个参数很难确定,需要根据实际情况来设置。

 至此,我们的机器已处于一个P2P网络中了,其实在我们得到默认对等组实例时我们已经在P2P网络中了,只不过我们现在已经通过网络发现,找到或创建了我们需要的对等组并加入其中,以后我们便可以提供并消费该对等组提供的服务或是该对等组内对等体提供的服务了。

分享到:
评论

相关推荐

    JXTA Java P2P 网络编程技术

    JXTA的目标是简化P2P网络的开发,让开发者可以轻松地构建出高效、自组织、自我修复的网络应用。 在P2P网络中,节点之间直接进行通信,没有中心服务器的控制。这种架构有诸多优点,比如扩展性好、容错性强以及对带宽...

    JXTA——Java P2P网络编程技术.zip

    通过《JXTA——Java P2P网络编程技术》这本书,读者可以深入理解JXTA框架的原理和应用,书中可能涵盖了如何设置开发环境、建立Peer Group、创建和管理Pipe、实现资源发现和交换,以及如何实施安全策略等内容。...

    JXTA开发包3

    3. **使用JXTA技术建立P2P网络.txt**:这个文本文件很可能提供了关于如何使用JXTA来构建P2P网络的详细步骤和指导。它可能涵盖了网络配置、节点通信、服务发布和发现等方面的内容,是初学者入门的重要参考资料。 ...

    JXTA-Java P2P网络编程技术.zip

    **Java P2P网络编程技术:JXTA详解** P2P(Peer-to-Peer)网络编程是一种分布式计算模式,其中每个参与者既是客户端也是服务器,直接与其他参与者交换资源和服务,无需中间服务器。Java P2P网络编程技术因其跨平台...

    JXTA——Java P2P网络编程技术

    通过学习这些章节,开发者可以掌握JXTA的基本用法,理解P2P网络的工作原理,并能够使用Java进行JXTA应用的开发。源代码部分将有助于读者更好地理解和实践这些概念,从而提升其在P2P网络编程领域的技能。

    JXTA-Java-P2P网络编程技术书后源码

    **Java P2P网络编程与JXTA技术详解** Java P2P(Peer-to-Peer)网络编程是一种分布式计算模型,其中每个参与者既是服务的提供者也是消费者。在这个模式下,网络中的节点地位平等,无需中心服务器进行协调。JXTA...

    JXTA-Java P2P网络编程技术.pdf

    **JXTA(Java Peer-to-Peer Toolkit)**是由Sun Microsystems开发的一种开放源代码平台,专门用于构建基于Java的对等...如果你对P2P网络或JXTA感兴趣,这个教程将是一个宝贵的资源,带你深入了解这一领域的技术和应用。

    jxta编写简易p2p聊天系统

    **JXTA(Java Xtreme Protocol)是一种开放源代码...以上就是使用JXTA构建P2P聊天系统的基本步骤和关键知识点,希望对你理解P2P网络和JXTA有所帮助。在实践中,不断学习和探索,你将能够利用JXTA开发出更多创新的应用。

    JXTA技术手册示范源码jxtaexamles

    JXTA技术手册示范源码`jxtaexamles`是学习和理解JXTA技术的重要参考资料,其中包含了各种JXTA API的实例,有助于深入理解其工作原理和使用方法。 **JXTA核心概念** 1. **对等节点(Peers)**: 在JXTA网络中,每个...

    p2p开发p2p开发p2p开发p2p开发

    9. **JXTA技术**:JXTA的核心组件包括Pipe服务(用于数据传输)、广告服务(发布和查找服务)、身份服务(管理P2P身份)和路由器服务(处理P2P网络中的消息路由)。开发者可以基于这些组件构建P2P应用。 在实际开发...

    p2p平台jxta学习资料

    本资料包“p2p平台jxta学习资料”旨在帮助你深入理解和实践P2P编程,特别关注JXTA技术。 1. **JXTA简介**:JXTA是一个基于标准的、跨平台的P2P框架,它定义了一组协议,用于在P2P网络中进行设备发现、通信和资源...

    基于JXTA平台的P2P文件共享系统的设计与实现

    JXTA是一组旨在构建P2P网络的协议集,它独立于编程语言和操作系统平台,使得开发者能够在多种环境中构建P2P应用。JXTA的核心协议包括对等体发现协议(PDP)、管道绑定协议(PBP)、对等体信息协议(PIP)、对等体...

    jxta学习手册(p2p,java)

    无论是对于研究分布式计算的技术人员还是希望利用P2P技术进行创新的企业而言,JXTA都是一款值得深入了解和使用的工具。更多关于JXTA的详细信息,可以访问其官方网站http://www.jxta.org/进行深入学习。

    基于JXTA的P2P即时通信系统设计

    - **定义**:P2P网络模型是一种分布式网络架构,其中每个节点(Peer)既是服务请求者也是服务提供者。与传统的客户端/服务器(C/S)或浏览器/服务器(B/S)模式相比,P2P减少了对中心化服务器的依赖。 - **特点**: ...

Global site tag (gtag.js) - Google Analytics