基于P2P的文件共享系统毕业设计.docx

上传人:b****0 文档编号:256522 上传时间:2022-10-07 格式:DOCX 页数:72 大小:568.93KB
下载 相关 举报
基于P2P的文件共享系统毕业设计.docx_第1页
第1页 / 共72页
基于P2P的文件共享系统毕业设计.docx_第2页
第2页 / 共72页
基于P2P的文件共享系统毕业设计.docx_第3页
第3页 / 共72页
基于P2P的文件共享系统毕业设计.docx_第4页
第4页 / 共72页
基于P2P的文件共享系统毕业设计.docx_第5页
第5页 / 共72页
点击查看更多>>
下载资源
资源描述

基于P2P的文件共享系统毕业设计.docx

《基于P2P的文件共享系统毕业设计.docx》由会员分享,可在线阅读,更多相关《基于P2P的文件共享系统毕业设计.docx(72页珍藏版)》请在冰豆网上搜索。

基于P2P的文件共享系统毕业设计.docx

基于P2P的文件共享系统毕业设计

1绪论

1.1论文课题概述

1.1.1课题背景

可以说文件交换的需求直接引发了P2P技术热潮。

在传统的WEB方式中,要实现文件交换需要服务器的大力参与,通过将文件上传到某个特定的网站,用户再到某个网站搜索需要的文件,然后下载,这种方式的不便之处不言而喻。

电子邮件是方便了个人间文件传递问题,却没法解决大范围的交换。

这也是WEB的重要缺陷,P2P就是在情况下横空出世。

P2P很好的解决了传统的C/S模式下瓶颈问题,让资源共享变的更方便,快捷。

用户直接和用户之间进行数据交换,改变了传统的模式。

1.1.2课题目的和意义

本课题最终成果是完成一个基于P2P的文件共享系统。

该系统可以发现网络上的共享资源,并根据自己的需求下载自己需要的资源。

在传输过程中还要保证数据传输的完整和安全。

本课题的基础是文件共享和P2P理论,涉及到知识管理、计算机网络、分布式存储和心理学等领域相关理论。

针对不同的应用需求,人们提出了许多共享方式,以不同的方式来共享不同的内容以满足人们的需求。

但是这些方法都不够全面,没有提出很好的文件共享模式,更加没有很好的解决文件共享的需求。

特别是在信息飞速增长的年代,人们对于信息的筛选即真正知识的共享的需求越来越强烈,而人类社会发展至今,亦未能找到很好的文件共享的模式和手段。

在理论上,本课题探寻文件共享的基础理论——知识管理理论、计算机网络、分布式存储和心理学——中相关研究成果的新结合点,研究在现有理论基础上如何更好的满足人们文件共享的需求,采用分布式、高效的基于P2P技术构建的文件共享网络这种文件共享模式,并明确提出了P2P文件共享网络的整个架构,同时,提出了一个P2P环境下维护数据一致性和可用性的算法;在实践上,课题要实现了一个简单的P2P知识共享网络的框架,给出了原型实现,经过小范围的实验和部署,能够证明P2P文件共享网络能够提供很高的可用性,并且文件共享的效果也应该很好。

此外,通过编写此系统,我又进一步熟悉了网络体系结构,TCP/IP协议的知识,熟练掌握了Socket编程,MFC编程,多线程编程,掌握了利用VC++进行网络开发的过程和步骤,为今后从事软件行业奠定了基础。

1.2论文内容概述

论文主要论述P2P文件共享的相关的理论知识,工作原理,编程思路,以及具体实现细节。

当实现同一种功能有多种方法时,对这些方法进行了比较,并说明选用该方法的理由。

论文分以下几个部分:

第一部分是简要介绍所选课题;第二部分是系统可行性研究;第三部分是论文所用到的一些理论知识概述;第四部分是系统概要设计;第五部分是系统详细设计;第六部分是系统测试和实现。

最后对系统的设计进行了总结。

英文翻译、参考文献和致谢词是整个论文的结束。

2系统可行性研究

2.1系统可行性分析

可行性分析[1]包括两个部分:

分析建立新系统的必要性和可能性。

分析建立系统的必要性时要注意用户提出的理由是否充分和合理。

分析建立系统的可能性主要包括经济可行性、技术可行性和运营可行性等。

2.1.1系统设计的必要性

现代社会网络已经成为我们生活中的一部分,针对不同的应用需求,人们提出了许多共享方式,以不同的方式来共享不同的内容以满足人们的需求。

但是这些方法都不够全面,没有提出很好的文件共享模式,更加没有很好的解决文件共享的需求。

特别是在信息飞速增长的年代,人们对于信息的筛选即真正知识的共享的需求越来越强烈,而人类社会发展至今,亦未能找到很好的文件共享的模式和手段。

本论文结合P2P文件共享的原理,利用VC++工具编写一个P2P系统,不仅实现了文件共享的目的,而且锻炼了自己的编程能力和动手能力,更重要的是有自己学习的满足感,及由此而带来的成就感。

此外,毕业设计也是大学生在校的一个必修环节,所以无论从主观上还是客观上,设计此系统都是必要的。

2.1.2设计系统的可行性

分析建立系统的可行性包括经济可行性、技术可行性和运营可行性,法律可行性。

经济可行性:

与请求别人帮助设计相比,省去一笔费用和沟通时间。

技术可行性:

使用VisualC++作为开发工具,利用MFC进行编程,便于高效开发GUI应用程序,ClassWizard使得消息映射简便易行,文档/视结构轻松处理和更新数据。

在此集成开发环境下,开发Windows应用程序是一件比较容易的事情。

运营可行性:

此扫描系统软件可以用于商业销售,为作者赢取部分收入。

法律可行性:

此系统是应毕业设计的要求而开发的,以后也只是用于个人或正当的商业活动,不会触犯法律。

经分析,本系统是可以进行开发和研究的。

3相关理论和技术

3.1网络协议

3.1.1TCP协议

TCP[2]协议(TransferControlProtocol)即传输控制协议,它为网络应用程序提供面向连接的可靠的传输服务,工作在网络体系结构中的传输层。

TCP在数据传输之前首先要利用三步握手协议建立连接,并且提供了分组编号,数据校验和重传机制,确保数据传输的正确无误。

3.1.2UDP协议

UDP[2]协议(UserDatagramProtocol)即用户数据报协议,它为网络应用程序提供无连接的数据传输服务,和TCP协议一样,也工作在网络体系结构的传输层。

UDP在数据传输之前不需要建立连接,数据准备好就直接发送出去,不能保证分组准确到达目的地。

然而由于没有三步握手和数据重传操作,传输比较方便。

3.1.3IP协议

IP协议(InternetProtocol)即互联网协议,它被用于异构网络的互联,是各种各样种类繁多的网络的粘合剂,工作在网络体系结构的网络层,为传输层提供独立于网路的分组路由服务。

每一台连在网络上的主机都会分配到一个IP地址,用以在网络上标识这台主机。

3.1.4ICMP协议

ICMP[2]协议(InternetControlManagementProtocol)即互联网控制报文协议。

是IP协议的附属协议,主要负责在主机之间,主机与路由器之间传递差错信息或者其它需要需要注意的信息。

3.1.5说明

对于从源主机将数据传输到目的主机来说,IP地址和物理地址是必需的。

但是数据到达目的主机并不是在互联网上通信的目的。

互联网上数据通信的最终目的是提供端到端的数据传输,即使一台主机上的某个进程能够和另一台主机上的某个进程进行通信。

然而主机上通常有很多网络应用进程,怎样去区别呢?

传输层提供了一种方法:

凡是利用传输层进行通信的进程都被唯一地分配了一个16位的标识,称为端口号(Port)。

这样,借助于IP地址和端口号,就可以在网络上唯一地表示一个进程了,进而完成进程之间的通信。

所以,一个端口就是一个潜在的通信通道,也是一个潜在的入侵通道,对目标计算机进行端口扫描可以得到许多有用的信息。

 

3.2Socket套接字

3.2.1套接字概述

网络层为我们提供分组路由服务,传输层为我们提供数据传输服务,那么我们怎样在应用程序中利用这些服务呢?

答案是使用套接字[4]。

套接字是一种网络编程界面,它方便了我们使用网络传输服务,为我们进行基于网络的应用开发提供了一整套编程接口。

套接字是网络的基本构件,是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连的监听进程。

套接字存在于通信区域(通信区域又称地址簇)中。

套接字只与同一区域中的套接字交换数据(跨区域时,需要执行某和转换进程才能实现)。

Socket包含两个方面的含义:

其一它是由操作系统或外部过程提供的一组网络编程接口函数,是被广泛接受的网络编程方法;

其二它表示一种网络参数,通常将IP地址和网络应用端口的结合称作Socket(插口)。

3.2.2WindowsSockets基础

WindowsSockets(套接字)是在Windows下的一套开放的、支持多种网络协议的、二进制兼容的网络编程接口规范。

WinSock(WindowsSockets简写为WinSock。

)的目的是抽象隐藏网络底层细节,它独立于底层的协议,编程人员无需精通网络和协议的细节,即可实现网络编程。

使用WinSock的应用程序可以在遵从WindowsSocketsAPI的任何网络上进行通信。

每个socket都有一个类型,它是根据用户可见的通信特征进行描述的。

一般应用程序只在同一类套接字间通信。

不过只要它依据的协议支持,也完全可以在不同类型的套接字间通信。

在WinSock1.1只支持两种socket类型:

#defineSOCK_STREAM1/*streamsocket*/

#defineSOCK_DGRAM2/*datagramsocket*/

使用最多的是SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。

(1)流式套接字(Streamsockets)

它适用于没有记录边界的字节数据流,保证分组投递(delivered)、顺序正确并且没有重复分组。

一般用于TCP协议。

(2)数据报套接字(Datagramsockets)

它支持面向记录的数据流,但不保证分组投递、不保证顺序、可能有重复分组。

一般用于UDP传输协议中。

在Winsock2.1以后添加了对原始套接字的支持:

#defineSOCK_RAW3/*raw-protocolinterface*/

通过使用原始套接字我们可以从网络接口捕获到原始的数据包,从而可以对感兴趣的数据做出自己的处理,或者自己构造原始数据包发送到网络上。

在本系统程序中就利用WinSock库创建原始套接字,以实现对局域网的监听。

关于进程是如何利用套接字进行通信的,见图3.1。

 

图3.1套接字的使用

3.3数据库编程

常见的DBMS(数据库管理系统)有SQL2000,Oracle,Sybase,Access等。

其中的前三个都是属于大型数据库管理系统,用于大量数据的管理,Access数据库比较适用于小型数据的管理。

所以在本扫描系统的实现中选用了与Access数据库建立连接。

然而,要是应用程序中直接与DBMS打交道,将会面临数据库类型的多样性所导致的编程的繁琐。

面对不同类型的数据库,微软提供了ODBC数据库接口,用来以一种统一的方式处理与所有的数据库的连接。

这里我们就要用ODBC与Access数据库建立连接

使用ODBC连接数据库如图3.2所示:

 

图3.2ODBC访问数据库

应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。

这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。

在ODBC中,ODBCAPI不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。

驱动程序管理器负责将应用程序对ODBCAPI的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。

由于是采用MFC编程,而在MFC的ODBC类对较复杂的ODBCAPI进行了封装,提供了简化的调用接口,从而大大方便了数据库应用程序的开发。

程序员不必了解ODBCAPI和SQL的具体实现细节,利用ODBC有关的类即可完成对数据库的大部分操作。

3.4多线程编程

3.4.1一些概念

进程。

进程是操作系统分配资源的基本单位,是程序运行的一个实例,它是动态的。

每个进程都在各自的私有地址空间中运行,进程之间是不能直接进行通信的。

线程。

线程是操作系统分配CPU资源的基本单位,即是系统中最小的执行单元。

线程运行于进程空间之中,一个进程中可以有多个线程,且共享进程地址空间,所以线程之间的通信是比较方便的。

然而也正是这种便捷,再加上线程的并发运行,使得线程之间的互斥成为必要。

进程只是线程的容器,是

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1