知识大全 基于 IP 多播的发现

Posted 消息

篇首语:学习是为了完善人生,追求卓越自我,成功就会出其不意的找上门来。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 基于 IP 多播的发现相关的知识,希望对你有一定的参考价值。

对等计算实践:基于 IP 多播的发现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  要完成有用的工作 P P 应用程序中的对等点必须能够彼此发现对方并与对方交互 在上一篇文章中 Todd 描述了几种不同的机制 对等点可以使用这些机制彼此发现 他还解释了每种机制的优缺点 本月 他提供了一种基于 IP 多播的发现的实现   在软件实体能够参与具有 P P 应用程序特征的直接的对等交互之前 该实体必须发现将要与之交互的适当的对等点 所有可行的 P P 体系结构都提供一种针对发现问题的解决方案 上一次 我们研究了实现发现的几种不同的方法 本月 我将描述其中一种机制的实现 让我们通过回顾来开始今天的讨论     再访发现  对等点发现使 P P 应用程序中的对等点能够彼此定位以便相互之间可以交互 实现对等点发现服务有多种方法 最简单的机制是显式点到点配置 这种机制通过要求每个对等点知道所有它可能与之交互的其它对等点 并与它们相连 来进行工作 点到点配置的主要优点是简单 它的主要缺点是缺乏灵活性并且缺少扩展到对等点的大型网络的能力     发现的另一个公共模型是使用中央目录作为中介 该模型在许多传统的 非 P P 分布式类型的应用程序中间很流行 其优点是很好理解 对等点向中央目录注册自己的存在 并使用中央目录定位其它对等点 这种模型的主要优点是易于管理和扩展的能力 但是 其集中化设计会导致单点故障 因此它对自然力或网上冲浪人数增加所带来的危害缺乏抵御能力     许多流行的 P P 应用程序使用网络模型而不是中央目录 在网络模型中 单个对等点只知道局域网络上的对等点身份 每个对等点都作为那些与之相连的对等点的目录 对等点通过向相邻对等点传播目录查询并返回相关的响应来进行合作 这种模型的主要优点是没有集中化 它的主要缺点是由于传播查询耗费了大量的网络和处理能力     上面三种机制有无数种变体 不讨论这些变体了 让我们继续前进并研究另一种发现机制     IP 多播发现  就每个对等点维护自己的目录这点而言 多播模型类似于网络模型 但是 对等点不通过合作来实现大规模网络查询 另外 对等点利用网络本身提供的特性(IP 多播)来定位和标识其它对等点     IP 多播是无连接和不可靠的(不象 TCP/IP 是面向连接和可靠的) 虽然它使用 IP 数据报 但是不象单播 IP 数据报那样是从一台主机发送到另一台主机 多播 IP 数据报可以同时发往多台主机     对等点定期使用 IP 多播来宣布自己的存在 宣布包含了它们的主机名和一个用于正常通信的端口 对此消息感兴趣的对等点检测这个消息后 抽取出主机名和端口号 并使用该消息建立一个通信通道     回顾已经足够了 让我们开始研究代码吧     简单的客户机与服务器  我们将从一个简单的示例开始 该示例演示了两个进程如何使用 IP 多播进行通信 为了简化演示 我将分别从客户机和服务器进程这两个方面来介绍示例 P P 应用程序通常会实现这两个进程 将它们划分为客户机或服务器并不容易     在本例中 服务器进程进行循环并等待数据报包的到来 每接收到一个包 服务器就会向控制台打印一条简短的诊断消息 客户机角色要简单得多 — 它多播单个数据报包并退出     清单 和 说明了这两部分是如何组合在一起的 代码中的注释说明了正在发生的事情     清单 简单服务器   public  class Server    public  static  void  main(String [] arstring)    try    // Create a multicast datagram socket for receiving IP  // multicast packets Join the multicast group at  // port   MulticastSocket multicastSocket = new MulticastSocket( );  InetAddress inetAddress = InetAddress getByName( );  multicastSocket joinGroup(inetAddress);  // Loop forever and receive messages from clients Print  // the received messages   while (true)    byte [] arb = new byte [ ];  DatagramPacket datagramPacket = new DatagramPacket(arb arb length);  multicastSocket receive(datagramPacket);  System out println(new String(arb));      catch (Exception exception)    exception printStackTrace();                清单 简单客户机   public  class Client    public  static  void  main(String [] arstring)    try    // Create a datagram package and send it to the multicast  // group at port   byte [] arb = new byte [] h e l l o ;  InetAddress inetAddress = InetAddress getByName( );  DatagramPacket datagramPacket =   new DatagramPacket(arb arb length inetAddress );  MulticastSocket multicastSocket = new MulticastSocket();  multicastSocket send(datagramPacket);    catch (Exception exception)    exception printStackTrace();                 包中的两个类使它运行 DatagramPacket 类保存了 IP 数据报包中包含的数据 MulticastSocket 类创建一个调整到一个特定多播组的多播套接字     发现组件  尽管上述示例是一个很好的 IP 多播的演示 但它没有说明实现基于 IP 多播的对等点发现需要什么 要使它有用 我们需要一个功能不仅限于发送和接收包的软件组件 理想情况下 这个组件将了解它所接收的包的源对等点 并适当地丢弃一些信息 这些信息是关于那些它认为已经消失 死亡或以其它方式离去的对等点的     在这个新设计中 对等点是一个多播组的成员 请牢记 发送到多播组的消息会透明地路由到该组的所有成员     设计包括两个核心类和三个接口(我使用术语 接口 似乎不太严谨 — 在技术上是一个接口和两个抽象类) Member 类的实例是一个多播组的成员 这个类管理所有的通信细节 MemberManager 类的一个实例负责了解参与多播组的其它成员     对等点通过向多播组发送一个消息 来向属于多播组中的对等点宣布自己的存在 每个消息包含关于发送消息的对等点的信息 — 通常是主机名和用于正常(与发现无关)通信的端口 Member 类和 MemberManager 类对这些消息的内容几乎一无所知 对该信息的访问权属于使用这两个类的应用程序     有三个接口跨越了消息传递/发现层和使用它的应用程序层之间的边界 它们是 Reference 抽象类 Message 接口和 MessageFactory 抽象类 应用程序必须提供这三个接口的实现     Reference 抽象类定义了对多播组成员的引用 MemberManager 类管理一个引用集 应用程序将实现这个类的一个具体版本 它将包含应用程序所需要的任何引用逻辑 该类定义了两个方法 名称是 equalsInternal() 和 hashCodeInternal() 并且重新定义了 equals() 和 hashCode() 方法来调用这些方法 它通过这样做来强制实现者为这两个关键功能提供实现 — MemberManager 依赖于它们     Message 接口定义了通过网络代码交换的消息数据的应用程序视图 应用程序将该消息看作是相对于应用程序运行范围的高级概念 — 类似于主机名和端口的概念 网络代码希望发送一个由字节组成的包 Message 接口的实现定义了如何将这些高级信息与字节相互转换 引用是信息的一个关键部分 所有消息都必须包含 因此该接口要求实现提供用于读和写 reference 的方法     问题的最后部分是 MessageFactory 抽象类 这个类定义了生成新的 Message 实例的机制 深藏在 Member 类内的网络代码使用一个工厂来创建从多播数据报中抽取出的数据的 Message 实例 每个 MessageFactory 实例拥有一个随机生成的身份 它使用这个身份来从接收的消息中滤出要发送的消息     总之 这五个类和接口(Member MemberManager Reference Message 和 MessageFactory)构成了一个用于进行对等点发现的简单框架 当然 还有可以改进的空间 可以很容易地添加一种基于事件的机制 用于向感兴趣的侦听器通知成员的出现或消失 一种用于过滤所接收消息的灵活机制将很有用 但其实现却比较困难 我将这些建议留作读者的作业     Member 类  上面描述的框架的完整源代码太长了 这里就不详细展示了 所以让我们只研究 Member 类的部分代码 因为其中包含了操作的大多数内容 更准确地说 操作发生在两个内部类中 MemberClient 类和 MemberServer 类     请再次考虑第一个示例 它由一个发送 IP 多播数据报的客户机和一个接收数据报的服务器组成 在本例中(清单 和 ) 两个单独的应用程序执行这两项功能 P P 应用程序中的对等点的行为方式既象客户机又象服务器 所以我们的 P P 应用程序应该同时包含两者才是适合的     清单 MemberClient 类   private  class MemberClient  extends Thread    public  void  run()    try    while (true)    try    Message message = m_messagefactory createSendMessage();  Reference reference = message createReferen cha138/Article/program/Java/Javascript/201311/25329

相关参考

知识大全 基于php使用memcache存储session的详解

  web服务器的phpsession都给memcached这样你不管分发器把ip连接分给哪个web服务器都不会有问题了配置方法很简单就在php的配置文件内增加一条语句就可以了不过前提你需要装好mem

扎赉特旗玉米全膜双垄沟播的苗期管理

扎赉特旗今年玉米全膜双垄沟播基本播种结束,进入了出苗阶段,苗全是玉米高产的关键。所以查田补苗是保证全苗的关键技术之一。技术员在田间发现了一些问题,针对现在的实际情况提出如下建议:  一、玉米全膜双垄沟

扎赉特旗玉米全膜双垄沟播的苗期管理

扎赉特旗今年玉米全膜双垄沟播基本播种结束,进入了出苗阶段,苗全是玉米高产的关键。所以查田补苗是保证全苗的关键技术之一。技术员在田间发现了一些问题,针对现在的实际情况提出如下建议:  一、玉米全膜双垄沟

一种新型实用打孔定点栽植器

播种秧苗是农事活动的一项重要内容,合理密植,均播匀栽是高产优质的重要条件。在已整好待播的平地、畦面、垄顶如何提高播种质量,实现均播匀栽,减轻劳动强度,提高劳动效率,是我们不懈的追求。基于此设想打孔定穴

一种新型实用打孔定点栽植器

播种秧苗是农事活动的一项重要内容,合理密植,均播匀栽是高产优质的重要条件。在已整好待播的平地、畦面、垄顶如何提高播种质量,实现均播匀栽,减轻劳动强度,提高劳动效率,是我们不懈的追求。基于此设想打孔定穴

知识大全 全面解析基于空间数据库的数据挖掘技术[1]

  随着GIS技术在各个行业的应用以及数据挖掘空间数据采集技术数据库技术的迅速发展对从空间数据库发现隐含知识的需求日益增长从而出现了用于在空间数据库中进行知识发现的技术——空间数据挖掘(Spatial

知识大全 组三做复式为什么经常输

组三做复式为什么经常输?哎这个不能死心眼,要一步步来adsl为什么IP经常重复?哦,哥们儿,这个是很正常的,你有没有发现啊,说的简单一点吧,就是你每次拨号完了以后你的IP都不一样了,这个是动态的IP不

知识大全 找一首歌里面有很多斗鱼炉石主播的名字

找一首歌里面有很多斗鱼炉石主播的名字原曲明明就改编后歌名叫我的炉石斗鱼炉石主播的头像卡牌怎么做的网易炉石传说助手能做这个可以改攻击血水晶什么的卡牌图片可以用自己的照片斗鱼炉石主播的金卡都是自己合的吗?

知识大全 知道IP和子网掩码,如何计算可用IP数量和可用的IP地址?

知道IP和子网掩码,如何计算可用IP数量和可用的IP地址?  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

小麦沟播的好处多

小麦沟播是旱、碱地的一项重要增产措施。沟播表现苗多、苗壮、根系发达,穗多,粒多,增产显著,而且稳定,并能增强麦苗越冬的抗寒性,使土壤水分肥料发挥更大增产效果。沟播小麦应掌握的关键技术是:(1)开沟:播