|
网站首页
|
JAVA文章
|
AppServers
|
Web开发
|
应用开发
|
资源下载
|
想学好编程,学好外语很重要 [enadd 2006年12月25日]
设为首页
加入收藏
联系站长
您现在的位置:
编程笔记网
>>
JAVA文章
>>
java socket
>> 文章正文
对等计算实践:基于 IP 多播的发现
热
荐
【字体:
小
大
】
对等计算实践:基于 IP 多播的发现
作者:- 文章来源:- 点击数: 更新时间:2006-7-24
gramPacket(arb, arb.length);
datagrampacket.setAddress(m_inetAddress);
datagrampacket.setPort(m_nPort);
MulticastSocket multicastsocket = new MulticastSocket();
multicastsocket.send(datagrampacket);
}
catch (IOException ioException)
{
ioException.printStackTrace();
}
try
{
synchronized (this)
{
wait(m_nPeriod);
}
}
catch (InterruptedException interruptedException)
{
break;
}
}
}
catch (Throwable throwable)
{
throwable.printStackTrace();
}
}
}
清单 3 包含了 MemberClient 类的源代码。象清单 1 中的客户机一样,这个客户机创建一个 MulticastSocket 实例并使用它来发送一个 DatagramPacket 实例。DatagramPacket 实例包含一个到发送方对等点的引用,该引用是作为字节数组编码的。只要该对等点还是活动的并在运行,客户机就会每隔一段常规时间来广播这条信息。
清单 4. MemberServer 类
private
class MemberServer
extends Thread
{
public
void
run()
{
try
{
MulticastSocket multicastsocket = new MulticastSocket(m_nPort);
multicastsocket.joinGroup(m_inetAddress);
while (true)
{
Message message = m_messagefactory.createReceiveMessage();
byte [] arb = message.getByteArray();
DatagramPacket datagrampacket = new DatagramPacket(arb, arb.length);
multicastsocket.receive(datagrampacket);
message.sync();
if (m_messagefactory.isMine(message) == false)
{
Reference reference = message.createReference();
message.readReference(reference);
m_membermanager.addReference(reference);
}
}
}
catch (Throwable throwable)
{
throwable.printStackTrace();
}
}
}
MemberServer 类在很多方面类似于清单 2 中的服务器。除了创建必需的代码,使用它从建立的通信(wire)上采集适当的数据报以外,这个服务器还对已编码的引用进行解码、创建消息并将消息传递到 MemberManager 实例进行保管。干得不错。
该类的其余部分由用于各种特性的读方法和写方法以及用于控制该类的生命周期的 start() 和 stop() 方法组成。
P2P 应用程序
对等点发现框架完成了,剩下的所有工作就是将它集成到现有的 P2P 应用程序中去了。对原来的 P2P 应用程序的更改相对较少。
首先,在其前身中,P2P 应用程序期望在其特性文件中列出所有已知的对等点。尽管这对演示用途来说很好(请回忆上面讨论的点到点配置),并在最多至大约四个对等点的情况下运行良好,但最终它的限制还是太大了。因此,除去了在特性文件中读取和管理对等点的代码,并以使用上面的发现机制的代码取代它。
其次,因为在特性文件中枚举了对等点,看上去它们就好象持久存在了。现有的应用程序如果假定它们不会消失,有时会侥幸获得成功。但是,在 P2P 的真实世界中,事情更易发生变化。新的应用程序进行了重新设计,适于在对等点消失时进行更好的恢复。
更新的源代码可在参考资料中得到。
结束语
找到对等点只是成功了一半。下一次我将研究一个难题,涉及两个对等点在现代因特网上的通信,要克服防火墙、网关以及其它一大堆麻烦。
参考资料
下载并更新本文的源代码。
“How IP Multicast Works”一文为初学者提供了很棒的简介。
Jxta Discovery Service 使用 IP 多播来定位合适的对等点。
在这个关于 Jxta 的系列文章中,Making P2P interoperable(developerWorks,2001 年 8-9 月)中,Sing L
上一页
[1]
[2]
[3]
[4]
下一页
文章录入:enadd 责任编辑:enadd
上一篇文章:
穿透Socks5 代理的UDP编程
下一篇文章:
从socket中读取数据时使用超时
【
发表评论
】【
加入收藏
】【
告诉好友
】【
打印此文
】【
关闭窗口
】
最新热点
最新推荐
相关文章
HTTP 1.1状态代码及其含义
java开发的邮件发送程序
从socket中读取数据时使用超…
穿透Socks5 代理的UDP编程
使用Java控制UDP协议
如何用Java实现网络中国象棋…
一个Socket服务器样板程序
Java Socket编程
Java Socket编程之五
Java Socket编程之四
网友评论:
(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
|
设为首页
|
加入收藏
|
联系站长
|
友情链接
|
版权申明
|
管理登录
|
Copyright ©2000 - 2005
Enadd
.com
备案序号:辽ICP备06005595号
站长:
enadd