论文网首页|会计论文|管理论文|计算机论文|医药学|经济学论文|法学论文|社会学论文|文学论文|教育论文|理学论文|工学论文|艺术论文|哲学论文|文化论文|外语论文|论文格式
中国论文网

用户注册

设为首页

您现在的位置: 中国论文网 >> 计算机论文 >> 计算机应用论文 >> 正文 会员中心
 计算机应用论文   计算机理论论文   计算机网络论文   电子商务论文   软件工程论文   操作系统论文   通信技术论文
P2P文件共享系统的实现分析
摘 要:系统qt p2p file-sharing system (qps)是利用qt开发的p2p文件共享系统。qps采用p2p中的混合模式,此模式结合了集中目录式和纯分布式两者的优点,在实现上具有简易性,在共享度上具有很强的扩展性。qps的最大特点是加入了策略。这种策略能限制一些用户只下载而不共享资源的行为。策略的引入是为了鼓励用户与其他人分享自己的资源,而不仅仅是索取。入策略的qps不仅能比较有效的限制只下载不分享的行为,而且对系统的寿命也有相当程度的提高。
关键词:文件共享;p2p;策略;qt
  
  c/s式架构造就了一批著名的门户网站,如雅虎,新浪等。这些网站容易受到黑客的亲睐后果是服务崩溃。c/s式架构只有一个服务器或服务机群,服务器一旦崩溃,它提供的服务也将停止。而p2p式架构却正好相反,它没有服务器(相对c/s架构而言)或服务器是分布的,一个服务器崩溃了,其他的服务器照样能提供服务。这种架构能有效的抵抗ddos攻击,它的安全性有很可靠的保障。另外,采用p2p式架构的网络资源共享系统不但大大的减轻了单个服务器的负担,而且也提高了很大的安全性。人们也可以通过这种架构建立自己的信息天地,与其他的人分享自己的资源。
  
  1 系统设计实现的重点与难点
  
  系统qps在linux上用qt开发,系统设计原理和策略都并不复杂,但这不代表系统的实现也是简单的。对于系统的整个实现来说,有三个地方是最重要的,也是比较难的。先介绍系统运行流程:
  (1)group-leader peer运行,并连接上其他的任意某个group-leader peer;
  (2)ordinary peer连接(登陆)某个group-leader peer,并把所资源表发送个group-leader peer;
  (3)group-leader peer将已连接的其他pc的资源表发送给此ordinary peer;
  (4)ordinary peer浏览资源并选择下载或则向group-leader peer发送资源搜索请求;
  (5)group-leader peer将资源表中符合搜索的资源所在ordinary peer的ip发给请求ordinary peer,同时向其他以连接的group-leader peer发送搜索请求,其他的group-leader peer将资源ip反馈,收到反馈后再发送个搜索ordinary peer;
  (6)ordinary peer从获得的资源表中选择下载,即与另一个ordinary peer建立连接,下载完毕后断开连接。Www.11665.cOm
  从上面的过程可以看出,系统共有三个通信链路,分别是:
  (1)group-leader peer与group-leader peer之间的通信;
  (2)ordinary peer与group-leader peer之间的通信;
  (3)ordinary peer与ordinary peer之间的通信。
  
  三个通信链路上的信息都是不一样的。因此,必须给三个通信链路都制定相应的通信协议。qps不是多线程的,因此对每个通信套接字来说,都必须知道对方的套接字。这在实现上也存在一定的难度,这个是由开发工具而带来的。最后一个难度是nat穿透问题。为了解决不同局域网间的通信,这个问题的解决是必须的。由于开发硬件环境的限制,现版本的qps本没有考虑这个问题。也就是说,实现的版本是局域网内的。在此,需要指出的是,nat的问题并没有违背qps的目的。首先,qps只是当前的一个版本,以后可能会进一步完善;再者,在将来ipv6的推出就自然而然的解决了不同局域网内通信这一问题。
  
  2 实现过程
  
  针对上节的三个通信链路,必须要设计好三个通信协议。先看下qps中需要传输的各种信息。如图1:
  
  通信链路上的信息表示的意义如下:
  download request:文件下载请求信息;
  file data:文件数据;
  local share list:本地的共享信息列表,包括文件名,文件大小,下载次数等;
  share list:group-leader peer上的共享信息列表;
  search message:文件搜索信息,包括文件名及搜索跳数;
  search result:返回的搜索结果,包括文件名和文件所在ip;
  other leader msg:其他leader peer上的信息,包括连接ordinary peer数目和文件数量等;
  local share msg:和other leader msg一样。
  (1) 数据结构定义。
  为了实现以上三个通信协议,首先规定了一些数据结构,以区别不同的通信信息。个种数据结构如下:
  #define fileinfo 1//文件信息
  #define shareinfo 2//共享列表信息
  #define download3//下载请求信息


  #define search4//文件搜索信息
  #define leaderinfo 5//group-leader peer信息
  #define filedata6//文件数据
  #define max_size (2048*10) //文件数据的大小
  typedef struct
  {
  int type;//表示是何种信息,下同
  ulong size; //文件大小
  ulong downloadtimes; //文件下载次数
  char name[100]; //文件名
  }filemsg; //文件信息结构体
  typedef struct
  {
  int type;
  ulong size;//文件大小
  ulong downloadtimes;//文件下载次数
  char ip[20];//文件所在ip
  char name[100];//文件名
  }sharemsg; //共享信息列表结构体
  typedef struct
  {
  int type;
  ulong size; //文件大小
  ulong seek;//文件数据块在文件中的位置
char name[100];//文件名
  }downloadmsg;//下载请求结构体
  typedef struct
  {
  int type;
  ulong tips; //文件搜索跳数
  char name[100]; //文件名
  }searchmsg; //文件搜索结构体
  typedef struct
  {
  int type;
  ulong connectednumber;//连接数量
  ulong filenumber; //文件数目
  char ip[20];//group-leader peer的ip
  }leadermsg;//group-leader peer信息结构体
  typedef struct
  {
  int type;
  ulong seek;//文件数据块在文件中的位置
  ulong bytes; //buff中的实际字节数
  ulong size; //文件大小
  char name[100];//文件名
  char buff[max_size];//文件数据
  }filedata;//文件数据结构体
  (2)信息传输函数的声明。
  void uploadsharelist(const filemsg& file);//upload local share list to leader
  void download(const downloadmsg& msg);//download file data
  void search(qstring filename, uint tips);//search a file
  void downsharelist();//download other peers' share list from leader
  void otherleadersinfo();//get other leaders' info through the connected leader
  void searchback();//seach result back, read it
  void uploadfile(int sock);//upload the file data that downloader requested
  void receivelist(int sock);//receive peer's share list
  void sendsharelist(comsocket* socket); //send share list to peer -> socket
  void sendotherleaderinfo(comsocket* socket);//send other leaders' info to peer
  void sendleaderinfo(comsocket* socket);//send leader's info to some leader
  void search(int sock);//received search request from peer
  void remotesearch(searchmsg msg);//send search to logoned leader
  void leadersearch(int sock);//received leader's search request
  void searchback();// received search result from leader
  以上函数是根据上面的数据结构而声明的。每个函数都有一个对应的数据结构。这些函数是整个系统的核心。
  设计了解决通信问题的数据结构和函数的声明后,剩下需要做的便是具体编码,将声明的函数加以实现,最后测试其是否正确便真正意义上的解决了上面叙述的难点问题,也是核心问题。
  
  
  (3)用户接口。
  qps只给用户提供了简单的操作接口,但我相信这是足够的。具体的用户接口如下:
  连接选择:让用户选择想要连接的group-leader peer。
  上传数目设置:为了限制上传量,保障用户的系统资源(cpu,网络带宽等)。
  搜索设置:让用户输入文件名及搜索跳数。
  下载选择:双击文件名即可下载该文件。


  共享目录设置:让用户选择想要共享的目录
  下载目录设置:让用户选择下载文件放置的路径
  除了上述用户可以直接操作的接口外,还有些接口是用户不可操作的。这些接口是用来显示当前系统的运行情况。比如,下载显示用来显示当前正在下载的文件,包括下载速率,已下载文件的大小等;而下载完成列表显示的则是系统自启动以来下载的所有文件列表。对于许多的其他文件共享系统来说,它们都有丰富的接口,尽可能的让用户使用更简便。qps的设计和实现的主要目的是在原理和策略上挖掘网络资源,使得网络资源能够尽可能的广泛共享。因此,在界面上只做了基本的接口。
  (4)配置文件。
  为方便用户的各项设置,qps中也有许多的配置文件。这些配置文件在系统运行时会被自动的读取,相应的变量会被赋值。用户改变某个设置后,这项设置同样会被写入到配置文件中,并在下次运行时被读取。这类配置文件典型的是下载目录和共享目录的设置。系统运行时,会找到当前共享目录路径,并获取该目录下文件信息。还有一类配置文件是可作为用户输入的文本文件。比如leaders.dat这个文件就是用来让用户输入可以选择连接的group-leader peer ip的。记录文件被下载次数的配置文件对用户来说是不可更改的,这是为了防止用户恶意修改此文件以获得totalvalue,达到少共享文件就可以下载大量文件的目的。
  文件共享系统qps是在上面叙述的四点上一步一步加以实现的,其中也有考虑不全的地方,反反复复经过了几次修改。在提供基本功能上,工作重点都放在协议的实现上。由于qt开发平台没有对网络程序提供丰富的接口,许多的接口不得不自己一步一步实现并测试正确性。在这点上,对qps的实现确实用相当大的影响。当然,这带来的好处是二次开发比较简便,因为上层的接口都是已经实现了的,正确性很高。
  
  参考文献
  [1]陆正中,马进德,石正贵等.jbuilder 9软件开发项目实践[m].北京:清华大学出版社,2005:240-261.[2]james f.kurose,keith w.ross。计算机网络——自顶向下方法与internet特色[m].北京:高等教育出版社,2005:136-145.
  [3]robert flenner等,java p2p技术内幕[m]. 北京:电子工业出版社,2003:200-235.
  [4]许斌. jxta——java p2p网络编程技术[m]. 北京:清华大学出版社,2003:1-256.
  [5]oaks,traversat,gong. jxta技术手册[m]. 北京:清华大学出版社,2004:23-78.
  • 上一个计算机论文:
  • 下一个计算机论文:
  •  作者:叶晓琼 [标签: 文件共享 系统 实现 ]
    姓 名: *
    E-mail:
    评 分: 1分 2分 3分 4分 5分
    评论内容:
    发表评论请遵守中国各项有关法律法规,评论内容只代表网友个人观点,与本网站立场无关。
    高校校园网中P2P技术的应用及管理
    基于P2P的僵尸网络的检测技术
    P2P 网络结构模型探析
    基于P2P的流媒体技术研究
    基于结构化P2P的分布式数据流系统的查询处理
    试析基于P2P网络应用研究
    试析基于P2P的网络应用
    浅析基于P2P技术的校园网络应用研究
    基于查询处理模型的结构化P2P的分布式数据流
    试析P2P网络应用层多播树的建立及维护
    浅析P2P网络应用层多播树的建立及维护
    | 设为首页 | 加入收藏 | 联系我们 | 网站地图 | 手机版 | 论文发表

    Copyright 2006-2013 © 毕业论文网 All rights reserved 

     [中国免费论文网]  版权所有