岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Java >> 其他技术 >> Java正文
如何使用JXTA技术建立P2P网络
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-23 9:51:58

作者:朱传辉

 通过之前将近一个月对于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();
   

[1] [2] [3] 下一页


  • 上一个Java:
  • 下一个Java:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:WebSyue@163.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    天龙八部私服 热血江湖私服 天龙八部私服 bet365 魔域私服 劲舞私服 传奇世界私服 bet365 传世私服 传奇世界私服