在JXTA中如何搜索目标对等组中的所有Peer

在JXTA中发布和发现任何资源都是根据广告,因此,我们要发现Peer也却是发现PeerAdvertisement的过程。该如何发现一个对等组内所有的Peer,和打印出它们的信息呢?

首先,我们要搜索Peer,那我们必须要找到一下存在的PeerGroup,找到PeerGroup,我们再找到其下面的Peer。如何发现PeerGroup,我们可以回头看看

如何从HelloWorld开始学习JXTA,在这里我就不详细说明。下面直接用代码和文字结合来讲明如何打印出HelloWorld对等组下面的所有Peer的信息。示例代码如下:

public class FindAllPeer {

 /**
  * @param args
  */
 private PeerGroup helloWorld = null;//目标PeerGroup
 private PeerGroup netpg = null;//NetGroup
 private PeerGroupAdvertisement pgAdv = null;//对等组广告
 private DiscoveryService hdisco = null;//发现服务
 public FindAllPeer(){
  try {
   netpg = new NetPeerGroupFactory().getInterface();//得到当前目录Home下的NetGroup
   hdisco= netpg.getDiscoveryService();//获得NetGroup提供的发现服务
  } catch (PeerGroupException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  //HelloWorld.findPeerGroup功能块,是在上篇HelloWorld.java类中提供的
  pgAdv = (PeerGroupAdvertisement)HelloWorld.findPeerGroup(hdisco, "Name", "HelloWorld").nextElement();//找到HelloWorld对等组广告
  System.out.println("HelloWorld对待组 ID : "+pgAdv.getPeerGroupID());
  try {
   helloWorld = netpg.newGroup(pgAdv);//找到目标对等组(HelloWorld对等组)
  } catch (PeerGroupException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }//
  Enumeration enu = null;//发现Peer广告
  int index = 0;
  StructuredTextDocument doc = null;
  StringWriter out = new StringWriter();
  try {
   //通过helloWorld组提供的发现服务发现"Name"属性为""的对等机
   enu = helloWorld.getDiscoveryService().getLocalAdvertisements(DiscoveryService.PEER,"Name","");//搜索HelloWorld对等组下面所有Peer信息
   System.out.println("目前HelloWorld PeerGroup下存在以下peer:");
   while((enu != null) && enu.hasMoreElements()){
    PeerAdvertisement adv = (PeerAdvertisement)enu.nextElement();//得到对等机广告
    doc = (StructuredTextDocument)adv.getDocument(MimeMediaType.XMLUTF8);//以XML格式得到PeerAdvertisement
    index++;
    System.out.println("Peer "+index+" ID :   "+adv.getID());//打印PeerID
    System.out.println("Peer "+index+" Name : "+adv.getName());//打印PeerName
    System.out.println("Peer"+index+"'s PeerAdvertisement: ");//打印该Peer的广告信息
    doc.sendToWriter(out);
    System.out.println(out.toString());
    out.close();
   }
  } catch (Exception e) {
   e.printStackTrace();
   System.exit(-1);
  }
 }
 public static void main(String[] args) {
  FindAllPeer pes = new FindAllPeer();
  System.exit(-1);
 }
 
}

在运行这段代码之前,最好保证运行过前篇HelloWorld.java,在不如果不存在对等组,可能会出现异常,而且打印不出Peer信息,因为对等组不存在。

你可能感兴趣的:(xml)