1 / 30

P2P 文件共享系统

P2P 文件共享系统. 制作人 : 李洁顺 指导教师:杨淑萍 张 霞. 项目要求. 使用 JXTA 平台的 CMS 开发一个简单的文件共享系统,要求完成的基本功能包括: P2P 网络中搜索功能的实现; 下载功能的实现; 实现文件共享功能的实现; P2P 文件共享系统的主界面如下图所示,. P2P 的现状及发展. 一, P2P 概述.

fay
Download Presentation

P2P 文件共享系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. P2P文件共享系统 制作人:李洁顺 指导教师:杨淑萍 张 霞

  2. 项目要求 • 使用JXTA平台的CMS开发一个简单的文件共享系统,要求完成的基本功能包括: • P2P网络中搜索功能的实现; • 下载功能的实现; • 实现文件共享功能的实现; • P2P文件共享系统的主界面如下图所示,

  3. P2P的现状及发展

  4. 一,P2P概述 • P2P是peer-to-peer的缩写,peer在英语里有“(地位、能力等)同等者”、“同事”和“伙伴”等意义。P2P也可理解为“伙伴对伙伴”的意思,或“对等联网”。简单的说,P2P让人们通过互联网直接交互。这样,P2P就是人可以直接连接到其他用户的计算机、交换文件,而不是像过去那样连接到服务器去浏览与下载;它改变互联网现在的以大网站为中心的状态、重返“非中心化”,并把权力交还给用户。

  5. P2P看起来似乎很新,但是正如B2C、B2B是将现实世界中很平常的东西移植到互联网上一样,P2P并不是什么新东西。在现实生活中我们每天都按照P2P模式面对面地或者通过电话交流和沟通。事实上,网络上现有的许多服务可以归入P2P的行列。即时讯息系统譬如ICQ、AOL Instant Messenger、TomSkype、Yahoo Pager、微软MSN Messenger以及国内的OICQ是最流行的P2P应用。它们允许用户互相沟通和交换信息、交换文件。

  6. 二,P2P的现状 • P2P(peer-to-peer)已经不是什么新概念,现在已经有着无数网民使用着基于P2P技术开发的文件共享、网络交流等软件。P2P可以理解为“伙伴对伙伴”的意思,或称为对等联网。目前人们认为P2P在加强网络的交流、文件交换、分布计算等方面大有前途。  就给大家介绍几款05年比较火热的P2P下载软件,无论是下载MP3、电影、综艺节目、球赛还是软件,甚至一些在互联网中搜索不到的资源,这些软件都可以达到你的要求,让你真正享受到P2P点对点技术给你带来的乐趣。

  7. 将要推荐介绍的五款P2P下载软件分别为:PP点点通、百宝、BitTorrent Plus!II、酷狗(KuGoo)、电骡(eMule)。这几款软件在05年度,同时在线人数、下载次数、注册用户等都是排在前列的,而且各软件都有自己特点,都适合不同的用户群。下面就跟随笔者来了解一下各个软件的功能与使用。 • 05年P2P最为火爆的一年,网络上到处都可以看到P2P下载的身影,从大型的软件到刚刚上映的电影。虽然,这些给网友带来了极大的快感,但是也让更多版权人士把P2P作为眼中钉。现在,美国方面已经开始整顿P2P市场,比较知名的P2P软件“电驴”就在这场整顿中消失在美国的网络中。从中我们可以看到P2P的快感背后也不是那么风平浪静,今天可能是“电驴”明天呢?P2P这种优秀的文件传输方式难道就因为这个问题而会消亡在06年吗……

  8. 三,P2P的发展历程 • P2P的发展可分为以下三个阶段。 • 第一代的文件交换服务以Napster和BT独领风骚,其技术是建立一个大型的集中化 • 索引,对网络上所有的可用资源进行追踪。这种方法虽然相当有效率,让使用者可以存取到庞大的资源,但同时发生了最著名的官司:美国唱片业协会(RIAA)代表环宇音乐、索尼音乐、华纳音乐、百代唱片、BMG等七大唱片公司以违反版权保护法为由把Napster公司推上法庭,历时三年最终将Napster告倒,法院最终判定Napster侵权。

  9. 第二代分散式服务以国外的Kazaa和国内迅速崛起的POCO为代表。改为在电脑间发送搜索请求,一直到找到文件为止,然后再将信息传回搜索者的电脑。这种技术一开始相当不便,特别是数以百万计的搜索要求在网络上的每一台电脑间来回发送时,在高峰时段往往造成网络大塞车。后来通过随机方式选出品质较优的用户来作为节点服务器,用户可从节点服务器上获得peerlist,下载方法也越来越进步。但与第一代P2P软件命运截然不同的是,美国法院最近宣判,这种分散式的P2P应用是合法的,这种软件的散播者并未直接控制网络上所出现的行为。第二代分散式服务以国外的Kazaa和国内迅速崛起的POCO为代表。改为在电脑间发送搜索请求,一直到找到文件为止,然后再将信息传回搜索者的电脑。这种技术一开始相当不便,特别是数以百万计的搜索要求在网络上的每一台电脑间来回发送时,在高峰时段往往造成网络大塞车。后来通过随机方式选出品质较优的用户来作为节点服务器,用户可从节点服务器上获得peerlist,下载方法也越来越进步。但与第一代P2P软件命运截然不同的是,美国法院最近宣判,这种分散式的P2P应用是合法的,这种软件的散播者并未直接控制网络上所出现的行为。

  10. 第三代的P2P网络则是以eDonkey、emule、Morpheus为代表,比以前更为分散化。它采用“分散式杂凑表”的方法,基本上是对网络上某一特定时刻的文件进行快照(snapshot),然后将这些信息分散到整个网络里。为了找到特定的文件,搜索的要求先到达网络上的任何一台电脑,然后这台电脑就会再将它转到另一台有更多文件信息的电脑,第三台电脑可能就拥有文件本身,或者也可能再继续转到其他有正确信息的电脑。整个过程有点像依照线索循序问路而找到正确方向,而不是路上随便抓人问路。每个网络相关信息,会随电脑及文件的加入而持续更新。StreamCast2004年向哈佛学生BenWilkin及FrancisCrick买下这项技术。这两位前哈佛学生表示,他们的技术只要跳三至四次就可以在几百万台电脑的网络里找到任何文件,不管这个文件多么稀有。这种技术也让一些应用有了新的前景,例如网络电话。Neonet与eDonkey专注的都是文件交换,但SKYPE专注于网络电话。这种有效率的网络路由技术可用于快速连接网络电话,但也给传统电信运营商带来了冲击。第三代的P2P网络则是以eDonkey、emule、Morpheus为代表,比以前更为分散化。它采用“分散式杂凑表”的方法,基本上是对网络上某一特定时刻的文件进行快照(snapshot),然后将这些信息分散到整个网络里。为了找到特定的文件,搜索的要求先到达网络上的任何一台电脑,然后这台电脑就会再将它转到另一台有更多文件信息的电脑,第三台电脑可能就拥有文件本身,或者也可能再继续转到其他有正确信息的电脑。整个过程有点像依照线索循序问路而找到正确方向,而不是路上随便抓人问路。每个网络相关信息,会随电脑及文件的加入而持续更新。StreamCast2004年向哈佛学生BenWilkin及FrancisCrick买下这项技术。这两位前哈佛学生表示,他们的技术只要跳三至四次就可以在几百万台电脑的网络里找到任何文件,不管这个文件多么稀有。这种技术也让一些应用有了新的前景,例如网络电话。Neonet与eDonkey专注的都是文件交换,但SKYPE专注于网络电话。这种有效率的网络路由技术可用于快速连接网络电话,但也给传统电信运营商带来了冲击。

  11. 四,中国P2P的发展将走向何方? • P2P技术为互联网的发展带来了深远的影响,也为IT产业带来了无限的商机。对于P2P未来发展趋势的探讨和研究,一直是业界和学界关注的焦点之一。P2P在中国的发展并非一帆风顺,它经历了繁荣,也遭遇过停滞,目前正在迎接新一轮的发展。P2P在中国能否再创辉煌?谁将在新一轮的竞争中成为赢家?中国P2P的发展将会何去何从?  互联网领域的专业研究咨询机构——互联网实验室新近推出的《P2P的现状及发展趋势研究报告》,以丰富的资料研究和深入的案例分析,在立足P2P发展现状的同时,对国内外P2P的发展趋势做了全面客观的预测,对P2P企业所关心的一切关于P2P现状和发展趋势的问题,都给予了专业解答。

  12. 从目前的状况来分析,中国的P2P市场正处在自由竞争阶段,进入市场的企业无论是规模还是实力,都不相上下。因此,在较长的一段时期,中国的P2P市场将延续群雄逐鹿的竞争局面。互联网实验室认为,当前P2P行业标准尚未形成,而P2P的相关应用又及其广泛,技术门槛与经营门槛都相对较低,是这种竞争局面长期存在的主要原因。在尝试了P2P在即时通信、音乐共享与下载等方面的产品开发与经营后,P2P在中国的发展将会以探求P2P更多的商业应用为核心。在这方面,国外许多P2P企业就走在了前面。无论是协同办公,还是分布式计算,国外的P2P企业都有过比较成功的探索,为国内P2P企业提供了许多值得借鉴的经验。而国内立足于这两方面应用的P2P企业,数量很少,规模也远不及国外的竞争对手。事实上,面向企业的P2P应用,在中国市场是大有可为的。此外,在中国,电子商务的市场发展潜力无穷,在互联网实验室新近推出的《P2P的现状及发展趋势研究报告》中有数据显示:到2003年底,中国的电子商务市场B2B和B2C的交易总额将可能达到40亿美元之巨,B2B的年均增速为19.4%,而B2C的年均增速是27.4%,均呈倍数增长。这样广阔的发展前景,势必为P2P在电子商务领域的应用带来无限商机。从目前的状况来分析,中国的P2P市场正处在自由竞争阶段,进入市场的企业无论是规模还是实力,都不相上下。因此,在较长的一段时期,中国的P2P市场将延续群雄逐鹿的竞争局面。互联网实验室认为,当前P2P行业标准尚未形成,而P2P的相关应用又及其广泛,技术门槛与经营门槛都相对较低,是这种竞争局面长期存在的主要原因。在尝试了P2P在即时通信、音乐共享与下载等方面的产品开发与经营后,P2P在中国的发展将会以探求P2P更多的商业应用为核心。在这方面,国外许多P2P企业就走在了前面。无论是协同办公,还是分布式计算,国外的P2P企业都有过比较成功的探索,为国内P2P企业提供了许多值得借鉴的经验。而国内立足于这两方面应用的P2P企业,数量很少,规模也远不及国外的竞争对手。事实上,面向企业的P2P应用,在中国市场是大有可为的。此外,在中国,电子商务的市场发展潜力无穷,在互联网实验室新近推出的《P2P的现状及发展趋势研究报告》中有数据显示:到2003年底,中国的电子商务市场B2B和B2C的交易总额将可能达到40亿美元之巨,B2B的年均增速为19.4%,而B2C的年均增速是27.4%,均呈倍数增长。这样广阔的发展前景,势必为P2P在电子商务领域的应用带来无限商机。

  13. P2P系统的特征 • 网络中的用户知道其他用户的存在 • 在现有网络架构的基础上,构建了一个虚拟网络,对互联的各个节点的复杂性进行了抽象,不用考虑现有防火墙、NAT和特定网络服务的缺乏。 • 每个计算机用户既是服务器,也是客户端。 • 各个计算机用户可能形成组,成为一定数据和应用程序运行的共同体

  14. JXTA原理介绍 • 目的:就是直接为P2P提供支持和服务,被定义为一个为P2P应用程序和服务提供标准协议的开放式资源项目。 • 定义一套xml协议: • 该协议被设计用于提供对对等节点形成的动态网络所需的通用功能的支持,协议本身独立于操作系统、开发语言和网络传输协议。

  15. JXTA的安装和配置 • 下载地址: • http://download.jxta.org/build/release • JXTA的配置: • 第一次运行JXTA程序的时候,JXTA的自动配置工具就会显示出来,用于配置JXTA平台的网络环境,包括peer的信息、TCP/IP和HTTP的配置、Rendezvous和Relay peer以及安全信息。 • 在JXTA配置界面中,用户可以配置基本的、高级的信息,Rendezvous/Router和安全信息等。一般来说,用户只需要在基本信息面板中设置 peer的名称,在安全信息面板中设定用户名和密码就可以了.

  16. JXTA的安装和配置

  17. P2P文件共享系统 • CMS概述 • CMS(Content Manager Services)是一个在点组中的多个点之间共享内容的服务。该服务使得Peer可以共享自己的内容以及定位和获取其他Peer上的内容。CMS不仅为本地Peer管理被共享的内容,并能浏览和下载远程Peer的内容。 • 共享的内容由一个独一无二的内容ID以及一个内容广告表示,内容广告提供了有关被共享内容的元信息,例如名字、长度、MIME类型以及内容描述。当然目前的CMS搜索机制和内容的分发机制不是很强大。

  18. 二、CMS工作方式

  19. CMS提供的接口 1.SearchListener类:针对到本机上的搜索请求进行相应; 2.ContentManager类: 可以共享文件和取消文件共享。 3.ListContentRequest类:发送文件搜索请求 4.GetContentRequest类:文件下载请求类

  20. 接口介绍(一) • 一、SearchListener接口 • public void queryReceived() • 作用:当某个peer发出搜索请求,请求到达这台机器时,会激发queryReceived(String)方法,搜索到机器上的资源; • 可以把实现该接口的类对象作为生成的CMS的监听者;

  21. 接口介绍(二) • ListContentRequest抽象类 (1)public void notifyMoreResults() (2)public ContentAdvertisement[] getResults() (3)public void activateRequest() 作用:由该类对象发出搜索请求,构造函数带入组名和查询字符串; • 当更多结果到达时 • 方法(1)被调用; • 方法(2)获取搜索到的结果; • 方法(3)用于激发搜索请求; • 使用继承该抽象类的类对象,用于在组内进行制定字符串名的搜索;

  22. 接口介绍(三) • GetContentRequest抽象类 • (1)notifyDone():下载完成时被调用; • (2)notifyFailure():下载失败时被调用; (3)notifyUpdate(int percentage): 当文件中更多的部分被下载时被调用; 使用继承该抽象类的对象进行文件的下载;

  23. 接口介绍(四) • ContentManager类: 作用:可以共享文件和取消文件共享。 (1)ContentManager.share(File file); (2)ContentManager.unshared(File file);

  24. 开发步骤二、设计主界面

  25. 三、搜索实现 • 1. MySearchListener类作用监听其它peer对本机上资源的搜索,实现了接口SearchListener,实现接口下定义的方法queryReceived()方法,当某个peer发出搜索请求,请求到达这台机器时,会激发queryReceived(String)方法,搜索到机器上的资源; • class MySearchListener implements SearchListener { • public void queryReceived(String queryString){ • System.out.println("List request with query \"" + queryString • + "\" received."); • } • } • 2.当搜索结果到达时,搜索结果以ContentAdvertisement[]的形式存在,我们首先将结果放到类变量results中,然后将结果显示到一个JList的Model: result_listModel中; • protected void updateResults(ContentAdvertisement[] results) { • this.results = results; • //删除原有的结果 • result_listModel.removeAllElements(); • //插入新的结果到result_listMode中 • for (int i=0; i<results.length; i++) { • result_listModel.addElement(results[i].getName()); • } • }

  26. 四、下载实现 • VisibleContentRequest文件下载类从GetContentRequest类继承并实现ActionListener 接口; • 成员变量: • JDialog dialog:用于显示当前下载情况; • JProgressBar statusBar:先是当前下载进度; • JButton cancelButton:用于取消当前下载; • 对GetContentRequest类中下列方法重新实现: • notifyDone():下载完成时被调用 • notifyFailure():下载失败时被调用 • notifyUpdate(int percentage): 当文件中更多的部分被下载时被调用 • class VisibleContentRequest extends GetContentRequest • implements ActionListener{ • JDialog dialog; • JProgressBar statusBar = new JProgressBar(); • JButton cancelButton = new JButton("Stop"); • public VisibleContentRequest(JFrame parent, ContentAdvertisement source • , File destination){ • super(netPeerGroup, source, destination); • dialog = new JDialog(parent, "Downloading "+destination.getName()); • dialog.setSize(240, 80); • dialog.setLocation(400,400); • statusBar.setStringPainted(true); • dialog.getContentPane() • .setLayout(new FlowLayout(FlowLayout.CENTER)); • dialog.getContentPane().add(statusBar); • cancelButton.addActionListener(this); • dialog.getContentPane().add(cancelButton); • dialog.setVisible(true); • } • public void actionPerformed(ActionEvent ae) { • //handle the event caused by the "Stop" button being clicked • if(ae.getSource() == cancelButton) { • cancel(); • System.out.println("download of " + getFile() • + " cancelled by user."); • dialog.dispose(); • dialog = null; • } • }

  27. 四、下载实现 • /** • * 下载完成时被调用 • */ • public void notifyDone(){ • System.out.println("download of "+getFile()+" done."); • dialog.dispose(); • dialog = null; • } • /** • * 下载失败时被调用 • */ • public void notifyFailure(){ • System.out.println("download of "+getFile()+" failed."); • } • /** • * 当文件中更多的部分被下载时被调用 • */ • public void notifyUpdate(int percentage) { • statusBar.setValue(percentage); • } • }

  28. 五、共享实现 • 1.我们首先添加一个方法private void updateLocalFiles()用于将当前机器的CMS中共享的内容显示到jList2中:private void updateLocalFiles(){ • //ContentManager.getContent() 获取被当前peer共享的所有内容 • Content[] content = cms.getContentManager().getContent(); • //从jList2的Model中删除中原有的共享内容. • file_listModel.removeAllElements(); • //把当前的内容添加到jList2中 • for (int i=0; i<content.length; i++){ • file_listModel.addElement(content[i].getContentAdvertisement().getName()); • } • }

  29. 五、共享实现 • 取消原有共享内容,使用cms.getContentManager().getContent()当前peer共享的文件的ContentAdvertisement数组,然后使用cms.getContentManager().unshared(ContentAdvertisement content)方法将原有共享的内容去除共享。 • cms.getContentManager().unshared() • void jButton3_actionPerformed(ActionEvent e){ • try{ • cms.getContentManager().unshare(cms.getContentManager().getContent()[jList2.getSelectedIndex()]); • } catch(IOException ex){ • System.out.println("不能移去该共享文件"); • } • this.updateLocalFiles(); • } • }

  30. 程序扩展 • 本程序还有许多不足之处,还不能共享目录。还可以继续进行扩展。

More Related