`

如何从HelloWorld开始学习JXTA

阅读更多

本文主要从代码来讲解从HelloWorld开始理解和学习JXTA。在这里我们要实现的是一个Peer如何发现对等组并加入,如果不存在,则创建。当然在这里的加入对等组是最简单的,没有加入任何认证。这样是不安全和不利于对PeerGroup管理的。不过我们在这里只是要了解一下Peer的加入对等组的过程。在这里我用到的是JXTA版本是2.4.1。

public class HelloWorld {

 private PeerGroup netgroup = null;

 private Enumeration ae = null; // 记录发现的对等体广告。

 public static void main(String[] args) {
  HelloWorld myapp = new HelloWorld();
  myapp.startJxta();
  System.exit(0);
 }

 public void startJxta() {
  try {
   netgroup = new NetPeerGroupFactory().getInterface();
   
  } catch (PeerGroupException e) {
   e.printStackTrace();
  }
  // 从NetPeerGroup获得发现服务
  DiscoveryService hdisco = netgroup.getDiscoveryService();
  ae = findPeerGroup(hdisco, "Name", "HelloWorld");
  if (ae != null && ae.hasMoreElements()) {
   System.out.println("找到HelloWorld对等组");
   joinPeerGroup(netgroup, (PeerGroupAdvertisement) ae.nextElement());//找到目标对等组,加入
   System.out.println("加入HelloWorld对等组成功!!!");
  } else {
   System.out.println("没有找到HelloWorld对等组,则创建,在创建中......");
   createNewPeerGroup(netgroup, "HelloWorld", "HelloWorld,Inc");//没有找到目标对等组,创建
   System.out.println("创建HelloWorld对等组成功!!!");
  }
  System.exit(-1);
 }

 private Enumeration findPeerGroup(DiscoveryService dis, String key,
   String name) {
  int count = 3; // 试图发现的最高次数
  int timeout = 3000;
  Enumeration advs = null;
  // 循环直到我们发现helloWorld对等组或是直到我们达到了试图预期发现的次数。
  while (count-- > 0) {
   try {
    // 第一次搜索对等体的本地缓存来查找helloWorld对等组通告。
    // 通过NetPeerGroup组提供的发现服务发现"Name"属性为"helloWorld"的对等组
    advs = dis.getLocalAdvertisements(DiscoveryService.GROUP, key,
      name);
    // 如果发现helloWorld对等组通告,该方法完成,退出循环。
    if ((advs != null) && advs.hasMoreElements()) {
     break;
    }
    // 如果我们没有在本地找到它,便发送发现远程请求。
    // 参数依次为要查找的对等体ID,为空时不以此为发现条件;发现的通告类型,取值还有PEER,和ADV;
    // 要发现的通告属性名称;属性取值;需获取的最大通告数量;发现监听器
    dis.getRemoteAdvertisements(null, DiscoveryService.GROUP, key,
      name, 1, null);
    // 线程延时一下等待对等体內该发现请求。
    try {
     Thread.sleep(timeout);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  return advs;
 }

 // 如果不存在目标对等组,则创建目标对等组
 private PeerGroup createNewPeerGroup(PeerGroup netpg, String name,
   String desc) {
  PeerGroup result = null;
  try {
   // 创建一个新的对等组helloWorld
   // 通过NetPeerGroup获得一个一般对等组的通告。
   ModuleImplAdvertisement implAdv = netpg
     .getAllPurposePeerGroupImplAdvertisement();
   // 通过NetPeerGroup创建一个新的对等组,JXTA会自行发布该对等组通告,
   // 参数依次为对等组ID,通告,组名,描述
   result = netpg.newGroup(IDFactory.newPeerGroupID(), implAdv, name,
     desc);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return result;
 }

 // 加入对等组
 private PeerGroup joinPeerGroup(PeerGroup netpg,
   PeerGroupAdvertisement pgAdv) {
  PeerGroup result = null;
  try {
   // 加入该对等组,由于该通告已经发布,JXTA不会再行发布。
   result = netpg.newGroup(pgAdv);
  } catch (PeerGroupException e) {
   e.printStackTrace();
  }
  return result;
 }
}

当我们第1次运行时,会跳出出配置UI,我们在这里只要输入PeerName和Password,再点击OK,就可以啦。

运行代码,我们可能发现,只是在后台看到一些重要的过程的输入,到底有没有加入,Peer,PeerGroup的信息也没有。会有点不爽,不过在这里我要讲的这个过程。没有打印出Peer和PeerGroup的信息。因为发现资源,我们会用到DiscoveryService,后续会慢慢给出这些代码。

3
1
分享到:
评论
4 楼 ariestiger 2010-11-17  
public class HelloWorld {
 private PeerGroup netgroup = null;
 private Enumeration ae = null; // 记录发现的对等体广告。
 public static void main(String[] args) {
  HelloWorld myapp = new HelloWorld();
  myapp.startJxta();
  System.exit(0);
 }
 public void startJxta() {
  try {
   netgroup = new NetPeerGroupFactory().getInterface();
   
  } catch (PeerGroupException e) {
   e.printStackTrace();
  }
  // 从NetPeerGroup获得发现服务
  DiscoveryService hdisco = netgroup.getDiscoveryService();
  ae = findPeerGroup(hdisco, "Name", "HelloWorld");
  if (ae != null && ae.hasMoreElements()) {
   System.out.println("找到HelloWorld对等组");
   joinPeerGroup(netgroup, (PeerGroupAdvertisement) ae.nextElement());//找到目标对等组,加入
   System.out.println("加入HelloWorld对等组成功!!!");
  } else {
   System.out.println("没有找到HelloWorld对等组,则创建,在创建中......");
   createNewPeerGroup(netgroup, "HelloWorld", "HelloWorld,Inc");//没有找到目标对等组,创建
   System.out.println("创建HelloWorld对等组成功!!!");
  }
  System.exit(-1);
 }
 private Enumeration findPeerGroup(DiscoveryService dis, String key,
   String name) {
  int count = 3; // 试图发现的最高次数
  int timeout = 3000;
  Enumeration advs = null;
  // 循环直到我们发现helloWorld对等组或是直到我们达到了试图预期发现的次数。
  while (count-- > 0) {
   try {
    // 第一次搜索对等体的本地缓存来查找helloWorld对等组通告。
    // 通过NetPeerGroup组提供的发现服务发现"Name"属性为"helloWorld"的对等组
    advs = dis.getLocalAdvertisements(DiscoveryService.GROUP, key,
      name);
    // 如果发现helloWorld对等组通告,该方法完成,退出循环。
    if ((advs != null) && advs.hasMoreElements()) {
     break;
    }
    // 如果我们没有在本地找到它,便发送发现远程请求。
    // 参数依次为要查找的对等体ID,为空时不以此为发现条件;发现的通告类型,取值还有PEER,和ADV;
    // 要发现的通告属性名称;属性取值;需获取的最大通告数量;发现监听器
    dis.getRemoteAdvertisements(null, DiscoveryService.GROUP, key,
      name, 1, null);
    // 线程延时一下等待对等体內该发现请求。
    try {
     Thread.sleep(timeout);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  return advs;
 }
 // 如果不存在目标对等组,则创建目标对等组
 private PeerGroup createNewPeerGroup(PeerGroup netpg, String name,
   String desc) {
  PeerGroup result = null;
  try {
   // 创建一个新的对等组helloWorld
   // 通过NetPeerGroup获得一个一般对等组的通告。
   ModuleImplAdvertisement implAdv = netpg
     .getAllPurposePeerGroupImplAdvertisement();
   // 通过NetPeerGroup创建一个新的对等组,JXTA会自行发布该对等组通告,
   // 参数依次为对等组ID,通告,组名,描述
   result = netpg.newGroup(IDFactory.newPeerGroupID(), implAdv, name,
     desc);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return result;
 }
 // 加入对等组
 private PeerGroup joinPeerGroup(PeerGroup netpg,
   PeerGroupAdvertisement pgAdv) {
  PeerGroup result = null;
  try {
   // 加入该对等组,由于该通告已经发布,JXTA不会再行发布。
   result = netpg.newGroup(pgAdv);
  } catch (PeerGroupException e) {
   e.printStackTrace();
  }
  return result;
 }
}
3 楼 lifeng_2009 2010-06-02  
你好,我想请教个问题,我自己写了个小例子
在服务器创建了个PeerGroup 本机通过newGroup加入PeerGroup 
但是用这个组创建的PipeAdvertisement
 pids = myGroup.getDiscoveryService();
PipeAdvertisement piadv = (PipeAdvertisement)AdvertisementFactory.newAdvertisement(PipeAdvertisement.getAdvertisementType());
piadv.setPipeID(IDFactory.newPipeID(myGroup.getPeerGroupID()));
			piadv.setName("myPipeAdv");
			piadv.setDescription("new a PipeAdvertisement");
			piadv.setType(PipeService.UnicastType);

try {
				pids.publish(piadv,PeerGroup.DEFAULT_LIFETIME,PeerGroup.DEFAULT_EXPIRATION);
				pids.remotePublish(piadv,DiscoveryService.ADV);
				System.out.println("创建管道广告并发布!");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

远程(内网机器-服务器)却搜索(getRemoteAdvertisements)不到
但是 两个PEER 都用默认组
PeerGroup netGP = (new NetPeerGroupFactory()).getInterface();
的话就可以搜索的到 请问这个是什么原因啊 麻烦了
2 楼 lyndon.lin 2010-05-01  
需要固定的网络IP,及你已知的一个RDV,具有Http通信及路由的功能。因为我也没有做过跨网络的。呵呵。
1 楼 Michael_Jaychao 2010-05-01  
请教牙哥,在jxta平台上,如何实现跨网络防火墙的服务,指导书上说需要设置浏览器的局域网设置,没有具体介绍,

相关推荐

    JXTA-HelloWorld.rar_jxta

    描述中的"JXTA的 HelloWorld程序,教你如何初次学习JXTA"进一步确认了这是一个面向初学者的教学资源。通过分析这个Hello World程序,我们可以了解JXTA的基本用法,包括设置对等节点,创建通道,发送和接收消息等步骤...

    jxta-myjxta-docs-2.4.1_helloworld_

    《JXTA与MyJXTA 2.4.1:HelloWorld教程详解》 ...通过深入学习和实践这个HelloWorld教程,开发者不仅能掌握JXTA和MyJXTA的基础,还能建立起对P2P网络编程的直观理解,为后续开发更复杂的P2P应用程序打下坚实的基础。

    jxta.rar_jxta

    总结,"jxta.rar_jxta"这个压缩包可能是一个学习JXTA P2P编程的资源,其中的"HelloWorld"实例将引导用户熟悉JXTA的基本概念和操作流程,涉及JXTA的初始化、服务广告、发现、连接建立以及数据交换等核心功能。...

    jxta规范_英文原版 学习jxta必备

    jxta规范_英文原版 学习jxta必备

    精通JXTA 。JXTAShell

    **精通JXTA与JXTAShell:探索P2P技术新境界** JXTA(Java eXtensible Networking Architecture)是由Sun Microsystems开发的一种开放源码的对等网络(P2P)平台,旨在促进设备之间的互操作性,提供一种分散式计算...

    JXTA JXTA.jar

    jxta.jar p2p jxta.jar p2p jxta.jar p2p

    精通JXTA --本书是一本介绍JXTA的书籍

    通过这些实例,读者可以学习到如何使用JXTA API来实现设备之间的通信,以及如何设计和实现P2P服务。 ### JXTA管道与安全 JXTA管道是其通信模型的核心部分,分为推送管道(Push Pipe)和请求管道(Request Pipe)。...

    jxta2.2 开发文档

    3. **JXTA API**:学习JXTA API是开发的关键。API提供了创建、管理和交互对等节点、对等组、管道和服务的方法。这包括对等身份(PeerId)、对等组身份(PeerGroupId)、广告(Advertisements)和查询(Queries)等...

    jxta例程

    压缩包中的"jxta例程"很可能包含了以上这些功能的代码实例,每个例子都有详细的注释和说明,帮助开发者逐步学习和实践JXTA编程。通过这些例程,你可以理解JXTA的架构,学习如何建立P2P网络,编写服务发布和发现的...

    JXTA开发包1

    通过这些子文件,开发者可以逐步掌握JXTA的各个方面,从基本的网络设置到复杂的服务交互。每个rar文件都是一个学习JXTA的宝贵资源,可以从中提取出代码、文档甚至完整的示例应用,以加深对P2P编程的理解和实践。在...

    JXTA\jxta-lib-2.4.1.zip

    从网络发现到安全通信,再到用户界面的构建,每个库都在其中扮演着至关重要的角色,共同构成了P2P应用的基石。开发者可以借助这些工具,实现创新的、去中心化的应用,以满足日益增长的网络协作和资源共享需求。

    jxta 2.5 all

    JXTA 2.5 是该技术的一个版本,包含了完整的文档、源代码以及教程,为开发者提供了全面的学习和开发支持。 1. **JXTA 概述** JXTA 是一种跨平台的框架,它利用P2P技术构建分布式网络应用,允许网络中的各个节点...

    jxta学习手册(p2p,java)

    ### JXTA学习手册:P2P与Java技术解析 #### 一、P2P技术概览 近年来,分布式计算领域发展迅速,新技术层出不穷。其中,P2P(Peer-to-Peer)技术作为一项重要的技术趋势,使得用户可以直接连接到其他用户的计算机上...

    jxta2.7.zip

    JXTA(Java eXtensible Peer-to-Peer Technology Platform)是Oracle公司开发的一个开源、跨平台的P2P(Peer-to-Peer)框架,它为构建基于对等网络的应用程序提供了一组标准协议和API。JXTA 2.7是这个框架的一个版本...

    jxta运行的所有jar包

    jxta运行环境所需要的所有jar包 /files/JXTA_Demo/lib/jxta.jar /files/JXTA_Demo/lib/beepcore.jar /files/JXTA_Demo/lib/cryptix-asn1.jar /files/JXTA_Demo/lib/cryptix32.jar /files/JXTA_Demo/lib/jxtaptls.jar...

    p2p平台jxta学习资料

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

    JXTA 三本图书

    书中涵盖了从基础到高级的JXTA开发技术,适合有Java背景的开发者学习和参考。 "JXTA-Java P2P网络编程技术"这本书可能专注于JXTA在Java编程中的实际应用,它可能会详细解释如何利用JXTA的API来设计和实现P2P应用...

    JXTA.rar_beepcore java_jxta_jxta jar_jxta xchat_p2psocket jxta

    在学习JXTA时,你可能会遇到以下核心概念: 1. **Peer Group**:它是JXTA中的基本组织单元,将具有相同特性的节点分组在一起,共享相同的配置和服务。 2. **Advertisements**:这些是描述资源或服务的XML文档,用于...

    jxta messager

    JXTA Messenger 是基于JXTA技术实现的一种点对点聊天应用,可以作为学习和理解JXTA工作原理的一个实例。 **JXTA 技术核心概念** 1. **对等节点(Peers)**: 在JXTA网络中,每个参与者都是平等的,称为对等节点。...

Global site tag (gtag.js) - Google Analytics