国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java對等計算實踐:基于 IP 多播的發現

2019-11-18 15:39:08
字體:
來源:轉載
供稿:網友

  要完成有用的工作,P2P 應用程序中的對等點必須能夠彼此發現對方并與對方交互。本文提供了一種基于 ip 多播的發現的實現。

  在軟件實體能夠參與具有 P2P 應用程序特征的直接的對等交互之前,該實體必須發現將要與之交互的適當的對等點。所有可行的 P2P 體系結構都提供一種針對發現問題的解決方案。在本文我將描述其中一種機制的實現。讓我們通過回顧來開始今天的討論。再訪發現 對等點發現使 P2P 應用程序中的對等點能夠彼此定位以便相互之間可以交互。實現對等點發現服務有多種方法。最簡單的機制是顯式點到點配置。這種機制通過要求每個對等點知道所有它可能與之交互的其它對等點,并與它們相連,來進行工作。點到點配置的主要優點是簡單。它的主要缺點是缺乏靈活性并且缺少擴展到對等點的大型網絡的能力。

  發現的另一個公共模型是使用中心目錄作為中介。該模型在許多傳統的、非 P2P 分布式類型的應用程序中間很流行,其優點是很好理解。對等點向中心目錄注冊自己的存在,并使用中心目錄定位其它對等點。這種模型的主要優點是易于治理和擴展的能力。但是,其集中化設計會導致單點故障,因此它對自然力或網上沖浪人數增加所帶來的危害缺乏抵御能力。

  許多流行的 P2P 應用程序使用網絡模型而不是中心目錄,在網絡模型中,單個對等點只知道局域網絡上的對等點身份。每個對等點都作為那些與之相連的對等點的目錄。對等點通過向相鄰對等點傳播目錄查詢并返回相關的響應來進行合作。這種模型的主要優點是沒有集中化。它的主要缺點是由于傳播查詢耗費了大量的網絡和處理能力。

  上面三種機制有無數種變體。不討論這些變體了,讓我們繼續前進并研究另一種發現機制。

  IP 多播發現

  就每個對等點維護自己的目錄這點而言,多播模型類似于網絡模型。但是,對等點不通過合作來實現大規模網絡查詢。另外,對等點利用網絡本身提供的特性(IP 多播)來定位和標識其它對等點。

  IP 多播是無連接和不可靠的(不象 TCP/IP 是面向連接和可靠的)。雖然它使用 IP 數據報;但是不象單播 IP 數據報那樣是從一臺主機發送到另一臺主機,多播 IP 數據報可以同時發往多臺主機。

  對等點定期使用 IP 多播來公布自己的存在。公布包含了它們的主機名和一個用于正常通信的端口。對此消息感愛好的對等點檢測這個消息后,抽取出主機名和端口號,并使用該消息建立一個通信通道。

  回顧已經足夠了。讓我們開始研究代碼吧。

簡單的客戶機與服務器

  我們將從一個簡單的示例開始,該示例演示了兩個進程如何使用 IP 多播進行通信。為了簡化演示,我將分別從客戶機和服務器進程這兩個方面來介紹示例。P2P 應用程序通常會實現這兩個進程,將它們劃分為客戶機或服務器并不輕易。

  在本例中,服務器進程進行循環并等待數據報包的到來。每接收到一個包,服務器就會向控制臺打印一條簡短的診斷消息。客戶機角色要簡單得多 — 它多播單個數據報包并退出。

  清單 1 和 2 說明了這兩部分是如何組合在一起的。代碼中的注釋說明了正在發生的事情。

  清單 1. 簡單服務器

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
// 230.0.0.1, port 7777.
MulticastSocket multicastSocket = new MulticastSocket(7777);
InetAddress inetAddress = InetAddress.getByName("230.0.0.1");
multicastSocket.joinGroup(inetAddress);
// Loop forever and receive messages from clients. PRint
// the received messages.
while (true)
{
byte [] arb = new byte [100];
DatagramPacket datagramPacket = new DatagramPacket(arb, arb.length);
multicastSocket.receive(datagramPacket);
System.out.println(new String(arb));
}
}
catch (Exception exception)
{
exception.printStackTrace();
}
}
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涟源市| 澎湖县| 奉节县| 常州市| 柳河县| 荥经县| 兴化市| 衡山县| 莱阳市| 鄂伦春自治旗| 清流县| 寿阳县| 邛崃市| 内乡县| 土默特左旗| 汉寿县| 桂平市| 桐庐县| 邯郸县| 吉安市| 喜德县| 庄河市| 西充县| 镇安县| 德保县| 江陵县| 科技| 礼泉县| 望奎县| 泗水县| 房山区| 博湖县| 中方县| 杨浦区| 南通市| 正定县| 札达县| 天水市| 桂林市| 长治县| 淮南市|