版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计(论文)说明书题目:eMule网络文件系统开发随着计算机和网络的普及,单独工作、不需要和其他用户交互的软件越来越少,作为一项新兴的网络技术,P2P以其无与伦比的可伸缩性和对资源的利用率吸引着大众的系统会无法提供服务。而基于P2P的网络中,每个节点既可以为其它节点提供服务,也善。在这样的背景下,本文设计开发了eMule网络文件系统。系统采用P2P网络模型,在整个文件上传与下载过程中客户端不需要任何服其他多个客户端中下载所需的不同文件数据块,实现了多点上传与下载并行,极大提高了速度。载模块。客户端提供的功能主要包括:文件处理等功能。够检测错误数据恢复是否成功。在进行共享文件查找时,利用文件指纹可以精确的查找到所需的文件,避免文件同名而内容不同的情况。在上传下载过程中,系统使用文件分块、利用内存作下载数据缓存等多种技术。WiththepopularizationofUndersuchabackground,thistexthaslotofonlineclientatthesametime,achieveamoreuploadanddownloThesystemisdividedintothreepiecesofmodule:tfuzzyinquiry,fingerprintrecognitionoffile,wrongdaThesystemusespaperfingerprintrecognitiontechnologythatportsandmagneticdiscspace,dynamicadjustmentoffiletransferpacketsize,multithreading毕业设计(论文)报告用纸 1 1 2 2 2 3 3 32.2P2P的特点 3 32.3.1纯P2P模型 42.3.2带有一个简单发现服务器的P2P模型 42.3.3带有发现和查找服务器的P2P模型 42.3.4带有发现、查找和内容服务器的P2P模型 4 4 52.4.2动态发现模型 52.4.3目录发现模型 5 52.4.5多播模型 6 6 73.1P2P穿越 7 7 8 83.2多线程技术 3.2.1线程的组成 3.2.2创建一个线程 3.2.3线程的终止 3.2.4线程的调度 毕业设计(论文)报告用纸 3.6文件MD5校验 4.1系统采用的P2P模型 4.1.1客户端与客户端之间的发现 4.1.2客户端向服务端查询数据 4.3系统各组件的联系 4.3.1客户端上传下载模块到服务器的联系 4.3.3客户端指令监视模块到服务器的联系 5P2P文件传输系统的实现 5.4.1在线程中发送数据 5.5数据库操作模块 5.6.1文件下载 6系统安全与测试 6.2.1测试方法 毕业设计(论文)报告用纸 结论 桂林电子科技大学毕业设计(论文)报告用纸第1页共37页随着技术的不断发展,Internet上出现了各种各样的下载工具,正所谓五花八门,百家争鸣。下载软件虽然很多,但是他们的下载手段大致说来可以分成三大类,的HTTP和FTP下载,刚刚出现没多久然而已经风靡全球的P2P下载。件传输协议)的缩写,而HTTP则是HyperTextTransportationProtocol(超文本传输协专门用来下载,而HTTP的主要工作是用来浏览网页,不过也能用来下载。这两种下载方式的原理并不复杂,就是用户按照一定的规则(协议)和提供文件的服务器取得联系就HTTP、FTP等下载方式而言,一般都是首先将文件放到服务器上,然后再由服有用户的下载速度,如果某些用户使用了多线程下载,那对带宽的影响就更严重了,因此几乎所有的下载服务器都有用户数量和最高下载速度等方面的限P2P文件传输是通过一种传销的方式来实现文件共享的,它并不会完全从服务器下载这个文件的所有部分,而是根据实际情况成的部分,这就大大减轻了P2P文件传输服务器的负荷,也同时加快了下载速度,也就是说每台参加下载的计算机既从其他用户的计算机上下载文件,同时自身也向其他用户提供下载,因此参与下载的用户数量越多,下载速度也越高。文中首先论述了基于P2P网络的文件传输产生的背景和意义,接着介绍了P2P的相关理论知识。然后介绍了本系统的关键技术,包括软件的P2P穿越技术,多线程技术,体设计情况以及它们之间的联系。最后给出测试交换文件,而不是像过去那样连接到服务器去浏览与下载;它改变互联网现在的以大网站为中心的状态、重返“非中心化”,并把权力交还给用户。 桂林电子科技大学毕业设计(论文)报告用纸第2页共37页信的对象从人-人,人-机发展到机-机,其应用从家庭网络和传感器/执行器网络到军事上在标准化方面工作进展缓慢。目前P2PWG已经和GGF合并,由该论坛管理P2P计算入较大。Microsoft公司成立了Pastry项目组,主要负责P2P计算技术的研究工作,目WindowsVista操作系统中,也增加了最新的P2P研究成果来支持协同工作。2000年8应用开发商合作,开发P2P应用平台。2002年Intel发布了.Net基础架构之上的AcceleratorKit(P2P加速工具包)和P2P安全API软件包,从而使得微软.Net开发人员能够迅速地建立P2P安全Web应用程序。IBM公司也开展了基于P2P技术的研究,提研究意义。桂林电子科技大学毕业设计(论文)报告用纸第3页共37页本课题是一个使用P2P网络模型的文件传输系统,其思想是在不经过固作为路由转发的情况下,能够在Internet上任意两台电脑就可以直接通讯。处于不同子的有效方法,也是本毕业设计的关键技术之一。使用UDP“打洞”让两个处于不同子网的客户端能够使得远程数据传输成为可能。文件传输是将一个文件切割为若干小块,并且附加一些相关消息,传输给远程用户,当远程用户接收到这些被切割成小块的文件碎片后2P2P相关理论●服务器及网络的带宽决定了性能。每台服务器所能提供的信息数量受到自身存储空间的限制,而任意时刻它所能支持的客户端访问数量则既受到自身处理能●被发布信息的分布与生存期十分稳定。服务器只发布机器所有者想公之于众的信息,这些信息将会在该服务器上稳定地保存一段时间,并且该服务器通常也●被发布信息的存贮与管理比较集中、规范。互联网上所有可以公开访问的信息基本上都保存在服务器上,服务器根据适当的算法和规则管理本地信息,应答●每一个对等点具有相同的地位,既可以请求服务也可以提供服务,还可以具有路由器和高速缓冲存储器的功能,从而弱化了甚至取消了服务器的作用。●每一个对等点可以充分利用网络上其他对等体的信息资源、处理器周期、高速缓存和磁盘,各种资源都得到了较充分,均衡的利用。●每一个对等点可以随意地加入或退出网络。●带有一个简单的发现服务器的P2P模型 桂林电子科技大学毕业设计(论文)报告用纸第4页共37页●带有发现服务器和查找服务器的P2P模型●带有发现服务器、查找服务器和内容服务器的P2P模型纯P2P模型完全依赖于计算机(C/S模型中的客户)。这似乎是矛盾的,因为每个网络模型都像传统的C/S模型一样涉及到客户和服务器,但是纯P2P模型不依赖任何中心服务器而工作。一旦P2P应用程序下载到计算机的内存中,网络中的端就动态地发输数据就是通过通信来下载和上载文件、执行在线活动、发送请求和接收响应等等。2.3.2带有一个简单的发现服务器的P2P模型这个名称暗示了这种模型的结构,这样的P2P模型实际上不包括一个服务器,为了实现一些管理,这种模型中服务器的作用已经下降。服务器的作用限于为正在加入的端提供已经连接端的名字,正在加入的端通知服务器它已经登录了。一定要注意服务器仅型通过提供给端一系列已经相连端的清单而超出纯P2P模型,这样增加了发现网络上大量端的机会。为了下载资源,端必须单独与每个量的处理时间。2.3.3带有发现和查找服务器的P2P模型增强服务器的功能而继承了纯P2P和带有简单发现服务器的P2P两者的特性。这种模型减轻了端的负担,因为不再需要通过访问每个端例如登录进人相连端的信息数据库,进入它们共享资源目录等2.3.4带有发现、查找和内容服务器的P2P模型相连接,因为所有的资源都存储在中心服务器的接访问服务器而不是和另外的端通信,服务器处理这些请求并显示信息来源。这种模型主要的缺点在于如果同时有太多的请求,服务器的速度会减慢;这种模型的另一个缺点就是成本很高,因为服务器必须自己管理、存储数据并处理所有的请求。2.4对等点的发现 桂林电子科技大学毕业设计(论文)报告用纸第5页共37页2.4.1显式点到点配置显式点到点配置与其说是一种发现机制,还不如说是一种用来避免实现发现的机制。每个存在的对等点都知道其它对等点的地址。一般而言,分布式应用程序中节点的显式点到点配置不能很好地扩展到具有较多节点的大型网络。那就是为什么分布应用程序和技术大多包含命名和定位功能。这也解释了为什么域名系统(DNS)最终取代了用于机器命名的主机文件(hostsfile)机制。维护主机文件是单调乏味、容易出错的,并且一般来说,很难方便地在大型网络环境下运转。但是,显式点到点配置并非一无是处。点到点寻址缺乏灵活性的特性也带来了一定程度的安全性。通过对网络中得很稳固。2.4.2动态发现模型性。这些模型通常更适用于P2P应用程序,以下在讨论三种机制的基础上提出一新的方法。对等点通过这些机制动态地定位其它对等点和了解它自身所属的环境。2.4.3目录发现模型在目录服务模型中,一台或多台有特殊用途的点向目录服务注册关于自身的信息(其名称、地址、资源和元数据),并通过目录服务器定位其它对等点。基于P2P的应用中使用目录模型的最典型的代表是Napster。在Napster中中式管理目录。虽然,采用集中式管理的目录服务模型被认为“本质上非P2P”,但它确实有一个很大的优势:集中式管理使它容易确保服务器硬件和配置能足以达次化结构,根目录代表顶级域(譬如"com"),它将子域查询服务(如“etcee_com”这样的域)的任务委派到下一层次的DNS服务器。2.4.4网状模型基于网状模型P2P应用系统中,有很多对等点(通常是动态的)。没有一个对等点知道整个网络的结构或者组成网络的每个对等点的身份。相反,对等点只知道直接与它们通信的对等,各点对等点必须合作完成任务。 桂林电子科技大学毕业设计(论文)报告用纸第6页共37页查询、分布式消息传递,甚至包括认证和授权行为。因为涉及通信量的多少,文件传输这样需要大流量的网络操作通常在对等点间直接发生,而消息的传递则在网络中经过其它对等点传递。2.4.5多播模型由于多播模型和网状模型很相似。这种模型利用网络自身提供的特性来定位和确认对等点和资源。这种技术的实现使用IP多播来实现查询。不像单播IP数据报(一台主机最多只能向一台主机发送数据报),多播IP数据报可以同时发往多台主机。更重要的是,发送方不必知道有多少接收方存在或者究竟有没有接收方存在。发送主机只是封装消息并将它发布到网络上。符合某些条件(TP地址和端口号)的客户机将接收到该消息的一个副本。使用IP多播技术的发现通过让对等点用多播定期宣布自己的存在来工作。该消息包含对等点的TCP/IP主机名和端口号。对此消息感兴趣的对等点检测这个消息后,抽取出主机名和端口号,并使用这个信息与新对等点建立正常的TCP/IP连接。这就是多播是如何在单个子网上工作的。众多子网(组成整个网络)间的路由多播通信是完全不同的,并且是一个非常复杂的课题。这也是基于IP多播的发现的局限所在。没有路由器的支持,基于IP多播的发现被局限在同一子网上的对等点之间。基于安全性考虑,因特网对多播并不友好。2.4.6主动搜索模型目录服务模型和网状模型均或多或少的依赖于服务器的参与,若这些服务器均出现故障,整个应用系统将无法工作。多播模型虽然可以做到完全不需要服务器的参与,但该模型依赖于IP多播。绝大部分路由器不支持IP多播,因此该模型在Internet中并没有多大实用价值。该文分析以上模型的优缺点的基础上提出了主动搜索模型。该模型基本原理如下:每个欲加入的对等点主动在网络上扫描搜索己经存在的结点,若扫描到其它对等点,则对等点之间互相交换自己所知道的其它对等点的地址。该方法理论上能做到完全不需要任何服务器的存在,但要在Internet中扫描搜索其它存在的对等点就像大海捞针一样困难,因此必须设法减少搜索的范围,主要采用如下一些策略来减少扫描工●优先在自己所处的网段搜索。●记录加入到网络中所知道的其它对等点的地址,以后每次扫描时,优先扫描这些地址。●优先扫描以前知道的对等点的地址所处的网段。●若某对等点发现另外某些对等点长期稳定地存在于网络中,则在网络中散布(各对等点互相转告)这些地址。这将导致这些对等点知道很多其它的对等点地址, 桂林电子科技大学毕业设计(论文)报告用纸第7页共37页且以后扫描时,也优先扫描这些稳定存在的对等点的地址,这样将大大减少对该模型尤其适合只在某些区域网(如校园网,企业内部网)内部使用的P2P应用,在这些场合可以完全做到不需要任何服务器的存在就能发现其它的对等点且是实用的。3关键技术3.1P2P穿越在Internet最初的体系结构中,每个结点都有一个全局唯一的IP地址,能够直接相互通信。但是这个结构已经不复存在了,取而代之的是结构包含了一个全局地址空间仅在“主”全局地址空间中的节点才可以容易的从网络中其他地方连接到,因为仅它们拥有唯一的、全局可路由的IP地址。私有网络中的节点可以连接到在相同私有网络中的其他节点,可以连接到全局地址空间中的的公共终端,转化组成这些会话的封包中的IP地址和端口号。tISP私有网络家庭网络家庭网络家庭网络图3-1公有IP地址和私用IP地址Internet新的地址结构适合典型的客户/服务器通信,但是它给两个在不同子网中 桂林电子科技大学毕业设计(论文)报告用纸第8页共37页的节点直接相互通信带来了困难,这种点对点的直接互联是实施P2P通信协议的基础。我们要做的是寻找一种方法,来使P2P通信协议在NAT存在的情况下也能够正常工作。NAT英文全称是“NetworkAddressTranslation”,中文意思是“网络地址转换”,它是一个IETF(InternetEngineeringTaskForce,Internet工程任务组)标准,允许一个整体机构以一个公用IP(InternetProtocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。NAT最初的目的是为使用内网IP地址的计算机提供通过少数几台具有公网的IP地址的计算机访问外部网络的功能。NAT负责将某些内网IP地址的计算机向外部网络发出的IP数据包的源IP地址转换为NAT自己的公网的IP地址,目的IP地址不变,并将IP数据包转发给路由器,最终到达外部的计算机。同时负责将外部的计算机返回的IP数据包的目的IP地址转换为内网的IP地址,源IP地址不变,并最终送达到内网中的计算机。随着网络的普及,IPv4的局限性暴露出来。公网IP地址成为一种稀缺的资源,此时NAT的功能局限也暴露出来,同一个公网的IP地址,某个时间只能由一台私有IP通过一个公网IP地址来访问Internet的功能。这在很大程度上暂时缓解了IPv4地址资源的紧张。NAT负责将某些内网IP地址的计算机向外部网络发出的TCP/UDP数据包的源IP地址转换为NAT自己的公网的IP地址,源端口转为NAT自己的一个端口。目的IP地址和端口不变,并将IP数据包发给路由器,最终到达外部的计算机。同时负责将外部的计算机返回的IP数据包的目的IP地址转换内网的IP地址,目的端口转为内网计算机的端口,源IP地址和源端口不变,并最终送达到内网中的计算机。过1至N台支持NAT的路由器来实现公司的所有计算机连接外部的Internet网络的。导致连接数用过少,下载速度很难上去。因此P2P软件必须要解决的一个问题就是要能3.1.3UDP打洞不同子网中主机间建立点对点通信的最有效的方法之一是“打洞”。这个技术广泛 桂林电子科技大学毕业设计(论文)报告用纸第9页共37页名称上看,“打洞”好像危及到了私有网络的安全,事实并不是这样。打洞使应用程序点通信会话是被恳求的(被你的网络中的主机邀请来的),应该被接受”。打洞过程假设A和B两个客户都与中心服务器S有活动的UDP会话。当客户向S注册时,S纪录下客户的两个终端:此客户认为它自己正使用的(IP地址,端口号)对和服务器认为这个客户正使用的(IP地址,端口号)对。第一个对称为客户的私有终端,第二个称为客户的公共终端。客户在向服务器注头的源IP地址和源UDP端口域得到客户的公共终端。本系统客户A想要与客户B直接建立UDP会话,打洞过程如下。会话向B发送连接请求信息,这个消息包含A的公共终端和私有终端。一旦这些消息到(3)当A从S接收到B的公共和私有终端时,A就向这两个终端发送UDP封包,随后,“锁住”首先引出B响应的终端。同样,当B接收到A的公共和私有终端时,B就在这两个终端上向A发送UDP封包,锁住首先响应的终端。向A发送B的终端向B发送A的终端NATC(1)图3-2打洞之前图3-3打洞过程桂林电子科技大学毕业设计(论文)报告用纸第10页共37页NATANATB图3-4打洞之后3.2多线程技术3.2.1线程的组成线程有两部分组成。1.一个是线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。2.另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部进程从来不执行任何东西,它只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。这意味着线程在它的进程地址空间中执行代码,并且在进程的地址空间中对数据进行操作。因此,如果在单进程环境中,你有两个或多个线程正在运行,那么这两个线程将共享单个地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程而不是每个线程存在。线程是一种操作系统对象,它表示在进程中代码的一条执行路径。在每一个Win32的应用程序中都至少有一个线程,它通常被称为主线程或默认线程。在应用程序中也可以自由地创建别的线程去执行其他任务。线程技术使不同的代码可以同时运行。当然,桂林电子科技大学毕业设计(论文)报告用纸第11页共37页每个线程必须拥有一个进入点函数,线程从用任何合法的名字。可以给线程函数传递单个参数,参数的含义由你自己定义。线程函数必须由一个返回值,它将成为该线程的退出代码。线程函数应该尽可能的使用函数参当CreateThread被调用时,系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的线程的统计信息组成的一个小型数据结构。系统从进程的地址空间中分配内存,供线程的堆栈使用。新线程运行的进程环境与创建线程的环境相同。因此,新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和在这个相同的进程中的所有其他线程的堆栈。这使得单个进程中的多个线程确实能够非常容易地互相通信。一旦内核对象创建完成,系统就分配用于线程的堆栈的内存。该内存是从进程的地址空间分配而来的,因为线程并不拥有它自己的地址空间。然后系统将两个值写入新线程的堆栈的上端(线程堆栈总是从内存的高地址向低地址建立)。3.2.3线程的终止●线程拥有的所有用户对象均被释放。在Windows中,大多数对象是由包含创建何挂钩。其他对象只有在拥有线程的进程终止运行时才被撤消。●线程的退出代码从STILL_ACTIVE改为传递给ExitThread或TerminateThread的代码●线程内核对象的状态变为已通知。●如果线程是进程中最后一个活动线程,系统也将进程视为已经终止运行。●线程内核对象的使用计数递减1。当一个线程终止运行时,在与它相关联的线程内核对象的所有未结束的引用关闭之前,该内核对象不会自动被释3.2.4线程的调度每个线程是拥有一个上下文结构的,这个结构维护在线程的内核对象中。这个上下要查看当前存在的所有线程内核对象。在这些对象中,只有某些对象被视为可以调度的对象。Windows选择可调度的线程内核对象中的一个,将它加载到CPU的寄存器中,它的值是上次保存在线程的环境中的值。这项操作称为上下文转换。Windows实际上保存了一个记录,它说明每个线程获得了多少个运行机会。Windows被称为抢占式多线程操作系统,因为一个线程可以随时停止运行,随后另一个线程可进行调度。如你所见,可以对它进行一定程度的控制,但是不能太多。注意,无法保证线程总是能够运行,也不能保证线程能够得到整个进程,无法保证其他线程不被允许运行等等。Windows系统只调度可以调度的线程。这意味着该线程已经暂停运行,不应该给它安排任何CPU时间。在创建一个线程的时候,CreateThread函数接收的倒数第二个参数中赋值CREATESUSPENDED就可以创建一个暂停的线程。除了暂停的线程外,其他许多线程也是不可调度的线程,因为它们正在等待某些事情的发生。流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。流不但可以处理文件,还可以处理动态内存、网络数据等多种数据形式。在程序中利用流的方便性,写起程序会大大提高效率3.4文件的分块为便于各客户端下载文件,文件被分成大小相等(最后一块除州的若干块。每一块附上校验信息,对于一个大的文件来说,这是很有必要的,因为传输层的校验方法过于简单,漏检率较高。各客户端以块为单位下载文件,一块下载完成后对该块进行校验,并和校验信息进行比较,确认无误后才认为该块己被下载。文件分块算法描述如下:●欲下载某一文件的用户首先获得提供该文件的服务器的地址(包括IP地址和端口号,该服务器一定得是公网上的一台计算机,即该服务器不位于任何NAT和防火墙之后)。●与该服务器通信。服务器将记录它所看到的该用户的IP地址和端口号。●该用户向服务器请求获取1到2个文件块,服务器根据当前荷载情况决定是否让该用户下载文件块。若同意该用户下载文件块,服务器将优先选择还没有被其他用户下载的文件块。●向服务器请求获取一定数量的其他用户的地址。服务器随机选择一定数量的其他用户的地址返回给该用户,优先选择时延小的地址。●该用户与从服务器获得的其他用户的地址通信,若不能直接通信,将请求服务 桂林电子科技大学毕业设计(论文)报告用纸第13页共37页器辅助。●用户之间互相交换他们己经下载的文件块的信息,若需要(某用户觉得自己的下载速度慢,且自己的网络带宽的利用率远远不够,需要获得更多的其他用户的地址)的话交换他们所拥有的其他用户的地址信息。●用户之间互相下载文件块,直至文件的所有块被下载。优先下载稀有的文件块,即只被少数用户拥有的文件块。由于各用户下载文件时并不是像传统的文件下载那样从文件头开始,直到文件尾,而是按一定的算法顺序下载文件的各个块,因此需要将已经下载的文件块合理地存放起来,便于所有的文件块下载完成后恢复成原来的文件。该软件下载过程前先申请空间,然后按下载的文件块的序号,写到相应的文件位置中。3.5多线程文件传输与断点续传在本系统中,文件的传送是重要的功能之一,也是共享的基础。本文件传输系统跟一些重要的协议像HTTP、FTP等一样,都支持文件的多线程文件传输和断点续传功能。其目的就是为了解决网络间的文件传送问题,而且以其稳定,高速,简单而一直保持着很大的生命力。用来接收文件的客户端的多线程文件传输是最重要,也最复杂,它负责线程的管理,进度的记录等工作。算法描述如下:先连接服务器,统计能有多少在线用户能提供某一文件的下载,然后根据文件长度和用户数量决定分几个线程下载,每一线程连接一个用户,接着发送文件下载请求,请求包括文件位置,名字,MD5校验码,需要文件的开始位置和结束位置等。开始下载后,各个线程将下载到的文件块写入到本地磁盘中。断点续传的算法描述如下:当各个线程开始下载以后,并记录各个线程下载文件进程,每下载一定大小就记录一次,并把文件下载进度写到磁盘文件中,以防断电,直到下载结束。当要实现断点续传时,先校验本地文件的MD5校验码,如果校验码与源文件校验码一致,则不需要使用续传。如果不一致,先查询本地的文件进度文件,根据进度文件记录的数值,向远程用户发送下载请求,文件的开始位置和结束位置为文件记录的数值。3.6文件MD5校验MD5的全称是message-digestalgorithm5(信息-摘要算法),在90年代初由mit开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。使用MD5算法对文件进行校验时,MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算MD5时就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余的结果等于448。n为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度=n*512+448+64=(n+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。在的库函数中,已经对MD5加密定义的类封装了,直接调用系统函数文件,并创建一个类TMD5的实例即可对文件进行校验,并产生32位的字节串校验码。4系统总体设计4.1本系统采用的P2P模型本系统采用带有发现和查找服务器的P2P模型。服务器只用来提供相连端的清单和它们的可用资源,不再需要通过访问每个端来查找必要的信息。这种模型中的服务器初始化两个端间的通信,然后,这两个相连的端建立通信、保持连接并执行各种活动,例如登录进人相连端的信息数据库,进入它们共享资源目录等等(如图4-1)。送查询请求向服务器发送查询请求向服务器发向服务器发向服务器发送查询请求4.1.1客户端与客户端之间的发现在这种模型中,服务器提供了服务的清单和端的清单,所有的用户在登录时都要通知服务器。这种服务器不仅发现其他端而且返回所有登录端的重要信息。一个需要内容的端发送它的查询到服务器。服务器不仅仅提供端的清单,它也能提供基于条件的搜索并发现相关端。服务器返回所有连接端的清单。请求端连接有请求内容的清单中的每个端。一旦请求的端定位需求的内容,就连接它们。这个请求端就可以在网络上下载所请求的内容。虽然处理过程冗长,但是请求端显然有足够多的端来连接。可以上载和下载使得这种模型和其他模型相比具有高度的灵活性。因此,这种模型相比其他的模型减少4.1.2客户端向服务端查询数据由于服务器的作用十分显著,服务器的不但保存注册用户的清单,而且扩展到处理请求端搜索内容的查询处理。这个服务器处理已匹配这个内容的端查询,信息返回到请求端,搜索内容端的搜索路径比不带查找服务器的P2P模型要短得多。但是这种模型服务器负担加重,增多的请求会影响到速度和主要的性能。P2P模型突出一点就是它和传统的模型不同,在端之间通信不总是需要一个中心服务器,它允许端之间的直接通信。如果被连接的端有被请求的内容并且它愿意提供这些内容,这种P2P模型的有利一面就很明显了。因为服务器上的负载减少了,所以由于服务器导致的开销也减少了,也就是说如果服务器崩溃,服务不会停止。除了提供客户端发现客户端和客户端初始化连接服务之外,服务器的作用不是很明显。一旦连接建立,端之间通信开始,服务器就不在这个结构中了。4.1.3客户端搜索和下载共享文件在所有的P2P模型中,这种模型是最有效和最灵活的。一个端无论何时要搜索一些特殊的内容,它都可以直接在服务器上对已经相连的端进行搜索,或者简单地请求服务器对所需信息的结果进行回答。这种模型除了网络上相连的端外,还有可服务于请求端。服务器上搜索工具可用是因为无论何时一个注册端登录后,除了验证外,还将发送它的名字和共享的资源清单。因此,对于请求端搜索所需内容比和每个端进行单独连接更容一旦请求的端定位需求的内容,就连接它们。这个请求端就可以在网络上下载所请求的内容。虽然处理过程冗长,但是请求端显然有足够多的端来连接。可以上载和下载使得这种模型和其他模型相比具有高度的灵活性。这种搜索技术的好处是灵活,使得带有搜索选项的请求端更容易连接。在这种模型中搜索所需时间迅速减少,尽管服务器有很高的开销,P2P计算体系的这种模型仍然是开发者和用户的最爱。4.2P2P文件传输系统的工作流程●服务器:维护应用程序必需的数据库●客户端指令监视模块:通过一个友好的用户界面给客户端显示结果并担当与客户进行各种人机交互客户端上传下载模块执行的第一项工作就是登录到服务器上,通知服务器它的存在并列出它共享资源的清单。登录以后客户端上传下载就能处理服务器传给它的客户请求,只要有客户连接,客户端上传下载都下载文件,在下载过程中,一个客户端上传下载可以容易地处理多个客户的请求。在处理是担当服务器的作用。当接收请求并响应客户时,客户端上传下载会根据请求方的需要客户端上传下载由共享文件信息类,共享文件搜索线程类,共享文件信息上传线程类,登录服务器函数组成,具体工作流程如图4-2:4.2.2服务器功能的工作流程服务器保留有所有注册客户端上传下载模块的清单和这些客户端上传下载模块共享给其他端资源的详细描述。注意客户端的传下载模块的清单后,服务器在客户端和客户端之间初户端上传下载模块机器上下载文件,它直接在P2P环境中,这种搜索叫做全局请求。另一个是关于使用服务器的搜索的术语,即根搜索,这种搜索在客户端上传下载模块声明它的共享资源时发生。简言之,在客户端和客户端之间建立一个连接后,服务器为服务器由客户登录线程类组成,具体工作流程如图4-3:程序开始搜索所有共享文件目录的文件,并将各文件信息到本地共享文件链表中。连接服务器接盛接盛换后的IP和Port把本地共享文件链表中的部分Port上传到服务器的数据库中。程序开始监听用户登录接受一个登录请捕获请求登录端的经NAT转换的IP和Port的信息发给请求登录端删除数据库中所有IP和Port等于该请求端IP和Port的记录,插入该请求端的最新共享信息。关闭跟请求登录端的连接图4-3服务器工作流程图客户端指令监视模块充当用户和计算机之间的接口。通过客户端指令监视模块,客户发送它的请求并接收客户端上传下载模块的响应。和客户端上传下载模块不同,客户端指令监视模块一直运行在无人值守方式。下载模块的清单并发送所有的请求给客户端上传下载模块,让客户端上传下载模块自己来处理这些请求。一旦客户端上传下载模块在用户终端显示结果。注意不是客户端指令监视模模块来做这些工作。用户只看到查询的结果,处理内容相对于用户封装了。有了客户端指令监视模块的协助,就可以基于各种条件来搜索共享内容。例如,客户请求客户端上传下载模块只显示文档文件索除了可以查询客户端上传下载模块内容外,还可以提示客户端指令监视模块上进行全局搜索并返回活跃的客户端上传下载模块。客户端指令监视模块由文件信息查询线程类组成,具体工作流程如图4-4:程序开始输入查询条件将查询条件发送给服务器,并等待查询将服务器返回的数据流进行解包,最终将结果显示出来关闭与服务器的连接图4-4客户端指令监视模块工作流程图程序开始监听用户查询接受查询使用该查询条件查询数据库,然后将查询结果封装成数据流,以流的方式返回到客户端。关闭与服务器的连接图4-5服务器工作流程图服务器除了处理登录请求以外,还要提供客户端的查询共享文件请求,并将查询到服务器工作流程图如图4-5:4.3系统各组件的联系除了执行它们各自的任务外,服务器、客户端上传下载模块和客户端指令监视模块存在一些互相联系。基于这种应用的P2P计算体系,我把三种组件的联系分类如下:●客户端指令监视模块到服务器的联系重要的共享资源的数据库。客户端上传下载模块登录到服务器后声明它的共享资源,它只发送文件和文件夹的位置,不是文件和文件夹的内容。服务器要处理所有文件和文件夹及其中的内容,从而变成了瓶颈,加上完全的文件共享和下载成为服务器的负担,导致性能下降。另外重要的一点就是服务器只提供在线客户端上传下载模块的清单,不包4.3.2客户端上传下载模块到客户端指令监视模块的联系答的关系,客户端指令监视模块发送所有的请求给客户端上传下载模块并接收响应。在这种关系中,客户端上传下载模块处理自身层次上的所有请求,客户端指令监视模块在●客户能够显示所有的共享文件和文件夹。●客户通过发送一个下载请求给客户端上传下载模块来下载内容。●客户能从客户端上传下载模块的账户中下载文件。●当客户从客户端上传下载模块上下载和上载文件时,客户端上传下载模块占有主动,因为它有权将共享内容设为只读或者可写。这些权利作为文件夹的属性存在,通过设置权限,客户端上传下载模块可以限制有恶意的用户上载无用信4.3.3客户端指令监视模块到服务器的联系在这种联系中,客户端指令监视模块从服务器取查这个清单和客户端上传下载模块共享的资源。客户端指令监视模块在取得客户端上传下载模块的清单的同时,能够传送根搜索请求。换句话说,就是客户端指令监视模块能够为你请求的内容搜索客户端上传下载模块,并且当客户查询或者请求时通知客户所有可用的客户端上传下载模块。数据库设计(DatabaseDesign)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。在这个系统中,数据库作用十分显著,它不但保存注册用户的清单,而且扩展到处理请求端搜索内容的查询处理。当服务器处理已匹配这个内容的端查询,信息返回到请求端,搜索内容端的搜索路径比不带数据库的服务器的P2P模型要短得多。系统数据表设计关系如下:UserLinkTable*数据表格说明:通过前面的分析,根据系统的工作方式、系统构架以及系统功能设计的要求,数据库需要存储的数据信息表如下:建立一张用户在线信息表UserLinkTable,如表5-1所示表5-1用户在线信息表UserLinkTable字段名数据类型是否可空说明用户登录ID用户登录IP用户登录端口用户在线状态用户登录时间建立一张共享文件信息表ShareFileTable,如表5-2所示表5-2共享文件信息表ShareFileTable字段名数据类型是否可空说明共享文件ID共享文件名共享文件MD5编码共享文件大小共享文件上传时间5.2系统界面设计界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。目前界面的设计引起软件设计人员的重视的程度还远远不够,直到最近网页制作的兴起,才受到专家的青睐。系统界面设计的特点:◆易用性:按钮名称应该易懂,用词准确,屏蔽模菱两可的字眼,要与同一界面上的其他按钮易于区分,能望文知意最好。理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作。◆规范性:通常界面设计都按Windows界面的规范来设计,即包含“菜单条、工具栏、工具厢、状态栏、滚动条、右键快捷菜单”的标准格式,可以说:界面遵循规范化的程度越高,则易用性相应的就越好。小型软件一般不提供工具厢。◆合理性:屏幕对角线相交的位置是用户直视的地方,正上方四分之一处为易吸引用户注意力的位置,在放置窗体时要注意利用这两个位置。◆美观与协调性:界面应该大小适合美学观点,感觉协调舒适,能在有效的范围内吸引用户的注意力。◆独特性:如果一味的遵循业界的界面标准,则会丧失自己的个性.在框架符合以上规范的情况下,设计具有自己独特风格的界面尤为重要。下面给出此系统的Logo设计图:本系统以友好的界面大大丰富了计算机信息的表现形式,以有效的方式实现人与计算机对话的技术。它包括机器通过输出或显示设备给人提供大量有关信息及提示请示等,人通过输入设备给机器输入有关信息及提示请示等,人通过输入设备给机器输入有关信息,回答问题等。下图为本系统的其中一个界面:韩车工信亚牌件名Trurt海04面王啡排,新统血平瑞T把至力军Fm2t0理只附标有善注海对虾安断地过央减pOT00T-f-其淋大首称信乐面白联手干文件月聘文大公件现大乎行平维图5-3系统界面之一5.3客户端各模块设计本模块代码保存在UFilelnfoCollect.pas文件中,主要功能是搜索所有的共享文件,包括将MD5校验,路径,大小等信息加到共享链表中。在窗体创建的时候就创建一个该线程类的实例,创建后的实例会不影响主线程的操作的情况下,遍历所有共享文件,并对共享文件作相关操作。本模块涉及两个关键技术:文件搜索,文件MD5校验。文件搜索指遍历一个文件夹或某个硬盘分区,包括该文件夹或硬盘下面的所有文件和文件夹。为了实现这种算法,本系统采用递归算法。算法描述为:先遍历某一文件夹中的文件和文件夹,将遍历到的文件加到文件夹队列中,将文件夹加到文件夹队列中。在文件夹队列中取出第一个文件夹的路径,再次调用该算法遍历该文件夹中的文件和文件夹,直到某文件夹的文件夹队列为空,结束本次调用,继续执行上一个调用。整个算法执行完毕即能够遍历完所有文件。该文件搜索算法跟树的递归深度优先算法相似。程序伪代码如下:if(FindFirst(mainpath+*.*',faDirectory,Dirsearch)=0)thenifFindFirst(mainpath+*.*',faAnyFile,Dirsearch)=0thenResult:=Searchfile(mainpath+_文件夹队列.St5.4本地共享文件上传线程模块该模块的代码保存在UFileShareThread.pas中,主要功能是将本地文件信息搜集线程模块所收集的本地文件信息发送到服务器的数据库中,本模块涉及两个关键技术:在线程中发送数据。当使用Winsock开发网络应用程序时,从Socket中读取数据或者向Socket写入数据都是异步发生的,这样就不会阻断程序中其它代码的执行。在收到数据时,Winsock会向应用程序发送相应的消息。这种访问方式被称作非阻塞式连接,它要求你对事件作出响应,设置状态机,并通常还需要一个等待循环。与通常的Winsock编程方法不同的是,Indy使用了阻塞式Socket调用方式。阻塞式访问更像是文件存取。当你读取数据,或是写入数据时,读取和写入函数将一直等到相应的操作完成后才返回。如果在主线程中使用Indy发送本地共享文件信息到服务器,整个主窗体有可能因为Indy的阻塞而导致冻结,即使使用Indy里面的IdAntiFreeze抗冻结组件,还是会发生冻结现象,只是用了抗冻结组件冻结时间会比较短。在设计过程中,本线程模块先声明一个TIdTCPClient类的组件作为数据成员,并在构造函数中动态生成一个TIdTCPClient类的实例,让该实例连接服务器后,遍历本地共享文件信息链表,然后将这些信息封装成数据流,发送到服务器中。5.5数据库操作模块本系统的代码保存在UQueryFileThread.pas中,主要功能是操作数据库是时候并没有使用数据库组件直接链接到数据库中,而是将要操作数据库的脚本封装成数据流,以流的方式发送到服务端,由服务端接收完数据流后,按一定的数据结构解在使用本地文件信息搜集线程模块后,共享文件信息链表中可能存在很多个节点;效率比较低。正如前面所说,Indy是一个阻塞式Socket调用方式,在发送数据的时候,发一个便会阻塞一次。如果数据量小,可能没什么觉察,如果数据量很发送容易中断。客户端与服务器的数据通讯是使用TCP协议的,理论上不会丢包,但是在数据量比较大的情况下,有可能某一个包发送后能接收端无法收到,然后双方互相等待,产生死锁。产生中断的另一个原因是本模块是一个线程类,发送数据时是使用线程发送数据的,当Indy阻塞式调用时间较长时,系本系统将数据转化为数据流的方法为:先声明一个TStrings类型和TStringStream类型,将数据逐个遍历,逐个加入到TStrings中,然后使用TStringStream的构造函数将TStrings的数据全部赋值到TStringStream中。程序伪代码如下:procedurePackagingifCommandStr='就绪'thenIdTCPClient.WriteInteger(ShIdTCPClient.WriteStrea当接收到数据流后,声明一个TStrings类型,利用TStrings类型的构造函数将流读取到TStrings里面,然后按照一定的数据结构,逐个赋值到一个结构体中,直到读取完TStrings。例如要将下面的结构体流解包://结构体QueryResultStream:=QueryResultSize:=IdIdTCPClient.ReadStream(QueryResultSQueryResult.Text:=QueryQueryPort:=StrToInt(QueryResulQueryFName:=QueryResulQueryMDCode:=QueryResulQueryUpTime:=StrToDate(QueryResQueryFSize:=StrToInt(QueryResu5.6上传下载模块下载模块是本系统的核心部分之一,代码保存在UDownLoadFiles.pas中,主要功下载,文件上传,断点续传。本模块部分在上文关键技术中已经介绍。下载任何文件或者文件夹的过程是由客户端指令监视模块和客户端上传下载模块建立,服务器就退出,客户端指令监视模块和客户端上传下载模块之间直接进行通信。下面用示意图显示了一个用户(客户端)通过客户端指令监视模块怎样从另一个用户(客户端指令监视模块)上下载选择的文件。终端用户(客户端上传下载模块)从服务器的清单中选择一个文件。应用程序首先 桂林电子科技大学毕业设计(论文)报告用纸第29页共37页检查被选文件是否可以用于下载。如果文件是可用的,就要决定它要下载到的目的地细节,文件名、大小和许可从存储文件中的细节的相关数组中提取。在这以前,用户只选择这个被下载文件必要的信息,通过这些信息,用户可以判断下载是否正确。如果正确,则发下载请求给另一个用户。用户(客户端上传下载模块)开始往流中写数据;同时,客户端指令监视模块开始从同一个网络流中读数据。这样,网络流上发生双向通信,客户端上传下载模块上载文件,把文件写到网络流中,而客户端指令监视模块下载文件,从同一个流中读。客户端指令监视模块读数据块并把文件写到指定位置。读和写的操作直到整个文件下载完毕后结束少读完数据,下载过程停止。下载工作流程图程序开始是否文件被选中从清单中得到被选中的文件获得文件信息提取文件名,从下载信息链发给多个在线用户在网络上接收数据块,并写到文件中否结束是是否有更多的块要读图5-4下载工作流程图 桂林电子科技大学毕业设计(论文)报告用纸第30页共37页5.6.2文件上传上载过程也是由用户初始化的,在客户端指令监视模块的帮助下,上载文件到其他用户(监听器)。和下载一样,服务器不需要上载文件。当用户开始上载一个文件时,先决定所选文件或者文件夹是否有权上载。如果所选文件或者文件夹没有权利上当接收到上传请求以后,会创建一个上传线程类的实例,达目的。下载工作流程图:程序开始接收到一个上传请求请求上传文件是否存在结束从请求消息中获得文件MD5检验码查询本地共享信息检验要上传的文件是否有排他锁在网络上发送数据块否是否有更多的块要读图5-5上载工作流程图是6系统安全与测试随着P2P的不断完善,使用点对点下载文件越来越普及,随之而来的是点对点网络数据传输越来越大,网络的安全性和数据的有效性变得越来越重要。因此,对现代信息系统进行信息安全保护,也不仅仅是像早期那样只体现在信息传输过程中,而应该体现在信息处理的全过程中。6.1系统的威胁评估计算机网络系统的安全威胁主要来自不正确的路由攻击、存取攻击、行为不一致攻击和目标节点过载攻击四个方面。●不正确的路由攻击攻击者通过不正确的路由,将其他节点的查找消息转发到不正确的或者不存在的节点上。由于攻击者可以按照正确的方式和系统其他节点交互,因此在其他节点看来,它是一个正常的节点,也就不能把它从路由表中删除。而且,即使进行重传也一样会被攻击者发送到不正确的节点上。经测试,该系统能防止存取攻击。●目标节点过载攻击攻击者通过向某些特定目标节点发送大量的垃圾分组消息,耗尽目标节点的处理能力,这是一种拒绝服务类型的攻击。在一段时间之后,系统会认为目标节点已经失效退出,从而将目标节点从系统中删除。经测试,该系统能防止存取攻击。攻击者正确地执行查找协议,但否认在它节点上保存有数据。也可以向外界宣称它保存有这些数据,但却拒绝提供,使其他节点无法得到数据。经测试,该系统能防止存取攻击。●不正确的路由更新攻击由于每个节点都是通过和其他节点进行交互来构造自己的路由表,因此攻击者可以向其他节点发送不正确的路由信息来破坏其他节点的路由表。这将会导致其他节点将查询请求转发到不正确的节点上。经测试,该系统能防止存取攻击。由此可见,只有对信息处理全过程实施全面的安全保密措施,才能确保信息系统的安全。对于共享资源而言,一方面希望实现资源最大程度的共享,保证数据操作的方便和实时性;另一方面也要保证特点数据的安全保密。6.2系统测试在软件的定义、分析、设计过程中都会采用不同措施来保证软件的质量,但是在软件实际开发过程中难免会存在问题。为尽早发现存在的问题,必须对软件进行充分的测试。软件测试的主要过程是,根据软件开发各阶干测试用例。(1)测试人员测试队伍由两位成员组成。软件的设计者在测试整个过程中负责整体测试方案的制定和测试进度的掌握,以及白盒测试的测试者。第二位成员由未参加软件制做者担任,主要责任是进行软件的黑盒测试以及软件环境,硬件要求和极限测试工作。(2)机器测试通过在计算机上直接运行被测程序,来发现程序中的错误。机器测试包括黑盒测试和白盒测试。黑盒测试也称功能测试,将软件看作黑盒子,在完全不考虑程序的内部结构和特性的情况下,研究软件的外部特性。根据软件的需求规格说明书测试用例,从程序的输入和输出特性上测试是否满足设定的功能。白盒测试也称结构测试,将软件看作一个透明的白盒子,按照程序的内部结构和处理逻辑来选定测试用例,对软件的逻辑路6.2.2测试内容①软件的正常运行、关闭及退出时保存记录的提示(默认为是)。②用户登录界面友好,可操作性及安全性能较好,能对不同管理级别者进③数据库的可维护性好,数据的录入、删除及更改均能顺利完成,并能实现动态更新。④数据查询便捷,能对各种不同的查询条件进行搜索,以找到最合适的答案。⑤数据溢出、越界均能进行非法提示,以警告用户正确使用。对用户的非正常操作方式也提
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 轻工机械生产线招标合同三篇
- 知识的田园幼儿园教学工作计划文档
- 引入精益生产理念的计划
- 大型商业综合体建设工程合同三篇
- 成本控制的关键策略与技巧计划
- 有效沟通与说服技巧培训
- 信阳师范大学《导向设计》2023-2024学年第一学期期末试卷
- 新余学院《英语阅读》2021-2022学年第一学期期末试卷
- 西南交通大学《数据结构实验》2022-2023学年第一学期期末试卷
- 小班健康不乱扔垃圾
- 大学美育-美育赏湖南(湖南高速铁路职业技术学院)知到智慧树答案
- 【MOOC】机械设计-北京交通大学 中国大学慕课MOOC答案
- 电梯井脚手架专项施工方案样本
- 2024八大特殊作业安全管理培训
- Unit 4 Plants around us(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册
- Unit 5 The colourful world Part A Letters and sounds(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册
- 2024年国家公务员考试《申论》真题(地市级)及答案解析
- 2024-2025大学英语考试六级汉译英中英对照
- 2024版首诊负责制度课件
- 北京市西城区2023-2024学年高一上学期期末考试 语文 含答案
- 2024-2030年噬菌体行业市场现状供需分析及重点企业投资评估规划分析研究报告
评论
0/150
提交评论