在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信息,因为对等组不存在。