最近朋友们一直都是问为什么老是远程发现不了。估计都是以前书上的例子害的。我们看过这么多书,一定会发现,所有的例子都是本地发现的。而且只是写出了远程发现的语句,但是其实只是向我们显示如何远程发现,其实并没有说明远程发现的结果到底出现在那里,谁去接受远程发现的广告。
下面我们就用一个很简单的例子来说明一下,远程发现的结果到底出现在那里。在很多例子中我们经常看到这句语句dis.getRemoteAdvertisements(null , DiscoveryService.GROUP, key,name, 1, null );,而且会说明这个是远程发现广告。细心的朋友会去查看,有几个这种的方法,各个参数是什么类型。
结果我们就会发现最后1个参数null,其实是一个DiscoveryListener,结果终于出来啦。就是它,DiscoveryListener监听。下面给出一个简单的代码,并在代码中写明是如何发现的,得到结果的。
public class DiscoveryPeer implements DiscoveryListener {//第1步:首先我们要实现这个DiscoveryListener监听
private PeerGroup peerGroup = null;
private DiscoveryService dis = null;
public void launchJXTA(){
try {
peerGroup = new NetPeerGroupFactory().getInterface();
dis = peerGroup.getDiscoveryService();
} catch (PeerGroupException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//第2步:真正实现这个发现事件。得到发现的广告,重点就是这里,这里你会发现你指定发现的广告,然后得到你想要的广告。
public void discoveryEvent(DiscoveryEvent event) {
//mes里面就有我们所需要的广告内容,然后我们只要为远程发现广告,添加这个监听。结果就保存在DiscoverEvent
DiscoveryResponseMsg mes = event.getResponse();
}
//第3步:为需要远程发现监听的地方添加监听。
public void discoveryAdv(){
dis.getRemoteAdvertisements(null, DiscoveryService.ADV,
"Name", "张三", 5, this);//这里这个this,就是为本Peer添加该监听
}
//完成上面三步,利用远程发现广告就完全实现的了。只是一发现你需要的广告,就会触发discoveryEvent,然后利用event.getResponse()返回结果。
}
希望上面能让学习的同学理解。