`

如何从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

    jxta-myjxta-docs-2.4.1_helloworld_

    new jxta implementation docs

    jxta.rar_jxta

    JXTA开发p2p的经典实例HelloWorld

    从Java走向Java+EE+.rar

    17.3 实例——分布式的HelloWorld 260 17.4 小结 264 第18章 Java消息服务 265 18.1 消息系统和JMS 265 18.1.1 JMS API 265 18.1.2 点对点消息模式 266 18.1.3 发布者/订阅者模式 267 18.1.4 同步和...

    电脑温度检测软件, 夏天的时候可以用用,不用安装那么多的臃肿软件

    电脑温度检测软件, 夏天的时候可以用用,不用安装那么多的臃肿软件

    基于SpringBoot的旅游网站的设计与实现

    本旅游网站系统采用的数据库是MYSQL,使用JSP技术开发,在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。本旅游网站系统采用的数据库是MYSQL,使用JSP技术开发,在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。本旅游网站系统采用的数据库是MYSQL,使用JSP技术开发,在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。本旅游网站系统采用的数据库是MYSQL,使用JSP技术开发,在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。本旅游网站系统采用的数据库是MYSQL,使用JSP技术开发,在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。本旅游网站系统采用的数据库是MYSQL,使用JSP技术开发,在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性

    BTT0.mdl.z..._lan.zip

    BTT0.mdl.z..._lan

    C#调用adb传输和推送数据到安卓设备上.zip

    C#调用adb传输和推送数据到安卓设备上

    c++的游戏必备函数,外加个做迷宫,合成一个头文件

    file_16847..._lan.zip

    file_16847..._lan.zip

    matlab 从气象数据共享服务网下载的日气象数据中提取所需要的站点数据 .zip

    matlab 从气象数据共享服务网下载的日气象数据中提取所需要的站点数据

    个人电脑信息管理软件exe和数据库

    个人电脑信息管理,输入数据,输入文档名称、位置等,增删改查,自己处理;电脑东西很多的话可以使用;一个可执行文件和一个数据库文件;如果报错不能运行则需要安装Acess数据库引擎;可以录入文档名,可执行文件名,文件夹和子文件夹名;按类别、格式、名称、位置等查询; 整理你的电脑和U盘吧;

    c语言怎么连接两个字符串.pdf

    c语言连接两个字符串

    delphi 12 控件之Gnostice PDF Toolkit Pro Plus 5.0.0.402.7z

    Gnostice PDF Toolkit Pro Plus 5.0.0.402.7z

    2022213854 李沐窈.zip

    2022213854 李沐窈.zip

    仿网易蜗牛读书-微信小程序源码.zip

    内附详细图文教程和视频教程 亲测可用

    数据库管理工具:dbeaver-ce-23.1.4-macos-aarch64.dmg

    1.DBeaver是一款通用数据库工具,专为开发人员和数据库管理员设计。 2.DBeaver支持多种数据库系统,包括但不限于MySQL、PostgreSQL、Oracle、DB2、MSSQL、Sybase、Mimer、HSQLDB、Derby、SQLite等,几乎涵盖了市场上所有的主流数据库。 3.支持的操作系统:包括Windows(2000/XP/2003/Vista/7/10/11)、Linux、Mac OS、Solaris、AIX、HPUX等。 4.主要特性: 数据库管理:支持数据库元数据浏览、元数据编辑(包括表、列、键、索引等)、SQL语句和脚本的执行、数据导入导出等。 用户界面:提供图形界面来查看数据库结构、执行SQL查询和脚本、浏览和导出数据,以及处理BLOB/CLOB数据等。用户界面设计简洁明了,易于使用。 高级功能:除了基本的数据库管理功能外,DBeaver还提供了一些高级功能,如数据库版本控制(可与Git、SVN等版本控制系统集成)、数据分析和可视化工具(如图表、统计信息和数据报告)、SQL代码自动补全等。

    Android手机安全卫士源码Android项目实战——手机安全卫士开发案例解析.zip

    Android手机安全卫士源码Android项目实战——手机安全卫士开发案例解析.zip

    2024美国大学生数学建模竞赛-基于 python实现财产保险的可持续性

    【作品名称】:2024美国大学生数学建模竞赛-基于 python 实现财产保险的可持续性 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:2024美国大学生数学建模竞赛-基于 python实现财产保险的可持续性

    Python爬虫实战+数据分析+数据可视化

    Python爬虫实战+数据分析+数据可视化,高分项目本项目是一套成熟的大作业项目系统,获取98分,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业。 Python爬虫实战+数据分析+数据可视化,高分项目本项目是一套成熟的大作业项目系统,获取98分,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业。 Python爬虫实战+数据分析+数据可视化,高分项目本项目是一套成熟的大作业项目系统,获取98分,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业。 Python爬虫实战+数据分析+数据可视化,高分项目本项目是一套成熟的大作业项目系统,获取98分,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业。 Python爬虫实战+数据分析+数据可视化,高分项目本项目是一套成熟的大作业项目系统,获取98分,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业。

Global site tag (gtag.js) - Google Analytics