第
1 0 霸期 年3月
2
0
0
2
O0MP1厂rER TECHN0I AND DEvELoP] NT
计算机技术与发展
V01.20 No.3 Mar
. 2010
基 于 P2P的文件 共 享 系统 的设 计 与 实现
范会 波,张新有
(西南交通大学 信息科学与技术学院,四川 成都 610031)
摘 要:随着网络技术的发展,人们可以从网络中获取越来越多的资源。特别是多媒体技术的发展更是推动了人们对信
息共 享 的需求 。对 于企业 内部来说 ,用 户之 间资源共享是 必不 可少的 ,而企 业员工 的计 算机存 储 设备 利用 率普 遍不 高 ,存
在一定 程度的浪 费。文 中将 P2P技 术与 网络应 用 中的文件共 享相结 合 ,整 合空 闲 的存 储 资源 ,实 现 一个 基 于 P2P的文件
共享系统。提高了企业用户之间资源共享效率,降低企业的存储成本。目前 ,P2P技术越来越成为当前技术的热点 ,解决
了许多 传统 网络 应用 中的难题 。
关键 词 :P2P;文 件共享 ;套接字
中图分类号 :TP393
文献标 识码 :A
文 章编号 :1673—629X(2010)03—0048一O4
Design and Im plem entation of File’。Sharing System
Based on P2P
FAN Hui-bo,ZHANG Xin-you
(School of Information Science and Technology,Southwest Jiaotong University,Chengdu 610031,China)
Abstract:W iththe rapid developmentof computertechnology,people can acquiremore andmore l"esoLu-o~ from the network.Now 。the
development ofmultimediatechnologywhichmakesthe behavior of sharinghe devdopedtOahigherleve1.Forthe enterprise,em ployees
shale re∞urces is essentia1.the equipments of storage in computer don’t be utilized enough.TKs paper combines the P2P teehnoes and
file— sharing of network application, unite the idle s~rage re~)1.1l"CeS,im plem ents a file sharing s~tem based on P2P,reduces storage
COSTS,making file sharing easily.At present,P2P becom e atechnicalhotspotinthe worldwhich resDlved manyofproblemsofthetradi.
tional web application.
Key w0rds:peer—to—peer;file sharing;socket
O 引 言
对服务器 的性能提 出了很高的要求 ,使服务器成 为整
进入 网络时代后 ,网络规模 逐渐增 大。网络用 户
个系统 的瓶颈 ,严重影 响了共 享资源 的用户数 目以及
可以方便 地获得丰富的信息 ,用户之间共 享资源 、互相
下载资源 的速度 。而 P2P则改 变 了 C/S的网络体 系
交流也变得越来越普遍 。在这 种局势下 ,文件共享 就
结构 ,将“中心”的服务器移到 了“边缘”的客户机上…1。
成为人 们获 取 大量 资 源 的一种 有 效途 径 ,也是 早期
系统中的每一个节点 的地位 都是平 等的 ,通过节点之
P2P(Peer—to—Peer Network,对 等 网络)研究 和应用
间的相互操作 ,就可以完成文件的共享等相关工作。
的一个主要方 向。可以说 ,正是 文件共 享 的需求激 发
该论 文就实 现 了一个 企业 内部基 于 P2P的文件
了 P2P研究 的热潮 。在传统 的 C/S结 构 中实 现文件
共享系统 ,该 系统提高了文件检索和共享 的效率 ,同时
共享需要 服务器的参与 ,客户端将所要 共享的文件 内
解决 了服务器瓶 颈的 问题 。由于 Java语 言对 网络编
容上传到某个特定的服务器 ,用户就 可以到这个 服务
程的很好支持及其特有的跨平 台性 ,本系统采用 了 Ja.
器上查找 、下载 自己所需要 的文件。所 有的资源都存
va作为开发语 言 ,采用 Eclipse作 为开发平 台。Eclipse
储在服务器上 ,客户端必须通过服务器连接下载 ,这就
是一个高效 的、开源 的 Java开发 平 台,它的安 装包集
成了 Java开发环境的插件 JDTE 。
收稿日期 :2009—07—02;修回日期 :2009—10—21
作者简介:范会波(1985一 ),男 ,山东烟台人 ,硕士研究生 ,研究方 向
吴:要妻 竺科学 0 77 31 02 ) 一 + 1典型的P2P系统
为P2P网络、P2P缓存协作;张新有,副教授,研究方向为P2P技术、
~
从 1999年至今 ,P2P系统正 逐渐成 为研究 和应用
… 。
新型网络体系结构、网络管理。
的热点 。P2P共享系统就是通过网络将 端用 户设备共
第 3期
范会波等 :基 于 P2P的文件共享系统的设计与 实现
·49 ·
享 的资源整合起 来 ,实现大规模 的文件共享和存储 _3 J。
现在 已有一 些 比较著 名 的 系统 如 :Napster,Gnutella,
Kazaa,Morpheus,Chord,BitTorrent等 。以下是两种典
型的 P2P系统 :
(1)Napster。
Napster采用 的是 部 分 集 中式 的节 点 组织 结 构。
并没有完全取消服务器 ,只是弱化 T]]l/务器 的功能[引。
在 Napster中,节点在加 入系统 时将告诉服务器 自己机
器上所共享 的文件 ,服务器 并不存 储这些 文件 的具 体
内容 ,而 只是保存这些 文件 的元 数据 。当一个客户 机
查找某个文件时 ,先向服务器提 出请求 ,服务器根据 自
己保存 的元数据查找 到文件所在 的节 点 ,将该节点 的
相关信息返 回给客户机 L4 J。客 户机然后直接与文件所
在的节点建立连接 ,下载文件。采用 Napster除了可 以
快速定位文件之外 ,还可以方便地实现服务 的商业 化。
图 1表示 了 Napster系统 结 构 图。Clientl先 向
Server发送询问(I~ery),Server查询用户请 求的资源 ,
将 结 果 (共 享 文 件 地 址 ,如 Client2)通 过 Reply返 回
Clientl,之后 Clientl直接 从 Client2获 取 所需 要 的 文
件。
图 1 Napster系统 结 构 图
(2)GnuteUa。
与 Napster不 同,Gnutella取消 了 以服 务器为核 心
的 目录式结构 ,而是采 用 了泛洪算 法 (Flooding),按 宽
度优先原则搜 索资源 的位 置 J。要查找某 个文件 ,节
(a)A点发 出查询请求 (b)经 中间节点转发
(c)B点 响应查询请求 (d)A和 B数 据传输
图 2 Gnutella查询 过 程
2 系统总体结构 及实现流 程
2.1 总体结构
本系统 主要用 于企业 网络或园区网 内部用 户共享
资源。采用 P2P技术 保证用户 的随时接入 、离开不会
影响到系统 的总体 结构 。为 避免企业 的财务 、人事 等
重要文件被不 相关 人员 获 知 ,系统 引人 了权 限管 理。
用户注册时用户名的开头应 为部 门的首字母 (如研 发
部为 YF),服务器根 据用户 的职务和部 门赋予 用户不
同等级的权 限 ,用户 在上传文件 时必须对 文件 设置权
限并经服务器核实 (文件 的权 限不高 于上传 文件用户
自身的权限),这样保证 了只有 自身权 限大于文件权 限
点首先 向 自己相邻 的活动节点 以广播方式发送查询请
的用户方可下载文件 。
求包 。其他节点 在接到包后检查本地是否有符合条 件
的文件 ,如果有 ,则按查询请求包 的路径返 回一个响应
包 ,该响应 包中包 括节点 的 IP地址 、服务端 口号等 信
息 ;如果没有 ,则节点将 该查 询包 发送 给它 的邻节 点 ,
另外 ,如果用户上传 的文件 只能本 部 门或指定 部
门人员下载。用户可 在上传 界面选择 指定 的部 门 ,客
户端会在上 传消息 的头部加注指定 部门的代号。如选
择研发部 ,上传 消息头 部后会 加注 “YF”,服务 器会 限
直到查 询包 的 1vrL(Time To Live)计 数 器减 为 0为
定只有研发部 的人员能下载该文件。
止 ,该计数器 中数值是 由查询包所发起的节点设置 的 ,
为了提高信息 的检 索效率 ,系统采用 了一 个弱化
以防止该查询无 限制地转发下去 【6J。
功能的服务器 。服务器仅保存 当前在线客户端所共享
发起 查询 的节点 收到查 询响应包 后 ,则根 据包 中
文件的相关属性 (如文件名及权 限 、类型 、大小 、文件所
的信息直接与 目标 节点建 立连接 ,下载 文件。图 2表
在的客户端 )而不保存文件的具 体内容 【7J。同时 ,服务
示 了 Gnutella查询过程 。
器可接受客 户端发来 的反馈信 息 ,对共享 文件 进行更
· 5O ·
计算机技术与发展
第 2O卷
新 ,最大程度保证 共享的文件 内容 是正确 的。总体结
关键代码如下 :
构如图 3所示。
客户端A
服务器
客户端B
①连接服务器
②上传共享信息
①
④搜索共享文件
一
⑤返 回搜索结果
一
⑥同客户端A 接并请求下载
⑦ 魏 居传输
图 3 P2P文 件 共 享 系统 结构
由于本系统针对 企业 内部用户 ,因此用 户注册采
用实名制 。用 户共享 的文件经服务器端权限检查通过
⑧ 下i l芄完成
后 ,直接显示在服务器 的文件列表里 ,其他满足用户 的
权限即可通过 P2P下载。
2.2 系统 工 作 流 程
打开系统的客户端 软件 ,登陆服务器便 可获得服
务器返 回的最新共享信息 。节点 向服务 器发 出搜索 文
件请求 ,服务 器将符合 该请求 的所有节 点的 IP,端 口
图 4 客户端搜 索、下载文件的工作流程
Private separatorFile(String source.File,long bloekSize)
//根 据原文 件和文 件块大 小对 文件拆 分
{
getFileAttribute(sour~File);//取 出原文件 的名称及大 小
BlockNumber=getBlockNumber(blockSize);//得 到 文 件块 的
号等信 息 发给 该节 点。然后 节 点 Ping每一 个 IP地
总数
址 ,根据 返回时间与最近 的节 点建立连接 ,下 载文件。
if(BlockNuml:~_r= =1)//如果 文件不 足 lOOkB,就一次 性写入
图 4显示 了客户端 A共享 文件 ,客 户端 B搜索 、下 载
long writeSize=O;//每次写入 的字节
文件的工作流程 。
3 关键模块的设计 与实现
为了方便用户使用 软件 ,本系统采用 了可视化的
界面设计 ,用户可 以在客户端 界面上控制本地 文件的
共享 ,分类查看所有 的共享 文件 ,了解 当前最 多、最新
的下载文件 ,搜索下 载本身所需要 的资源。并 可 向服
务器反馈信息 ,方便共享文件的更新。其 中文件上传 、
搜索 、下载是本 系统的核心模块 ,其功能 的实现主要基
于 socket机制。
3.1 文件分块及上传
long writtedSi~=0;//已经写入 的字节
for(int i=1:i< =No&Number;i++)
t
if(i
第 3期
范会波等 :基 于 P2P的文件共享系统 的设计与 实现
·5l ·
(sign=“up”)。服务器 收到消息 后从其头 部得到标识
部保存到本地 ,通过本系统可实现对数据的“所得即所
符 ,然后 利用 writeNodeToLink(LinkList,otherMessage)
需”。并且在企业 内部使用 时可 以达 到很高 的下载 速
函数将其 他信息写入 一个链表 中 ,上传 的每个文件 都
度 ,大大节省 了用户的时问。
图 5为软件的下载界 面。
对应着链 表中的一个节点 。
3.2 文件查看及搜索
本系统 中的文 件查 看和 搜索 实现 的原 理是 一样
的。用户 可以在客户端查看网络中所有共享的文件信
息 ,也可查看指定 日期 共享文件 ,或者分类别查看共享
的文档 、软件 、代码、书籍等。客户端发 出查 看信息后 ,
服务器根据存储链表中“类 型”关键字查找符合用户要
求的文件 ,并将结果返 回给客户端 。
本系统 的搜索功能是基 于关键 字搜索 ,服务器接
收 到用 户 要搜 索 的文 件 后 ,调 用 searchContent(Lin—
kList,filename)函数到链表 中查找 是否有匹配 的文件 ,
如果找到 ,则将存储该 文件的计算机 IP、端 口、文件大
小 等信息返 回给客户端 。用户可根据这些信息到相应
的计算机上下载所需文件 。
3.3 文件的下载与整合
用户搜索到 自己所需 的文件后利用服务器返 回的
IP、端 口号 同对应 的客户 端连 接。客户端 启动 Share—
File线程输 出文件 内容 。用户则 调用 DownFile类 将拆
分好的文件块下载到本地保 存路径 中 ,同时 ,用户界面
图 5 P2P文件共享 系统下栽界 面
显示下载的进度和速度 。
文件下载完毕后 ,本 地保存 的只是事 先拆分好 的
4 结束 语
文件块 ,需要进一步将 这些文件 块整合成 一个完整 的
现代 的计算机技术 日新月异 ,企 事业 内部 的计 算
文件。
文件整合的关键代码如下 :
privateCombineFile()
{
raf=new RandomA~ ile(soureefile,“rw”);
for(int i=O;i0)
}
raf.write(1ot,0,len);
}
fis.close();
writtedFile= writtedFile+ Long.parseLong f separatedFile-
sAndSize[i][1]);
}
}
3.4 系 统 运 行
参 考文 献 :
[1] 贾 杏丹 .P2P网络搜 索技术 研究 [J].计算 机应 用研 究 ,2006
(3):31—34.
[2] Sun Yah,Tang Di.An Algorithm for CB_rve Clipping Against
the Rectangular Window[J].Computer Applications and Soft—
ware,2003,20(5):35—36.
[3] 陈 姝 ,方 滨兴 ,周 勇林 .P2P技 术 的研 究 与 应用 [J].计算
机工 程与应 用 ,2002(13):25—26.
[4] 苗 坤 ,张 毅 ,左 娟 .基 于 Jx]1A的 P2P文件 共 享 系统
使用该 系统可 以方便企 业 内部用 户交流 技术 ,共
[J].计算 机 系统应 用 ,2009(2):37—39.
享本地计算机 的资源 。用户不必将企业 的数据 资源全
(下 转 第 55页 )
第 3期
周爱武等 :Hopfield在计算机编程 中的应用与研究
·55 ·
field神经 网络就会找到 google,也就是说 Hopfield神经
插件机制来搭建嵌入 在 eclipse开发工具 中一个知识可
网络有很强的纠错能力。它会 找到和输入单词最接近
拓展 的动态帮助插件 ,实现 根据 残缺不 全 的 java代码
的记 忆 【 。
‘
联想到完整的 iava代码 的功能 ,能够 给程序员 编程带
再举一个简单的例子并说明后台运行原理 :
来极大 的方便 ,其在计算机 代码 编程 中有着 良好 的应
首先让 Hopfield神经 网络记忆如下单词 :CCC、bbc、
用前景和发展方 向。
bba,如果输 入 的是 abc,那么 通过 肉 眼比较 可 以看 出
下步笔者会努力做进一步的探 索和实践。
bbc和输入 的 abc最相似 ,其次相似的是 bba和 CCC。通
过 Hopfield神 经 网络 的联想 记 忆也 可 以得 到 相 同结
参考文献 :
论 ,如图 5所示 。
4 结束语
文 中介绍 了用 Hopfield联想存储器 知识 和 eclipse
[1] 高行 山 ,叶天 麒 .CPN神 经 网络 在 结 构 识
别 中的应用 [J].微 机发 展 (现更 名 :计算 机
技术 与发展 ),1999,9(2):28—29.
[2] 徐耀 群 ,包 丹 ,甲 继 承 .一 种联 想 记忆 网
络研究 [J].哈尔 滨 商 业 大 学学 报 :自然 科
学版 ,2008,24(1):77—80.
[3] 姜 国 均 .Hopfield网 络解 TSP的 改进 算 法
[J].浙江 大 学 学 报 :理 学 版 ,200l,28(2):
160— 163.
[4] Cao Jinde.Global exponential stability of
Hopfieldneural networks[J].Intemat J Sys—
tems Sci,2001,32:233—236.
[5] TalavanPM ,Javier.Parameter settingofthe
Hopfield network applied to TSP【J].Neural
Netw orks ,2002,15:363—373.
[6] Hopfield J J.Neural networks and physical
systemswith emer-gent collectcomputafional abilitics[J].Proc
Nail Acad Sci。1982,79(8):2554—2558.
[7] RehnM ,Sommer FT.Storingand restoring visualinput、vim
collaborative rank coding and associative memory[J].Neuro·
computing,2006,69:1219—1223.
[8] 荣秋 生 ,潘 梅森 ,颜 君 彪 .基 于 Hopfield神 经 网络 的 图象 矢
量 量化 [J].微 计算机信 息 ,2007(2—3):301—302.
[9] 钟守 铭 ,杨 烨 .Hopfidd型 神经 网络 k一全 局 稳定 性 [J].
电子科技 大学学 报 ,1995,24(6):647—651.
(上接第 5l页)
[5] 贾 磊 ,张新有 ,李 娜 .基 于 JXTA模 块 的 P2P应 用研 究
[J].计算 机技术 与发 展 ,2009,19(5):238—241.
[6] Liang Y D,Brasky B A.A New Concept and Method for
LineClipping [J].ACM TransactionsonGraphics,1984,3(1):
21— 22.
[7] 罗 熹.P2P技术的应用与安全[J].中国科技信息,2008,
17(6):6—8.
[8] DruschelP,RowstronA. :Alarge—scale,persistent peer
— tO—peer storage utility[C]//l-lotOS VI,Schcss Elmau,
Germany:[s.n.],2001:23—24.