今天是:  | 网站首页 | 网络电视 | 网络电话 | 手机电视 | 手机电影 | 精彩视图 | 软件下载 | 在线论坛 |   

网络电视 网络电话 手机电视 精彩视图 软件下载 在线论坛


您现在的位置: 免费网络电视 免费网络电话 手机电视 >> 网络电视 >> 网络电视知识P2P技术 >> 文章正文  
使用JXTA技术建立P2P网络
作者:佚名    文章来源:不详    点击数:    更新时间:2007-12-17

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

  }

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

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

  以上为最简单的构建P2P网络,加入对等组的简单应用,以后会陆续贴出利用JXTA技术实现普通字符通讯和媒体数据广播等应用。敬请期待!以上所有均为个人实践体会及理解,如若有误,还望不吝赐教进行批评指正,如需交流,请加MSN:setve007@hotmail.com

发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
 
  • 上一篇文章:

  • 下一篇文章:
  • 免费网络电视.在线网络电视.网上电视直播.P2P网络电视
    91717网络电视提供:PPstream、MOPITV(猫扑;猫眼)、PPlive、TVkoo(酷视)等网络点事,在线观看.
    观看我们提供的所有在线P2P网络电视 须要安装网视解码器(自动跳出安装提示)。
    速度快:只需不到40秒的缓冲时间就能收看,越看越流畅!
    节目全:电影、电视剧、韩剧、动漫、MV等等,应有尽有。
    使用时数据缓存在内存里,不在硬盘 上存储数据,对硬盘无任何伤害!
    具有用户越多播放越稳定,支持数万人同时在线的大规模访问等特点。
    电影在线观看、电视剧在线观看、动漫在线观看、韩剧在线观看、小品在线观看、相声在线观看、游戏节目等等等等应有尽有。 http://www.91717.net
    网络电视的出现使得电影网站走向尽头。网络电视是一种时代的趋势。
    界面最美观的网视:ppstream 画质最清晰的网视:MOPITV(猫扑,猫眼)
    公认的最好的网视:PPlive 电视剧最多的网视:TVKOO(酷视)
    相关新闻
    信产部总结互联网发展矛盾:P2P妨碍其他
    P2P拖运营商盈利后腿遭批
    中国各大P2P流媒体软件用户覆盖数稳定增
    P2P占全球夜间95%网络带宽 Skype占VOIP
    9月份10大恶意软件排名出炉 P2P高居榜首
    中国电信称P2P有利有弊 将利用P2P提供媒
    美国NBC十月推电视剧免费下载服务 采用
    PPLive全线出击网络视频广告
    网通考虑P2P商业模式 正研究对其版权加
    风行在线罗江春:“马拉松”才刚刚开始
    论坛新帖
    新 闻 TOP 10
    固顶文章iSuppli:中国IPTV部署1004
    固顶文章香港拟发电信全业务牌1002
    固顶文章数字电视、IPTV增速双1004
    固顶文章信产部总结互联网发展1010
    固顶文章IPTV推进过程遭到各地1005
    固顶文章财经时报:“光纤到户1003
    固顶文章《传媒主张》:IPTV最1005
    固顶文章交互式网络电视(IPTV1008
    固顶文章P2P拖运营商盈利后腿遭1005
    固顶文章中国各大P2P流媒体软件1004
    - 网站地图 - 设为首页 - 自助友情链接 - 申请链接 - 联系我们 - 网站登陆 -
    www.91717.net 网络电视 网络电话 站长QQ 283541054 (细水长流)
    QQ群号码:免费网络电话 32922325 32921787 免费网络电视 32922468 32922587
    Copyright◎2005-2007 91717.net All Rights Reserved 闽ICP备05021722号