分享
 
 
 

JXTA核心协议之对等机发现协议(PDP)(三)

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

还是先用一个例子来说明吧!:)这个例子用来说明怎样发现网络上的其他JXTA Peers。

11.应用实例

Source Code: DiscoveryDemo.java

1 import java.util.Enumeration;

2 import net.jxta.discovery.*;

3 import net.jxta.exception.*;

4 import net.jxta.peergroup.*;

5 import net.jxta.protocol.*;

6

7 public class DiscoveryDemo implements Runnable, DiscoveryListener {

8

9 static PeerGroup netPeerGroup = null;

10 private DiscoveryService discovery;

11

12 // 开始配置JXTA平台

13 private void startJxta() {

14 try {

15 netPeerGroup = PeerGroupFactory.newNetPeerGroup();

16 }catch ( PeerGroupException e) {

17

18 //如果不能实例化Peer Group,输出原因并结束程序。

19 System.out.println("Fatal error : group creation failure");

20 e.printStackTrace();

21 System.exit(1);

22 }

23

24 //从Peer Group中发现的服务器

25 discovery = netPeerGroup.getDiscoveryService();

26 }

27

28 // 线程将每分钟循环一次,直到发现Peers为止,并显示找到的结果

29

30 public void run() {

31 try {

32 // 为 DiscoveryResponse events 添加 DiscoveryListener

33 discovery.addDiscoveryListener(this);

34

35 while (true) {

36 System.out.println("Sending a Discovery Message");

37 // 寻找Peers,每个Peer最多反馈5个 。

38 discovery.getRemoteAdvertisements(null, DiscoveryService.PEER,

39 null, null, 5);

40

41 // 等待一分钟

42 try {

43 Thread.sleep(60 * 1000);

44 } catch(Exception e) {}

45

46 }

47 } catch(Exception e) {

48 e.printStackTrace();

49 }

50 }

51

52 // 为了实现 DiscoveryListener,我们必须定义这个方法来处理所反馈信息

53

54 public void discoveryEvent(DiscoveryEvent ev) {

55

56 DiscoveryResponseMsg res = ev.getResponse();

57 String name = "unknown";

58

59 // 获得Peers的反馈广告

60 PeerAdvertisement peerAdv = res.getPeerAdvertisement();

61

62 // 一些Peers不能反馈他们的 PeerAdvertisement

63 if (peerAdv != null) {

64 name = peerAdv.getName();

65 }

66

67 System.out.println ("Got a Discovery Response [" +

68 res.getResponseCount()+ " elements] from peer : " +

69 name);

70

71 // 输出发现的Peer

72 PeerAdvertisement adv = null;

73 Enumeration enum = res.getAdvertisements();

74

75 if (enum != null ) {

76 while (enum.hasMoreElements()) {

77 adv = (PeerAdvertisement) enum.nextElement();

78 System.out.println (" Peer name = " + adv.getName());

79 }

80 }

81 }

82

83 static public void main(String args[]) {

84 DiscoveryDemo myapp = new DiscoveryDemo();

85 myapp.startJxta();

86 myapp.run();

87 }

88 }

一个JXTA Peer 用getLocalAdvertisements()方法来检索本地缓存中的Advertisements,如果想发现其他的Advertisements,就必须用getRemoteAdvertisements(),来发送一个Discovery Query Message给别的Peers。Discovery Query Messages能发送给一个Peer,但也能发送到一个JXTA的网络上。在J2SE的平台上,Discovery Query Messages还可以发给一个rendezvous。如果这个Peer还没有连接到这个rendezvous上,那么Discovery Query Message将只有通过多次的尝试发送到本地的子网。一旦这个Peer已经连接上了一个rendezvous,那么Discovery Query Message也将被传送给这个rendezvous peer。一个Peer在Discovery Query Message里包括它自己的广告,完成一个公告或者是自动的发现机制。

有两个方法来接收DiscoveryResponse Message,你可以等候一个或多个Peer来响应DiscoveryResponse Message,并且调用方法getLocalAdvertisements()来检索已经被发现的任何结果,并添加到本地的缓存中的广告。添加一个Discovery Listener来通知发现的Peer,当discovery events被接收时,调用discoveryEvent()方法。这里有两个方法添加Discovery Listener,一个是直接的addDiscoveryListener()(参考本程序Line33),另一个是通过getRemoteAdvertisements()方法。本例用的是第一种方法,如果采用第二种方法,可以将下程序的Line38~39写成:

discovery.getRemoteAdvertisements(null, DiscoveryService.PEER,null,null,5,this);

并去掉Line33行程序即可。

如果你在运行上面的程序时,没有收到任何的Discovery Response,L!你很有可能没有正确的配置好你的JXTA平台环境。请删除.jxta目录下的PlatformConfig文件,并重新运行程序。

12.小结

本文讲述了JXTA平台如何处理发现其他Peer的有关事宜以及JXTA的Java参考实现中提供的如何给其他Peer发送Discovery请求消息并处理返回的响应。还提到了利用Java参考实现中提供的Discovery接口及实现如何在本地或远程发布Advertisement。

当然,上面所介绍的PDP只是JXTA核心协议的一部分,还有的一些协议将在以后的文章中再介绍,呵呵……:)

注:在JXTA里,Advertisement(广告)相当于人类社会中的名片,在JXTA网络中的所有资源都通过广告来描述,用XML语言来描述Advertisement。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有