使用JXTA技术建立P2P网络(转)
转自:http://www.p2psky.com/tech/article2906.html
作者: 时间:2007-05-17
Technorati 标签: P2P,Java
08:20:14 出处:Matrix 人气: 515
通过之前将近一个月对于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
使用JXTA技术建立P2P网络(转)相关推荐
- 区块链技术之P2P网络(二)
Gossip Protocol Gossip protocol 也叫 Epidemic Protocol (流行病协议).Gossip protocol在1987年8月由施乐-帕洛阿尔托研究中心发表A ...
- SPSS用KMEANS(K均值)、两阶段聚类、RFM模型在P2P网络金融研究借款人、出款人行为数据规律...
全文下载链接:http://tecdat.cn/?p=27831 随着P2P网络金融平台的交易量的激增,其交易数据不能得到充分有效地利用.将聚类分析引入到P2P网络金融平台的管理之中,利用聚类分析技术 ...
- JXTA 2: 具有高性能、海量伸缩性的 P2P 网络
JXTA 2 是开放源代码 P2P 网络的第二个主要版本,它利用流行的.基于 Java 的参考实现作为构建基础.在设计方面进行了重要的修改,以获得更高的性能.海量伸缩性和可维护的 P2P 网络.本文建 ...
- p2p网络中的NAT穿透技术----常见NAT穿越解决方案
p2p网络中的NAT穿透技术----常见NAT穿越解决方案 常见NA丁穿越解决方案 NAT技术在缓解IPv4地址紧缺问题.构建防火墙.保证网络安全等方面都发挥了重要 作用.然而,NAT设备的广一泛存在 ...
- 第10讲 | 深入区块链技术(二):P2P网络
在上一篇文章中,我大致讲解了一下区块链技术的几个核心要素.P2P网络协议.分布式一致性算法(共识机制).加密签名算法.账户与存储模型.今天我们就来看看区块链技术的第一个核心要素:P2P网络. 如果我们 ...
- CDN及P2P技术在流媒体网络中的应用
新疆电信有限公司信息业务分公司 闫卫东 [ 来源:<新疆通信> 上传时间:06-10-16 ] 摘 要: 随着宽带网络的日益普及,流媒体成为了重要的互联网业务之一,完成实时流媒体的分发的主 ...
- 【区块链技术工坊27期实录】李庆华:HPB底层P2P网络实践
1,活动基本信息 1)题目: [区块链技术工坊27期]HPB底层P2P网络实践 2)议题: HPB芯链是融入硬件加速引擎的全新体系架构,打造基于BOE硬件加速芯片驱动的高性能公链.作为开放式公链,任何 ...
- 流媒体发展新趋势 p2p网络技术 p2p穿透 p2p音视频解决方案
一. 流媒体系统及其发展趋势 所谓流媒体是指用户通过网络或者特定数字信道边下载边播放多媒体数据的一种工作方式.流媒体应用的一个最大的好处是用户不需要花费很长时间将多媒体数据全部下载到本地后才能播放,而 ...
- 发布一个嘿嘿嘿的技术方案 —— 商用群发p2p网络
目前反群发的主要技术措施有: (1) 帐号控制:有帐号才能发,同时限制帐号的发送频率 (2) IP控制:限制指定IP的发送频率 (3) 协议控制:采用非开放协议 ( ...
最新文章
- @value 数组_SpringBoot @Value 读取配置,太强大了!
- Maven项目上总有一个小红叉问题
- Java网络爬虫实操(3)
- mybatis默认的数据源连接池(PooledDataSource和UnPooledDataSource)
- python的界面文字翻译_一个把网站全英文转成中文的方法,让你轻松看懂python官网...
- 记录kylin成功启动,访问页面404问题
- 日语学习-多邻国-关卡1-时间
- 深度系统安装移动硬盘启动_深度系统如何安装_电脑知识
- Centos7.9安装Mysql5.7.32_mysql-5.7.32-1.el7.x86_64.rpm-bundle.tar_亲测成功---Linux工作笔记041
- 走进COM组件系列(二)
- SAP License:ERP项目经理需求调研的惨痛经历
- python能做什么excel-python处理excel总结
- ZOJ 1203[Swordfish]
- 有趣的mysql string和0比较返回1的问题
- 计算机黑屏的原因及修复,导致笔记本电脑开机黑屏的原因以及对应的修复方法...
- 苏州外壳防护试验IP防尘防水测试IP65 IP66 IP69K
- mysql数据加表头导出_mysql导出数据到表格讲解大全(导出数据带表头,导出数据中文乱码问题解决)...
- 图书馆管理系统5W1H分析
- nuc虚拟机服务器,玩出新花样NUC虚拟机OP+Roon妈妈再也不用担心听音乐卡了
- Cisco NAT --- ip nat enable NVI方式