基于P2P的文件共享系统毕业设计
- 格式:doc
- 大小:579.00 KB
- 文档页数:84
P2P文件共享系统的设计作者:叶晓琼来源:《电脑知识与技术·学术交流》2008年第30期摘要:系统Qt P2P file-sharing System (QPS)是利用Qt开发的P2P文件共享系统。
QPS采用P2P中的混合模式,此模式结合了集中目录式和纯分布式两者的优点,在实现上具有简易性,在共享度上具有很强的扩展性。
QPS的最大特点是加入了策略。
这种策略能限制一些用户只下载而不共享资源的行为。
策略的引入是为了鼓励用户与其他人分享自己的资源,而不仅仅是索取。
入策略的QPS不仅能比较有效的限制只下载不分享的行为,而且对系统的寿命也有相当程度的提高。
关键词:文件共享;P2P;策略;Qt中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)30-0633-03The Design of a P2P File Ssharing SystemYE Xiao-qiong(Xianning Vocational Technical College, Xianning 37100, China)Abstract: QPS is a peer-to-peer file sharing system implemented in Qt. It uses a mediated-based mode. This mode combines the strengths of centralized-directory mode and purely-distributed mode, and can be implements simply and has strong expansibility on the share pitch. The most favorable characteristic of QPS is that it introduces a strategy, which can restrict the free rider behavior of users who only download file but not share any. The purpose of the strategy is to encourage users to share their resources with others but not only ask for.With the strategy as described above, QPS can not only restrict downloading but also increase its lifetime.Key words: file sharing system; P2P; scheme; Qt1 引言C/S式架构造就了一批著名的门户网站,如雅虎,新浪等。
基于P2P的视频共享系统的设计与实现的开题报告
1.研究背景与意义
随着互联网技术的不断发展,视频共享已成为当今互联网应用重要的组成部分,能够充分满足用户对于视频内容的需求。
在传统的视频共享系统中,视频数据存储于服务器,由服务器向所有客户端提供服务。
在用户访问量较大时,服务器往往会面临巨大的负担,导致传输速度较慢,服务质量下降等问题。
而基于P2P的视频共享系统则能够解决这些问题,分散了服务器的负载,提高了服务的稳定性和可靠性。
2.研究内容与方法
本文将研究基于P2P的视频共享系统的设计与实现,主要包括以下内容:
(1) 系统结构设计:本文将以分布式系统理论为基础,设计P2P网络的结构,实现用户随机访问和信息交换。
(2) 协议设计:P2P协议是P2P网络功能实现的关键。
本文将研究目前P2P协议的各种方法,包括纯P2P方法、混合P2P方法等,综合各种方法合理设计协议。
(3) 数据传输与缓存技术:P2P网络使用广泛的数据传输技术包括BT、Emule等,在此基础上,本文将研究相应的缓存技术实现,提高传输效率。
3.预期结果与意义
通过本文的研究,将可以完成基于P2P的视频共享系统的设计与实现,实现视频共享的高效稳定,并可以应用于各种在线视频应用中,如在线教育、在线影视、在线直播等。
同时本研究对P2P网络技术的研究也具有一定的参考意义。
基于P2P网络的内容共享模式研究一、前言P2P网络是指点对点网络,是一种分布式的计算机网络结构,也是互联网的重要组成部分。
在P2P网络中,每个节点具有相同的能力,可以作为数据的提供者和请求者共同参与数据的传输和共享。
随着网络技术和设备的不断发展,P2P网络成为了一种流行的内容共享模式,在实际应用中得到了广泛的使用和推广。
本文将围绕基于P2P网络的内容共享模式展开研究,主要包括该模式的定义、优势、技术原理以及安全性等方面的分析。
二、基于P2P网络的内容共享模式定义基于P2P网络的内容共享模式是指利用点对点网络结构,将各个节点上的资源(如文件、软件、音乐、视频等)共享,并通过P2P网络的技术手段,实现内容的快速传输和共享。
该模式具有高效、安全、节省带宽、无中心化等特点,已成为一种流行的内容共享方式,在互联网上得到广泛的应用。
三、基于P2P网络的内容共享模式优势1.高效性:基于P2P网络的内容共享模式能够利用网络中的所有资源和带宽,实现数据的快速共享和传输,能够更好的满足用户的需求。
2.节省带宽:传统的内容共享方式需要采用服务器集群等高昂的硬件设备来实现数据的传输和共享,而P2P网络则可以有效的节省这些硬件设备的成本。
3.去中心化:基于P2P网络的内容共享模式没有中心化的服务器,每个节点都具有相同的能力,可以作为数据的提供者和请求者,确保了共享数据的可靠性。
4.低成本:基于P2P网络的内容共享模式不需要专门的服务器来存储数据,可以充分利用各节点的空闲资源,这样可以有效的降低成本,提高效率。
五、基于P2P网络的内容共享模式技术原理基于P2P网络的内容共享模式的技术原理主要包括四个方面:节点的发现、资源的搜索、资源的下载和上传。
1.节点的发现:在P2P网络中,每个节点都应该能够发现其他节点。
节点的发现主要通过向周围的几个节点发送“hello”消息,得到响应后建立连接,最终连接到整个网络。
2.资源的搜索:在P2P网络中,每个节点都具有特定的资源,其他节点可以通过网络查找需要的资源。
合肥学院计算机科学与技术系课程设计报告2010~2011学年第一学期课程JA V A课程设计课程设计名称P2P文件共享程序学生姓名戴镇玲学号0704031006专业班级07网络工程1班指导教师许强、张贯虹2010年9月一. 需求和规格说明1.课程设计目的通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《JAVA语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用JAVA语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的设计方案。
(5)熟练掌握JAVA语言网络编程、输入输出流,灵活运用各种类库。
2.课程设计名称及内容课程设计名称:P2P文件共享程序设计内容:编写一个可以进行点对点的文件共享程序,能够进行网络上的文件共享和传输。
3.任务和要求该程序软件可以在任何一个标准配置的主机上运行,运行该程序的主机既是客户端,也是服务器端,是一个多线程程序。
作为服务器端,运行一个服务器线程始终监听指定的端口,如果网络上有其他主机要求建立连接,互相交换共享文件信息,双方就可以互相下载对方共享的文件。
4.设计方案提示程序中的端口可以设置的高些,因为很多的低端端口被系统所使用。
可以使用JAVA中的Socket对象中的getInputStream方法和getOutputStream方法来传输数据流。
5.相关背景可以说文件交换的需求直接引发了P2P技术热潮。
在传统的WEB方式中,要实现文件交换需要服务器的大力参与,通过将文件上传到某个特定的网站,用户再到某个网站搜索需要的文件,然后下载,这种方式的不便之处不言而喻。
电子邮件是方便了个人间文件传递问题,却没法解决大范围的交换。
基于P2P的局域网多线程共享软件设计论文基于P2P的局域网多线程共享软件设计论文1 系统概述本系统的主要功能其一,局域网下的文件P2P共享,这里包括文件的传输和文件列表的传输;其二,局域网下用户的P2P心跳检测。
系统的特点是多线程多任务同步。
2 设计思想下面将从两个大模块来介绍设计思路,首先是文件的收发,然后是文件列表的收发和心跳模块,如图1所示。
2.1 文件收发模块文件的收发是resource-shaie最基本的功能,也是最核心的功能。
2.1.1 有关文件收发的Socket的分类因为这里采用的是TCP协议,所以在程序中,大体上存在于3组Socket,与文件收发有关,一组Socket是welcomesocket,用于监听连接的到来,并Accept;另一组Socket,是数据传输的Socket,来自于welcomesocket的accept(),用于send文件数据给对等方,姑且称作sendsocket;最后一组Socket也是数据传输的socket,通过connect()对等方的welcomesocket得到,与上面那个sendsocket是直接相连的,只是因为所面对的对象不同,对于当前对等方,因为这个Socket的用于recover文件,姑且称作recvsocket。
可以这样理解,对于一个对等方来说,sendsocket就只send(),recvsocket就只recover ()。
之所以这样分开,是为了方便管理,降低耦合度,使得两个对等方之间的所直接相连的一对sendsocket和recvsocket在一个文件任务中维系关系,也就是说,一对socket,在同一时间只共同执行一个任务,一边是发和一边是收。
然而,如果全在一个Socket中send和recv,就会变得很乱,一个socket就可能牵连多个任务,一个socket出了问题,可能几个任务的收发都会失败。
下面举一个例子来具体说明为什么要这样分类。
一种新颖的P2P文件共享系统的动力学模型P2P文件共享系统是一种用于在线文件共享的技术,它允许在不同网络上的用户之间共享文件。
P2P系统的原理是在不同的计算机之间建立点对点(Peer-to-Peer)连接,以便能够实现文件传输。
在传统的分布式文件共享网络中,每个用户都必须与其他用户建立独立的连接,以便在之间传输文件。
但是,在P2P文件共享系统中,每个用户都可以充当文件服务器,帮助其他用户下载文件。
在传统的P2P文件共享系统中,每个用户都可以供给和下载文件。
这就意味着,虽然这些系统可以非常快速地传输文件,但是它们需要很多带宽和存储空间。
这就会导致用户的带宽和存储资源被浪费,以及可能让一些用户失去积极参与的动力。
为了满足这种需求,研究人员们设计了一种新型的P2P文件共享系统,采用了更高级的动力学模型来提高系统的效率和公平性。
该新型P2P文件共享系统使用“激励策略”,以鼓励用户积极参与共享。
激励策略的基本原则是让用户能够根据自己在系统中的活动量获得奖励,从而增加他们参与共享文件的动力。
用户可以通过分享、下载和上传文件等方式获得奖励,并且可以贡献自己的带宽和存储资源,同时也可以使用其他人的带宽和存储资源。
激励策略的好处在于,它提供了一种公正合理的系统,以鼓励大家平等地分享和使用文件。
该系统建立的动力学模型基于一系列的元素和规则,该动力学模型描述了用户在系统中的行为和相互作用。
用户的活动取决于他们收到的激励,以及他们的实际贡献。
如果一个用户接收到很少的激励或感觉到其他用户没有真正积极共享,那么他便有可能离开系统或不再积极参与共享。
类似地,如果一个用户获得了很多的激励或感觉到其他用户真正积极共享,那么他就有可能继续留在系统中,继续参与共享行为。
总的来说,这种动力学模型建立了一个互相连通的共享系统,它允许用户在其中相互分享和访问文件,从而获得一些奖励与激励。
新型的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++进行网络开发的过程和步骤,为今后从事软件行业奠定了基础。
合肥学院计算机科学与技术系课程设计报告2012~2013学年第一学期课程JAVA语言课程设计名称P2P 文件共享程序学生姓名学号1104014002专业班级11计算机科学与技术4班指导教师张贯虹、胡春玲2013 年1月一.设计题目及具体要求编写一个可以进行点对点的文件共享程序,能够进行网络上的文件共享和传输。
该程序软件可以在任何一个标准配置的主机上运行,运行该程序的主机既是客户端,也是服务器端,是一个多线程程序。
作为服务器端,运行一个服务器线程始终监听指定的端口,如果网络上有其他主机要求建立连接,互相交换共享文件信息,双方就可以互相下载对方共享的文件。
二.总体设计思路本程序仅有一个P2P.java的源码文件。
该文件中共有有四个类:P2P、suface、receive、send。
其中P2P为主类,程序启动后,由P2P中主函数public static void main(String args[])实例化一个surface对象。
Surface继承自frame类,并实现ActionListener接口,由它实现窗口界面与事件响应,并与用户交互。
Surface根据用户作出的具体操作选择(接收或分享)启动一个receive或send线程,由最终由receive线程对象完成接收操作,由send线程对象完成分享操作。
三.具体设计全局流程图:本程序涉及成员变量与方法名称种类功能从属sur surface类对象用户交互P2P main 主方法程序执行入口P2Pgb GridBagConstraints类对象自定义界面网格布局surfacegbl GridBagLayout类对象网格布局surfaceb1\b2\b3 \b4 Button类对象界面按钮surfacel1\linfo\si nfo Label对象标签,显示信息surfacetf TextField类对象文本框,输入对方IP地址surfacesfile\lfile string类对象文件名,存储文件位置surfac eload\save filedialog类对象打开\保存文件对话框surfaceiss; 布尔值记录用户选择分享\ 接收surfac esurface() surface类构造方法——surfaceactionPer formed()ActionListener接口中方法实现事件响应并启动线程surfacese\re send\receive类线程对象实现分享\接收功能surfaces socket类对象发起连接receive\sendfile file类对象表示进行I\O操作的文件receiv e\sendstr int值方便数据I\Oreceiv e\sendra InetAddress值表示对方IP地址receiv e\sendss ServerSocket类对象监听端口,接收连接receive\sendin InputStream输入流receiv类对象 efos FileOutputStream类对象文件输出流receivebos BufferedOutputStream 缓冲流receivereceive receive构造方法接收文件位置等参数receiveout OutputStream类对象输出流sendfis FileInputStream类对象文件输入流sendbis BufferedInputStream缓冲流send send send send send 用户交互模块:public void actionPerformed(ActionEvent e){if(e.getActionCommand()=="分享"){//用户选择分享load =new FileDialog(this,"请选择需要分享的文件", FileDialog.LOAD);load.show();//弹出文件对话框lfile = load.getDirectory()+ load.getFile();iss =true;//记录“分享”选择}if(e.getActionCommand()=="接收"){//用户选择接收save =new FileDialog(this,"请选择存放文件位置及文件名", FileDialog.SAVE);save.show();//弹出文件对话框sfile = save.getDirectory()+ save.getFile();iss =false;//记录“接收”选择}if(e.getActionCommand()=="本机接受连接"){if(iss){//若用户事先选择“分享”send se =new send(new File(lfile));se.start();//启动分享线程l1.setText("开始分享");}else{//若用户事先选择“接收”l1.setText("开始接收");receive re =new receive(new File(sfile));re.start();//启动接收线程}}if(e.getActionCommand()=="本机发起连接"){if(iss){//若用户事先选择“分享”send se;l1.setText("开始分享");try{se =new send(new File(lfile),InetAddress.getByName(tf.getText()));se.start();//启动发送线程}catch(UnknownHostException e1){l1.setText("输入地址有误!");}}else{//若用户事先选择“接收”receive re;l1.setText("开始接收");try{re =new receive(new File(sfile),InetAddress.getByName(tf .getText()));re.start();//启动接收线程}catch(UnknownHostException e1){l1.setText("输入地址有误!");}}}}}接收模块:class receive extends Thread {Socket s;File file;InputStream in;FileOutputStream fos;BufferedOutputStream bos;int str;InetAddress ra;receive(File file, InetAddress ra){//本地发起连接时构造方法(接收对方地址)this.file = file;this.ra = ra;}receive(File file){//本地接收连接时构造方法this.file = file;}public void run(){try{this.fos =new FileOutputStream(file);//建立文件输出流}catch(FileNotFoundException e1){surface.rinfo.setText("文件打开失败!");}try{this.bos =new BufferedOutputStream(fos);if(ra ==null){//若未得对方地址,表示本机接收连接ServerSocket ss =new ServerSocket(9999);//监听端口9999 s = ss.accept();}else//否则本机发起连接s =new Socket(ra,9999);in = s.getInputStream();while((str = in.read())!=-1)//读入输入流直至末尾bos.write(str);surface.rinfo.setText("接收成功!");bos.close();fos.close();in.close();s.close();}catch(IOException e){surface.rinfo.setText("接收失败!");}}}分享模块:class send extends Thread {Socket s;File file;int info;OutputStream out;FileInputStream fis;BufferedInputStream bis;int str;InetAddress ra;send(File file, InetAddress ra){//本地发起连接时构造方法(接收对方地址)this.file = file;this.ra = ra;}send(File file){//本地接收连接时构造方法this.file = file;}public void run(){try{this.fis =new FileInputStream(file);//建立文件输入流}catch(FileNotFoundException e1){surface.sinfo.setText("文件打开失败!");}try{this.bis =new BufferedInputStream(fis);if(ra ==null){//若未得对方地址,表示本机接收连接ServerSocket ss =new ServerSocket(9999);//监听端口9999 s = ss.accept();}else//否则本机发起连接s =new Socket(ra,9999);out = s.getOutputStream();while((str = bis.read())!=-1)//读入缓冲输入流直至末尾out.write(str);surface.sinfo.setText("分享成功!"); bis.close();fis.close();out.close();s.close();}catch(IOException e){surface.sinfo.setText("分享失败!");}}}1.程序启动界面2.接收成功界面3.分享成功界面4.对方IP输入有误,传输失败。
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 设计系统的可行性分析建立系统的可行性包括经济可行性、技术可行性和运营可行性,法律可行性。
经济可行性:与请求别人帮助设计相比,省去一笔费用和沟通时间。
技术可行性:使用Visual C++作为开发工具,利用MFC进行编程,便于高效开发GUI应用程序,ClassWizard使得消息映射简便易行,文档/视结构轻松处理和更新数据。
在此集成开发环境下,开发Windows应用程序是一件比较容易的事情。
运营可行性:此扫描系统软件可以用于商业销售,为作者赢取部分收入。
法律可行性:此系统是应毕业设计的要求而开发的,以后也只是用于个人或正当的商业活动,不会触犯法律。
经分析,本系统是可以进行开发和研究的。
3 相关理论和技术3.1 网络协议3.1.1 TCP协议TCP[2]协议(Transfer Control Protocol)即传输控制协议,它为网络应用程序提供面向连接的可靠的传输服务,工作在网络体系结构中的传输层。
TCP在数据传输之前首先要利用三步握手协议建立连接,并且提供了分组编号,数据校验和重传机制,确保数据传输的正确无误。
3.1.2 UDP协议UDP[2]协议(User Datagram Protocol)即用户数据报协议,它为网络应用程序提供无连接的数据传输服务,和TCP协议一样,也工作在网络体系结构的传输层。
UDP在数据传输之前不需要建立连接,数据准备好就直接发送出去,不能保证分组准确到达目的地。
然而由于没有三步握手和数据重传操作,传输比较方便。
3.1.3 IP协议IP协议(Internet Protocol)即互联网协议,它被用于异构网络的互联,是各种各样种类繁多的网络的粘合剂,工作在网络体系结构的网络层,为传输层提供独立于网路的分组路由服务。
每一台连在网络上的主机都会分配到一个IP地址,用以在网络上标识这台主机。
3.1.4 ICMP协议ICMP[2]协议(Internet Control Management Protocol)即互联网控制报文协议。
是IP协议的附属协议,主要负责在主机之间,主机与路由器之间传递差错信息或者其它需要需要注意的信息。
3.1.5 说明对于从源主机将数据传输到目的主机来说,IP地址和物理地址是必需的。
但是数据到达目的主机并不是在互联网上通信的目的。
互联网上数据通信的最终目的是提供端到端的数据传输,即使一台主机上的某个进程能够和另一台主机上的某个进程进行通信。
然而主机上通常有很多网络应用进程,怎样去区别呢?传输层提供了一种方法:凡是利用传输层进行通信的进程都被唯一地分配了一个16位的标识,称为端口号(Port)。
这样,借助于IP地址和端口号,就可以在网络上唯一地表示一个进程了,进而完成进程之间的通信。
所以,一个端口就是一个潜在的通信通道,也是一个潜在的入侵通道,对目标计算机进行端口扫描可以得到许多有用的信息。
3.2 Socket套接字3.2.1 套接字概述网络层为我们提供分组路由服务,传输层为我们提供数据传输服务,那么我们怎样在应用程序中利用这些服务呢?答案是使用套接字[4]。
套接字是一种网络编程界面,它方便了我们使用网络传输服务,为我们进行基于网络的应用开发提供了一整套编程接口。
套接字是网络的基本构件,是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连的监听进程。
套接字存在于通信区域(通信区域又称地址簇)中。
套接字只与同一区域中的套接字交换数据(跨区域时,需要执行某和转换进程才能实现)。
Socket包含两个方面的含义:其一它是由操作系统或外部过程提供的一组网络编程接口函数,是被广泛接受的网络编程方法;其二它表示一种网络参数,通常将IP地址和网络应用端口的结合称作Socket(插口)。
3.2.2 Windows Sockets基础Windows Sockets(套接字)是在Windows下的一套开放的、支持多种网络协议的、二进制兼容的网络编程接口规范。
WinSock(Windows Sockets简写为WinSock。
)的目的是抽象隐藏网络底层细节,它独立于底层的协议,编程人员无需精通网络和协议的细节,即可实现网络编程。
使用WinSock的应用程序可以在遵从Windows Sockets API的任何网络上进行通信。
每个 socket 都有一个类型,它是根据用户可见的通信特征进行描述的。
一般应用程序只在同一类套接字间通信。
不过只要它依据的协议支持,也完全可以在不同类型的套接字间通信。
在 WinSock 1.1 只支持两种 socket 类型:#define SOCK_STREAM 1 /* stream socket */#define SOCK_DGRAM 2 /* datagram socket */使用最多的是 SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。
(1) 流式套接字(Stream sockets)它适用于没有记录边界的字节数据流,保证分组投递(delivered)、顺序正确并且没有重复分组。
一般用于TCP协议。
(2) 数据报套接字(Datagram sockets)它支持面向记录的数据流,但不保证分组投递、不保证顺序、可能有重复分组。
一般用于UDP传输协议中。
在Winsock 2.1以后添加了对原始套接字的支持:#define SOCK_RAW 3 /* raw-protocol interface */通过使用原始套接字我们可以从网络接口捕获到原始的数据包,从而可以对感兴趣的数据做出自己的处理,或者自己构造原始数据包发送到网络上。
在本系统程序中就利用WinSock库创建原始套接字,以实现对局域网的监听。
关于进程是如何利用套接字进行通信的,见图3.1。
图3.1 套接字的使用3.3 数据库编程常见的DBMS(数据库管理系统)有SQL2000,Oracle,Sybase,Access等。
其中的前三个都是属于大型数据库管理系统,用于大量数据的管理,Access数据库比较适用于小型数据的管理。
所以在本扫描系统的实现中选用了与Access 数据库建立连接。
然而,要是应用程序中直接与DBMS打交道,将会面临数据库类型的多样性所导致的编程的繁琐。
面对不同类型的数据库,微软提供了ODBC数据库接口,用来以一种统一的方式处理与所有的数据库的连接。
这里我们就要用ODBC与Access数据库建立连接使用ODBC连接数据库如图3.2所示:图3.2 ODBC访问数据库应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。
这样,只要应用程序将数据源名提供给ODBC,ODBC 就能建立起与相应数据库的连接。
在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。