为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于P2P的文件共享系统的设计与实现(1)

2012-04-10 5页 pdf 570KB 36阅读

用户头像

is_751497

暂无简介

举报
基于P2P的文件共享系统的设计与实现(1) 收稿日期 :2009 - 07 - 02 ;修回日期 :2009 - 10 - 21 基金项目 :国家自然科学基金 (60773102) 作者简介 :范会波 (1985 - ) ,男 ,山东烟台人 ,硕士研究生 ,研究方向 为 P2P 网络、P2P 缓存协作 ;张新有 ,副教授 ,研究方向为 P2P 技术、 新型网络体系结构、网络管理。 基于 P2P 的文件共享系统的设计与实现 范会波 ,张新有 (西南交通大学 信息科学与技术学院 ,四川 成都 610031) 摘 要 :随着网络技术的发展 ,人们可以从网络中获取越来越...
基于P2P的文件共享系统的设计与实现(1)
收稿日期 :2009 - 07 - 02 ;修回日期 :2009 - 10 - 21 基金项目 :国家自然科学基金 (60773102) 作者简介 :范会波 (1985 - ) ,男 ,山东烟台人 ,硕士研究生 ,研究方向 为 P2P 网络、P2P 缓存协作 ;张新有 ,副教授 ,研究方向为 P2P 技术、 新型网络体系结构、网络管理。 基于 P2P 的文件共享系统的与实现 范会波 ,张新有 (西南交通大学 信息科学与技术学院 ,四川 成都 610031) 摘 要 :随着网络技术的发展 ,人们可以从网络中获取越来越多的资源。特别是多媒体技术的发展更是推动了人们对信 息共享的需求。对于企业内部来说 ,用户之间资源共享是必不可少的 ,而企业员工的计算机存储设备利用率普遍不高 ,存 在一定程度的浪费。文中将 P2P 技术与网络应用中的文件共享相结合 ,整合空闲的存储资源 ,实现一个基于 P2P 的文件 共享系统。提高了企业用户之间资源共享效率 ,降低企业的存储成本。目前 , P2P 技术越来越成为当前技术的热点 ,解决 了许多传统网络应用中的难题。 关键词 :P2P ;文件共享 ;套接字 中图分类号 : TP393        文献标识码 :A       文章编号 : 1673 - 629X(2010) 03 - 0048 - 04 Design and Implementation of File - Sharing System Based on P2P FAN Hui2bo ,ZHAN G Xin2you (School of Information Science and Technology ,Southwest Jiaotong University ,Chengdu 610031 ,China) Abstract :With the rapid development of computer technology ,people can acquire more and more resources from the network. Now , the development of multimedia technology which makes the behavior of sharing be developed to a higher level. For the enterprise , employees share resources is essential ,the equipments of storage in computer don’t be utilized enough. This paper combines the P2P technoes and file - sharing of network application , unite the idle storage resources ,implements a file sharing system based on P2P , reduces storage costs , making file sharing easily. At present , P2P become a technical hotspot in the world which resolved many of problems of the tradi2 tional web application. Key words :peer - to - peer ;file sharing ;socket 0  引  言 进入网络时代后 ,网络规模逐渐增大。网络用户 可以方便地获得丰富的信息 ,用户之间共享资源、互相 交流也变得越来越普遍。在这种局势下 ,文件共享就 成为人们获取大量资源的一种有效途径 ,也是早期 P2P( Peer - to - Peer Network ,对等网络) 研究和应用 的一个主要方向。可以说 ,正是文件共享的需求激发 了 P2P 研究的热潮。在传统的 C/ S 结构中实现文件 共享需要服务器的参与 ,客户端将所要共享的文件内 容上传到某个特定的服务器 ,用户就可以到这个服务 器上查找、下载自己所需要的文件。所有的资源都存 储在服务器上 ,客户端必须通过服务器连接下载 ,这就 对服务器的性能提出了很高的要求 ,使服务器成为整 个系统的瓶颈 ,严重影响了共享资源的用户数目以及 下载资源的速度。而 P2P 则改变了 C/ S 的网络体系 结构 ,将“中心”的服务器移到了“边缘”的客户机上[1 ] 。 系统中的每一个节点的地位都是平等的 ,通过节点之 间的相互操作 ,就可以完成文件的共享等相关工作。 该论文就实现了一个企业内部基于 P2P 的文件 共享系统 ,该系统提高了文件检索和共享的效率 ,同时 解决了服务器瓶颈的问题。由于 Java 语言对网络编 程的很好支持及其特有的跨平台性 ,本系统采用了 Ja2 va 作为开发语言 ,采用 Eclipse 作为开发平台。Eclipse 是一个高效的、开源的 Java 开发平台 ,它的安装包集 成了 Java 开发环境的插件 JDT[2 ] 。 1  典型的 P2P 系统 从 1999 年至今 ,P2P 系统正逐渐成为研究和应用 的热点。P2P 共享系统就是通过网络将端用户设备共 第 20 卷  第 3 期 2010 年 3 月           计 算 机 技 术 与 发 展 COMPU TER TECHNOLO GY AND DEVELOPMEN T         Vol. 20  No. 3Mar.  2010 享的资源整合起来 ,实现大规模的文件共享和存储[3 ] 。 现在已有一些比较著名的系统如 : Napster , Gnutella , Kazaa ,Morpheus ,Chord ,Bit Torrent 等。以下是两种典 型的 P2P 系统 : (1) Napster。 Napster 采用的是部分集中式的节点组织结构。 并没有完全取消服务器 ,只是弱化了服务器的功能[3 ] 。 在 Napster 中 ,节点在加入系统时将告诉服务器自己机 器上所共享的文件 ,服务器并不存储这些文件的具体 内容 ,而只是保存这些文件的元数据。当一个客户机 查找某个文件时 ,先向服务器提出请求 ,服务器根据自 己保存的元数据查找到文件所在的节点 ,将该节点的 相关信息返回给客户机[4 ] 。客户机然后直接与文件所 在的节点建立连接 ,下载文件。采用 Napster 除了可以 快速定位文件之外 ,还可以方便地实现服务的商业化。 图 1 表示了 Napster 系统结构图。Client1 先向 Server 发送询问 (Query) ,Server 查询用户请求的资源 , 将结果 (共享文件地址 ,如 Client2) 通过 Reply 返回 Client1 ,之后 Client1 直接从 Client2 获取所需要的文 件。 图 1  Napster 系统结构图 (2) Gnutella。 与 Napster 不同 , Gnutella 取消了以服务器为核心 的目录式结构 ,而是采用了泛洪算法 ( Flooding) ,按宽 度优先原则搜索资源的位置[5 ] 。要查找某个文件 ,节 点首先向自己相邻的活动节点以广播方式发送查询请 求包。其他节点在接到包后检查本地是否有符合条件 的文件 ,如果有 ,则按查询请求包的路径返回一个响应 包 ,该响应包中包括节点的 IP 地址、服务端口号等信 息 ;如果没有 ,则节点将该查询包发送给它的邻节点 , 直到查询包的 TTL ( Time To Live) 计数器减为 0 为 止 ,该计数器中数值是由查询包所发起的节点设置的 , 以防止该查询无限制地转发下去[6 ] 。 发起查询的节点收到查询响应包后 ,则根据包中 的信息直接与目标节点建立连接 ,下载文件。图 2 表 示了 Gnutella 查询过程。 图 2  Gnutella 查询过程 2  系统总体结构及实现 2. 1  总体结构 本系统主要用于企业网络或园区网内部用户共享 资源。采用 P2P 技术保证用户的随时接入、离开不会 影响到系统的总体结构。为避免企业的财务、人事等 重要文件被不相关人员获知 ,系统引入了权限管理。 用户注册时用户名的开头应为部门的首字母 (如研发 部为 YF) ,服务器根据用户的职务和部门赋予用户不 同等级的权限 ,用户在上传文件时必须对文件设置权 限并经服务器核实 (文件的权限不高于上传文件用户 自身的权限) ,这样保证了只有自身权限大于文件权限 的用户方可下载文件。 另外 ,如果用户上传的文件只能本部门或指定部 门人员下载。用户可在上传界面选择指定的部门 ,客 户端会在上传消息的头部加注指定部门的代号。如选 择研发部 ,上传消息头部后会加注“YF”,服务器会限 定只有研发部的人员能下载该文件。 为了提高信息的检索效率 ,系统采用了一个弱化 功能的服务器。服务器仅保存当前在线客户端所共享 文件的相关属性 (如文件名及权限、类型、大小、文件所 在的客户端) 而不保存文件的具体内容[7 ] 。同时 ,服务 器可接受客户端发来的反馈信息 ,对共享文件进行更 ·94·第 3 期            范会波等 :基于 P2P 的文件共享系统的设计与实现 新 ,最大程度保证共享的文件内容是正确的。总体结 构如图 3 所示。 图 3  P2P 文件共享系统结构 由于本系统针对企业内部用户 ,因此用户注册采 用实名制。用户共享的文件经服务器端权限检查通过 后 ,直接显示在服务器的文件列表里 ,其他满足用户的 权限即可通过 P2P 下载。 2. 2  系统工作流程 打开系统的客户端软件 ,登陆服务器便可获得服 务器返回的最新共享信息。节点向服务器发出搜索文 件请求 ,服务器将符合该请求的所有节点的 IP ,端口 号等信息发给该节点。然后节点 Ping 每一个 IP 地 址 ,根据返回时间与最近的节点建立连接 ,下载文件。 图 4 显示了客户端 A 共享文件 ,客户端 B 搜索、下载 文件的工作流程。 3  关键模块的设计与实现 为了方便用户使用软件 ,本系统采用了可视化的 界面设计 ,用户可以在客户端界面上控制本地文件的 共享 ,分类查看所有的共享文件 ,了解当前最多、最新 的下载文件 ,搜索下载本身所需要的资源。并可向服 务器反馈信息 ,方便共享文件的更新。其中文件上传、 搜索、下载是本系统的核心模块 ,其功能的实现主要基 于 socket 机制。 3. 1  文件分块及上传 在本系统中将每一个要共享上传的文件分成大小 为 100kB(除最后一块) 的文件块 ,并对每一个文件块 按顺序编号 ,文件块的名称为 :原文件名 + . part + 编 号。分好的文件块放在和源文件同一目录下。将文件 分块是为了在网络传输中更好地利用带宽 ,提高文件 传输的效率[8 ] 。 关键代码如下 : 图 4  客户端搜索、下载文件的工作流程 Private separatorFile (String sourceFile ,long blockSize) / / 根据原文件和文件块大小对文件拆分 {  get FileAttribute (sourceFile) ; / / 取出原文件的名称及大小  BlockNumber = getBlockNumber ( blockSize) ; / / 得到文件块的 总数  if (BlockNumber = = 1) / / 如果文件不足 100kB ,就一次性写入  long writeSize = 0 ; / / 每次写入的字节  long writtedSize = 0 ; / / 已经写入的字节   for (int i = 1 ;i < = BlockNumber ;i + + )   {   if (i < BlockNumber)   writeSize = blockSize ;/ / 取得每一次要写入的文件大小   else   writeSize = FileSize - writtedSize ;   Current File = generateSeparatorFileName ( sourceFile , i ) ;/ / 生 成拆分后的文件名    writeBlockFile ( sourceFile , Current File , writeSize , writted2 Size) ;/ / 向文件块写入内容   writtedSize = writtedSize + writeSize ;   }  } 文件拆分成功后 ,客户端通过 socket 机制同服务 器连接 ,然后将文件的名称及权限、类型、大小、本机的 IP 地址、端口号上传到服务器。为区别于客户端发往 服务器的其他消息 ,上传消息的头部加上一个标识符 ·05·                     计算机技术与发展                   第 20 卷 (sign =“up”) 。服务器收到消息后从其头部得到标识 符 ,然后利用 writeNodeToLink(LinkList ,otherMessage) 函数将其他信息写入一个链表中 ,上传的每个文件都 对应着链表中的一个节点。 3. 2  文件查看及搜索 本系统中的文件查看和搜索实现的原理是一样 的。用户可以在客户端查看网络中所有共享的文件信 息 ,也可查看指定日期共享文件 ,或者分类别查看共享 的文档、软件、代码、籍等。客户端发出查看信息后 , 服务器根据存储链表中“类型”关键字查找符合用户要 求的文件 ,并将结果返回给客户端。 本系统的搜索功能是基于关键字搜索 ,服务器接 收到用户要搜索的文件后 ,调用 searchContent (Lin2 kList ,filename) 函数到链表中查找是否有匹配的文件 , 如果找到 ,则将存储该文件的计算机 IP、端口、文件大 小等信息返回给客户端。用户可根据这些信息到相应 的计算机上下载所需文件。 3. 3  文件的下载与整合 用户搜索到自己所需的文件后利用服务器返回的 IP、端口号同对应的客户端连接。客户端启动 Share2 File 线程输出文件内容。用户则调用 DownFile 类将拆 分好的文件块下载到本地保存路径中 ,同时 ,用户界面 显示下载的进度和速度。 文件下载完毕后 ,本地保存的只是事先拆分好的 文件块 ,需要进一步将这些文件块整合成一个完整的 文件。 文件整合的关键代码如下 : private CombineFile () {   raf = new RandomAccessFile (sourcefile ,“rw”) ;   for (int i = 0 ;i < FileNum ;i + + )   {   raf . seek(writtedFile) ;   fis = new FileInputStream(separatedFilesAndSize[ i ] [ 0 ]) ;/ / 已 下载的文件块按序号依次将内容写入本地文件   while ( (len = fis. read(bt) ) > 0)   {   raf . write (bt ,0 ,len) ;  }   fis. close () ;   writtedFile = writtedFile + Long. parseLong ( separatedFile2 sAndSize[i ] [ 1 ]) ;   }  } 3. 4  系统运行 使用该系统可以方便企业内部用户交流技术 ,共 享本地计算机的资源。用户不必将企业的数据资源全 部保存到本地 ,通过本系统可实现对数据的“所得即所 需”。并且在企业内部使用时可以达到很高的下载速 度 ,大大节省了用户的时间。 图 5 为软件的下载界面。 图 5  P2P 文件共享系统下载界面 4  结束语 现代的计算机技术日新月异 ,企事业内部的计算 机性能有了很大的提高 ,很多计算机闲置了大量的资 源。经实际应用证明该系统很好地整合了这些闲置的 资源 ,提高资源的利用率 ,节省了企业用于数据存储方 面的开销。 系统的服务器采用多线程实现 ,理论上可以无限 制地接入客户端。并且文件的下传、下载都是在客户 端之间进行 ,有效解决了服务器的瓶颈问题 ,不会造成 网络拥塞。当然该系统对于文件安全还应该有更深入 的研究。 参考文献 : [ 1 ]  贾杏丹. P2P 网络搜索技术研究[J ] . 计算机应用研究 ,2006 (3) :31 - 34 . [2 ]  Sun Yan , Tang Di. An Algorithm for Curve Clipping Against the Rectangular Window[J ] . Computer Applications and Soft2 ware ,2003 ,20 (5) :35 - 36 . [3 ]  陈 姝 ,方滨兴 ,周勇林. P2P 技术的研究与应用[J ] . 计算 机工程与应用 ,2002 (13) :25 - 26 . [ 4 ]  苗 坤 ,张 毅 ,左 娟. 基于 J XTA 的 P2P 文件共享系统 [J ] . 计算机系统应用 ,2009 (2) :37 - 39 . (下转第 55 页) ·15·第 3 期            范会波等 :基于 P2P 的文件共享系统的设计与实现 field 神经网络就会找到 google ,也就是说 Hopfield 神经 网络有很强的纠错能力。它会找到和输入单词最接近 的记忆[9 ] 。 再举一个简单的例子并说明后台运行原理 : 首先让 Hopfield 神经网络记忆如下单词 :ccc、bbc、 bba ,如果输入的是 abc ,那么通过肉眼比较可以看出 bbc 和输入的 abc 最相似 ,其次相似的是 bba 和 ccc。通 过 Hopfield 神经网络的联想记忆也可以得到相同结 论 ,如图 5 所示。 图 5  Hopfield 神经网络的联想记忆 可以看出 Hopfield 神经网络的联想记忆会根据用 户的输入找到它最相似的结果。 3. 2  运行原理 算法运行原理如下 : 用户输入的 abc 可以先转换为二进制如 a 的二进 制表示为 1100001 ,整个字符串可以用 1 和 0 的矩阵表 示。 abc 表示如下 :   把 bbc、bba 和 ccc 也表示为 : 1  1  1 1  1  1 0  0  0 0  0  0 0  0  0 0  1  1 1  0  1    1  1  1 1  1  1 0  0  0 0  0  0 0  0  0 1  1  1 0  0  1 1  1  1 1  1  1 0  0  0 0  0  0 0  0  0 1  1  0 0  0  1 1  1  1 1  1  1 0  0  0 0  0  0 0  0  0 1  1  1 1  1  1 可以看出 bbc 和用户给的 abc 的矩阵也最接近。 通过 Hopfield 神经网络算法就会发现 abc 会最快的逼 近到 bbc ,那么 bbc 就是最相似的解。 4  结束语 文中介绍了用 Hopfield 联想存储器知识和 eclipse 插件机制来搭建嵌入在 eclipse 开发工具中一个知识可 拓展的动态帮助插件 ,实现根据残缺不全的 java 代码 联想到完整的 java 代码的功能 ,能够给程序员编程带 来极大的方便 ,其在计算机代码编程中有着良好的应 用前景和发展方向。 下步笔者会努力做进一步的探索和实践。 参考文献 : [1 ]  高行山 ,叶天麒. CPN 神经网络在结构识 别中的应用[J ] . 微机发展 (现更名 :计算机 技术与发展) ,1999 ,9 (2) :28 - 29 . [2 ]  徐耀群 ,包  丹 ,甲继承. 一种联想记忆网 络研究[J ] . 哈尔滨商业大学学报 :自然科 学版 ,2008 ,24 (1) :77 - 80 . [3 ]  姜国均. Hopfield 网络解 TSP 的改进算法 [J ] . 浙江大学学报 :理学版 ,2001 ,28 (2) : 160 - 163 . [ 4 ]  Cao Jinde. Global exponential stability of Hopfield neural networks[J ] . Internat J Sys2 tems Sci ,2001 ,32 :233 - 236 . [ 5 ]  Talavan P M ,Javier . Parameter setting of the Hopfield network applied to TSP[J ] . Neural Networks ,2002 ,15 :363 - 373 . [ 6 ]  Hopfield J J . Neural networks and physical    systems with emer2gent collect computafional abilities[J ] . Proc Nail Acad Sci ,1982 ,79 (8) :2554 - 2558 . [ 7 ]  Rehn M ,Sommer F T. Storing and restoring visual input with collaborative rank coding and associative memory[J ] . Neuro2 computing ,2006 ,69 :1219 - 1223 . [ 8 ]  荣秋生 ,潘梅森 ,颜君彪. 基于 Hopfield 神经网络的图象矢 量量化[J ] . 微计算机信息 ,2007 (2 - 3) :301 - 302 . [9 ]  钟守铭 ,杨 烨. Hopfield 型神经网络 k - 全局稳定性[J ] . 电子科技大学学报 ,1995 ,24 (6) :647 - 651 . (上接第 51 页) [ 5 ]  贾 磊 ,张新有 ,李 娜. 基于 J XTA 模块的 P2P 应用研究 [J ] . 计算机技术与发展 ,2009 ,19 (5) :238 - 241 . [6 ]  Liang Y D ,Brasky B A. A New Concept and Method for LineClipping[J ] . ACM Transactions on Graphics ,1984 ,3 (1) : 21 - 22 . [7 ]  罗 熹. P2P 技术的应用与安全[J ] . 中国科技信息 ,2008 , 17 (6) :6 - 8 . [ 8 ]  Druschel P ,Rowstron A. PAST :A large - scale ,persistent peer - to - peer storage utility [ C ]/ / HotOS VI , Schoss Elmau , Germany :[ s. n. ] ,2001 :23 - 24 . ·55·第 3 期           周爱武等 : Hopfield 在计算机编程中的应用与研究
/
本文档为【基于P2P的文件共享系统的设计与实现(1)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索