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

Slides:



Advertisements
Similar presentations
电子商务专业人才培养方案 五年制高职. 一、招生对象、学制与办学层次  (一)招生对象:初中毕业生  (二)学制:五年  (三)办学层次:专科.
Advertisements

3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
第 1讲 计算机网络概述.
P2P金融信用调查服务 2015年4月 诚信为先 中道厚德.
四資二甲 第三週作業 物件導向程式設計.
第 14 章 網路應用軟體: 傳輸、社群、通訊 著作權所有 © 旗標出版股份有限公司.
第十四章 軟體系統安全 課前指引 網際網路的發展將每台電腦串連成共通的網絡,而層出不窮的資訊安全問題使得如何在開放的環境中,實現軟體安全的議題,逐漸受到重視。就軟體安全的角度而言,可分為軟體安全的應用及實作兩方面。在軟體安全應用方面,主要討論如何安全地執行及操作應用軟體,就網路應用軟體而言,電子郵件與檔案傳送等軟體,已有許多相關的安全技術發展,另一項近年十分流行的網路應用服務-即時通訊軟體,其安全性問題亦日漸受到重視。
Peer-to-Peer Networks (P2P)
姓名:李雄 学号 : 班级:01五专(1)班 指导老师:聂哲、袁梅冷
MSN機器人的發展、應用與實作 資管三 B 葉小僑 資管三 B 李燕秋 資管三 B 洪培瑄
行政作用法 行政命令.
房地产企业(项目)银行融资 授信工作指引 2007年版.
计算机网络.
项目2-1 店铺的定位.
《电子商务师实验室》 电子商务交易模式之“B2C”.
講者:張俊豪 (註冊社工) 明愛香港仔綜合家庭服務中心 20/9/2008
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
P2P网络概述.
第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之二).
電子商務 11-1 電子商務概論 11-2 電子商務交易安全與 加密機制 11-3 電子商務交易付費機制
網站分級制度及過濾軟體 芳和國中資訊組唐韶鈴
許富雄律師 校園著作權            許富雄律師                 
八桥初中九年级思想品德课复习导学案之五---
類別與物件 Class & Object.
實驗四:單位轉換程式.
Ch02 視窗Swing套件 物件導向系統實務.
Java语言程序设计-图形用户界面设计(2)
第 14 章 網路應用軟體: 傳輸、社群、通訊.
Ch08 巢狀類別 物件導向程式設計(II).
P2P文件共享系统概览.
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
2018/11/15 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
例外處理(Exception Handling)
第5章 下载和上传Internet资源 2018/11/19.
第十一章 面向对象设计 第十二章 面向对象实现
驗證使用者 (與AD結合).
本單元介紹何謂變數,及說明變數的宣告方式。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
記事本 物件導向系統實務.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
职责链模式.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
Ch04 事件處理 物件導向系統實務.
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
异常及处理.
網路電話/網路電視簡介 P2P 簡介 如何避免連在網路上剛安裝完就中毒
P2P文件共享系统 制作人:李洁顺 指导教师:杨淑萍 张 霞.
CH04 視窗中元件排排坐 物件導向系統實務.
生活智慧王 樹德科技大學 資訊工程系 指導教授 : 陳毓璋 教授 小組成員: 劉上緯 翁維廷 洪文財.
C/C++/Java 哪些值不是头等程序对象
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
Multithread 多執行緒 以GUI為例了解物件以及Event
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第10章 資訊安全與倫理.
恢复本圣经追求小组成全训练 第一篇 被神圣真理构成的活力实行 总题:被真理构成 并传布真理的活力实行.
Network Technology 計算機概論 2011/01/06 參考自原始作者:蔡英德教授 2019/4/24.
國文課。 心盈老師悅耳的聲音陣陣傳至耳中,對漢升來說,根本就是午後最好的催眠曲。 「漢升!漢升!」 「老師,我沒有在睡覺。」 「你口水都快流到桌上了,還說沒有在睡覺。」 全班一陣大笑。 「今天回家的功課,每人交 一篇有關『木蘭詞』的報告 ,300字以上。」 頓時,全班哀號遍起。
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 Java语法基础.
業務員 傷害險通報作業 新光人壽內網-產險傷害險通報P2~P4 【個人】傷害險通報作業P5~P10 【團體】傷害險通報作業P11~P16
辅导课程十一.
第二章 Java基本语法 讲师:复凡.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
基隆市東光國民小學 資訊暨網路智慧財產權之認識.
第2章 Java语言基础.
第二章 Java基础语法 北京传智播客教育
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
经济管理类专业核心课程 B2B平台推广 2019/11/11.
Summary
Presentation transcript:

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

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

P2P的现状及发展

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

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

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

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

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

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

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

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

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

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

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

JXTA的安装和配置

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

二、CMS工作方式

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

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

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

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

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

开发步骤 二、设计主界面 对象 类型 属性设置 属性名 属性值 search JPanel Text 搜索 share 共享 JLabel1 搜索关键字 searchKey JTextField 空 JList1 JList Border TitledBorder1 Model result_listModel JButton1 JButton 下载 Jbutton2 共享内容 JList2 TitledBorder2 file_listModel Jbutton3 移去内容

三、搜索实现 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());

四、下载实现 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;

四、下载实现 /** * 下载完成时被调用 */ 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);

五、共享实现 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()); }

五、共享实现 取消原有共享内容,使用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();

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