




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计(论文)题目 多线程网络文件传 输系统的设计与实现 学生姓名 学号 专业 班级 指导教师 评阅教师 完成日期2013 年5月 15日 2学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。 作者签名: 年 月 日 学位论文版权使用授权书本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权省级优秀学士学位论文评选机构将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本学位论文属于1、保密 ,在_年解密后适用本授权书。2、不保密 。(请在以上相应方框内打“”) 作者签名: 年 月 日 导师签名: 年 月 日 目 录摘要1前言21 绪论41.1 研究背景及意义41.2 国内外研究现状41.3 本文研究内容52 系统需求分析62.1 功能模块描述62.2 软件需要实现功能72.3 通信原理及过程73 主要实现技术83.1关键要点分析83.2数据传输协议83.3 c/s构架123.4 多线程编程123.5 多线程技术133.6 文件的分块153.7 多线程文件传输与断点续传163.8 windows socket编程163.9 套接字和客户服务器通信204 系统概要设计与实现204.1 通信过程214.2 socket建立连接过程214.3 文件的传输235 系统功能的演示255.1 服务器和客户端运行界面255.2 文件传输的演示266 总结与展望286.1 本文完成的主要工作286.2 未来研究展望28致谢29参考文献302 多线程网络文件传输系统的设计与实现 学 生: 指导教师: 摘 要:文件传输是因特网上最常用的服务之一,多线程文件传输能有效地提高文件传输的速度和效率,本系统采用windows socket实现,套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。系统分客户端软件和服务器端软件两部分,同时需要用到多线程相关知识,一个应用程序可以同时有多个线程一起运用cpu的资源,大大的加强对cpu的利用率,同时也从另一个方面加快了传输的速度。由于tcp/ip连接协议的服务是设计客户端/服务器应用程序时的主流标准,所以本软件主要采用tcp/ip协议的网络通信技术;客户端,服务器类是从casyncsocket类中继承来的,因此本软件通信完全是异步的;程序在 windows xp系统、visual c6.0下编译通过,且运行良好。关键词:文件传输 套接字 多线程 abstract:file transfer is one of the most commonly used services on the internet, a multi-threaded file transfer can effectively improve the file transfer speed and efficiency, this system use the windows sockets implementation, socket can be regarded as two network applications for communications, each an endpoint of communication.client software and server software system points two parts, the need to use multithreading knowledge at the same time, an application can have multiple threads at the same time with the use of cpu resources, greatly strengthen the cpu utilization, but also from another aspect to speed up the transmission speed.as tcp/ip agreement linking the service is designed client / server application procedures for the mainstream standards, therefore, the software used mainly tcp/ip agreement network communication technology; client, server from casyncsocket inherited category, and therefore the software is completely asynchronous communi- cation; procedures in windows xp system and under visual c + + 6.0 compiler,and running well1keywords:the file transfer the socket multithreading 前言 如今随着计算机应用的普及,已经有越来越多的人正在internet(国际互联网)上畅游,许多人也已经将进入internet作为下一个计算机升级的目标,而使用internet进行文件传输,则是计算机联入internet的一个重要功能之一。下面我们详细地谈一谈如何使用internet的ftp功能进行文件传输。ftp中文意思为文件传输协议,用于管理计算机之间的文件传送。一般说来,我们联网的主要目的就是实现信息共享,而文件传输则是计算机间实现信息共享的一个非常重要的内容之一。在internet上早期实现文件传输并不是一件很容易的事,因为internet是一个非常复杂的计算机环境,有个人电脑、工作站、mac、服务器、还有大型机等。据统计目前连接在internet上的计算机已经有四千多万台,并且每年正在以20%的速度增长。而这些连接在网上的计算机也在各自运行着不同的操作系统,有运行windows、dos的个人电脑,有运行macos的苹果机,也有运行unix的服务器等,而各种操作系统的文件结构也各不相同。要解决这种异种机、异种操作系统之间的文件传输交流问题,需要建立一个统一的文件传输协议,这就是ftp。基于不同的计算机操作系统,就有不同的ftp应用程序,而所有的这些应用程序都遵守同一种协议,这样我们就可以把自己的文件传送给别人,或者从其他的计算机用户中获得文件。因此文件传输通常就是指计算机利用internet进行文件传输的服务。ftp允许您从数以千计的远程主机上把文件传输到您的主机上,您可以传输计算机程序、图像、声音、电影或其它任何文件。 ftp用于internet上的控制文件的双向传输。在实现的层面上,ftp又可理解为一个可用于文件传输的客户机/服务器系统(c/s架构),该系统包括客户机端程序和服务器端程序,客户端和服务器端通信规则为ftp协议。用户通过客户机程序向服务器程序发出命令请求,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序接收到这个文件,将其存放在用户目录中。在通信协议的分层模型中,文件传输协议是在tcp(transmission control protocol,传输控制协议)之上的一个应用层协议,应用程序之间的通信需要用到传输层提供的字节流透明无误传输服务。windows操作系统具有tcp/ip协议栈,应用程序可通过winsock api函数的调用实现端到端透明数据链接的建立。 网络应用程序是一种在不同系统的新进程间通过网络通信协议进行的进程间的通8信问题。在网络中为了标识通信的进程,首先要标识网络中进程所在的主机,其次要标识主机用ip地址来标识不同的主机,主机上不同的进程要用使用端口号来标识。 其次,在windows中编程是通过套接字socket来编程的,套接字可以看成是两个网络应用程序进行的通信时,各自通信连接种的一个端点。通信时,其中的一个网络应用程序将要传输的一段信息写入它所在主机的socket中,该socket通过网络接口卡nic的传输介质将这段信息发送到另一台主机的socket种,使这段信息能穿传送到其他程序中。要通过internet进行通信,至少需要一对套接字,其中一个运行在客户端,称之为clientsocket,另一个运行于服务器端面,称为serversocket。根据连接启动的方式以及本地要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听、客户端请求、连接确认。服务器监听是指服务端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求是由客户端的套接字提出连接请求,要连接的目标是服务器端套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器套接字的地址和端口号,然后再向服务器端套接字提出连接请求。 连接确认是当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的信息发送给客户端,一旦客户端确认了此连接,连接即可建立。而服务器端继续处于监听状态,继续接收其他客户端的连接请求。 网络传输文件的时候还需要用到多线程和线程间访问互斥文件的问题。创建线程后,一个应用程序可以同时有多个线程一起运用cpu的资源,大大的加强对cpu的利用率。同时也从另一个方面加快了传输的速度。但是要遇到一个问题就是各个线程对文件的共享问题。所以建立好的信号量来实现他们之间的访问规则是很重要的。否则,传输的文件将会出现很多问题。11 绪论 这一部分主要介绍多线程文件传输的相关背景和研究的意义,大致概括了国内外研究的现状,最后说明了本系统需要研究的主要内容。1.1 研究背景及意义1.1.1 研究背景 目前,国内外企业对局域网的文件传输系统认识和使用情况并不好,各个企业单位在局域网内实现文件传输,资源共享还有很大的缺陷。技术无论是从理论上或实践上都还不够完善。文件传输系统由于比较复杂,可变因素较多,安全性低,因此发展还不成熟。 但是随着科学技术的发展,各种以局域网为单位的文件传输系统已经进入稳健发展期,比如说市面上比较普遍使用的qq、uc、飞鸽传书等以内部网络为中心的资源共享系统也即将进入高速发展期。在国内,随着企业资源管理的规范化和规模的不断扩大,企业的计算机资源管理将不仅仅停留在依靠硬件或者internet网络获取,而且将会向着安全的内部网络化资源管理方式迈进。1.1.2 研究意义1.学会采用多线程提高传输速度 文件传输是因特网上最常用的服务之一,多线程文件传输能有效地提高文件传输的速度和效率。2.学会利用windows socket进行高性能开发 本系统采用windows socket实现,windows socket是因特网上进行通信程序设计的常用方法,是开发高性能网络程序的基础,采用socket方法可以编写出满足各种应用需要的网络程序,具有很强的适应性。3.掌握网络底层开发技术本课题通过对网络文件传输系统的开发,使我掌握socket编程技巧,熟悉网络底层软件开发方法。1.2 国内外研究现状 目前,国内外企事业单位对文件传输系统的认识和使用情况并不好,各企事业单位大多在局域网内实现文件传输,资源共享方面还存在较多缺陷,对相关技术的理论研究也不够深入。由于文件传输系统的复杂性、多变性、安全性低等特点,使得其发展还不8够成熟。随着科学技术的发展,各种以局域网或是广域网为基础的文件传输系统已经进入稳健发展时期。而计算机网络通信技术已趋于成熟,促使应用于文件传输的软件种类不断增多。由于网络编程技术的发展,人们使用的文件传输软件也表现出更多的高性能、易操作、稳定好等特点,但是开发者在注重下载功能实现的同时,往往忽略了用户上传文件的需要。 在国外,用户使用的传输软件主要有网络蚂蚁(netant)和网际快车(flashget)。这些软件大都是针对用户下载来设计的,能够实现功能完善的下载服务。在国内,用户使用的文件传输软件主要是迅雷和飞鸽传书。迅雷主要针对的是文件快速下载的实现,而飞鸽传书则主要应用于局域网中的文件共享。目前常用的文件传输软件往往功能比较单一,也缺乏良好的用户使用界面和方便快捷的服务。许多软件在断点续传、多线程传输、进度显示以及文件的动态压缩等方面还存有欠缺。 随着企事业单位资源管理的规范化和规模的不断扩大,计算机的资源管理以及办公文档的发布和传递将不仅仅停留在依靠硬件或者电子邮件的获取上,而是会向着更全面、更可靠、更快捷的方向发展。过去,企事业单位往往将文件传输系统与oa系统结合在一起并将其作为oa系统的一个模块来处理。对于文档传输模块的设计,通常都是为办公文档管理而设计,并不能考虑到一些特殊文档的管理情况,例如多个文档同时传输的高效存储访问的问题等。综上所述,目前的文件传输系统在文件多线程传输的实现上还不是很完善,虽然可供用户选择的文件传输软件种类繁多,但仍然存在质量良莠不齐、功能各有异同的问题,用户在使用的时候也总会遇到诸多的不便,需要对一些技术做进一步的改进和提高,对于那些经常需要同时传输多个文件的特殊行业和生产领域,更加需要有针对性的进行改善。1.3 本文研究内容1.软件设计原理本软件是在windows操作系统下,visual c+ 6.0环境下借用winsock控件实现的,是基于tcp/ip协议的c/s模式,在服务器端和客户端分别以socket为中心进行编程,客户端和服务器端的界面分别是由文件发送模块和文件接收模块组成。客户端先调用connect()与服务器建立连接,然后用send()发送数据;服务器端先调用listen()侦听客户端的连接请求,然后调用accept()对连接请求进行响应,如果需要接收数据,则会调用receive()接收。 82.软件设计思路 我设计实现的多线程文件传输系统主要包括两个大的部分:服务器端和客户端。其中服务器端开启服务,监听客户端的连接,然后如果有客户端开启,建立了连接以后,就可以由服务器端选择文件来进行发送传输。在服务器端,因为是多线程传输,会有文件的分割,所以文件传输的时候可以选择较大的文件进行传输,客户端同时也是和服务器端一样用多线程进行连接和接收,同时客户端可以开启多个,并同时接收服务器传输的文件。3.软件主要功能本文件传输系统主要实现了服务器端和客户端的文件传输,并且采用多线程技术,有效地提高了文件传输的效率。软件研究了windows多线程编程技术,使用流式套接字来完成服务器端与客户端连接。根据客户端对服务器端访问的特点,在服务器端采用异步方式监听客户端的连接请求,避免客户端长时间等待服务器端的回应出现卡死现象,更好的完成客户的文件传输需求,充分利用服务器端的系统资源。2 需求分析 这一部分主要对多线程文件传输系统需要实现的基本功能进行描述以及介绍了服务器和客户端进行通信的基本原理。2.1 功能模块描述 我设计实现的文件传输系统主要包括两个大的部分:服务器端和客户端。即传统的c/s模式,其中服务器端开启服务,监听客户端的连接,然后如果有客户端开启,建立了连接以后,就可以由服务器端选择文件来进行发送传输,首先是添加文件到服务器端,客户端接收文件时,点击接收是首先获取的是相关文件的地址信息,然后你双击保存文件到相关文件夹,这时候服务器就会调用相关线程进行传送。 服务器只能开启一个,并向客户端传送文件,客户端可以开启多个,并且可以同时接收服务器的文件,传送文件时,服务器可以实现对文件的分割,所以可以传送较大的文件。系统不仅可以在同一台pc机上传输,同时可以在局域网内传输,体现了网络传输1的功能。2.2 软件需要实现的功能 这里就分别介绍了服务器和客户端需要完成的功能,其中由于文件只能从服务器发送到客户端,而不能从客户端发送到服务器,所以在文件传输时服务器只能发送文件而客户端只能接收文件。2.2.1 服务器端的应用程序将完成如下功能监听客户端的连接请求为请求连接的客户端建立socket队列向客户端发送消息从客户端接收消息向客户端发送文件2.2.2 客户端的通信程序将完成如下功能建立与服务器的连接关闭与服务器的连接向服务器发送消息从服务器接收消息从服务器接收文件2.3 通信原理及过程大多数通过网络进行通信的应用程序,不论是通过因特网还是小型的办公网络,它们都使用同样的原则和功能来执行通信。计算机上的一个应用程序正在等待另一个程序打开通信连接,可以说这前一个应用程序正在“侦听”该连接请求,这很像你在等待某人给你打电话时,一直在留心电话铃声。与时同时,另一个应用程序,一般是运行在另一台计算机上(当然也可以是同一台机器上),试图同第一个应用程序连接。这种试图找开连接的方式就类似于向某人打电话。你拨了电话号码,并希望要找的那个人正在电话线的另一头等接电话。当然,要完成电话的呼叫,必须知道被呼叫方的电话号码。同样的道理,试图连接到第一个应用程序的这个程序也必须知道第一个应用程序的网络位置或网络地址。一旦两个应用程序建立了连接,它们之间就可以互相发送和接收消息 。正像两个人打电话交谈一样,这个连接是一个双向的通道,即双方都可以发送消息。最后,如果一方或双方完成了对话,连接即关闭,就像打完电话一样,你能够知道电话中的对方是否把电话给挂断了,或者双方由于其它原因连接不上了。一旦该应用程序同一1个应用程序之间建立了连接,就能够在它的对话框里键入要发送的文本消息,并把它们发送给另一个应用程序。消息被发送之后,就被加到已发送消息的列表中。接收到的每一条消息都被复制到所有已收到的消息列表中。这样就能看到完整的已发送和已接收到的消息列表,还可以对发送消息的应用程序和接收消息的应用程序进行比较。3 主要实现技术 这一部分主要介绍实现本系统相关功能需要用到的核心技术,并对相关技术进行了具体的介绍。3.1 关键要点分析 文件传输的本质用一句话概括就是:发送方将文件数据读出来,然后调用套接字的发送函数将数据传输到接收方,接收方调用套接字接收函数接收数据,然后重新建立文件并将数据写入文件。 tcp协议提供的是可靠的、面向连接的传输控制协议,即在传输数据前要先建立逻辑连接,然后再传输数据,最后释放连接3个过程。tcp提供端到端通信;采用字节流方式,如果字节流太长,将其分段;提供紧急数据传送功能。 多线程可以同步完成多项任务,不是为了提高运行效率,而是为了通过提高资源使用效率来提高系统的效率。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行,也可以把它理解为代码运行的上下文。线程负责在单个程序里执行多任务,通常由操作系统负责多个线程的调度和执行。winsock 是在windows进行网络通信编程的api接口,也是windws网络编程的事实标准。在网络编程中最常用的方案便是客户机/服务器模型。windows sockets 规范定义并记录了如何使用api 与internet 协议族(ips,通常我们指的是tcp/ip)连接,尤其要指出的是所有的windows sockets 实现都支持流套接口和数据报套接口。3.2 数据传输协议以及选择tcp作为本系统的传输协议1.tcp协议tcp协议提供的是可靠的、面向连接的传输控制协议,即在传输数据前要先建立逻辑连接,然后再传输数据,最后释放连接3个过程。tcp提供端到端、全双工通信;采用字节流方式,如果字节流太长,将其分段;提供紧急数据传送功能。tcp协议被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机连接时,tcp协议会让它们建立一个连接、8发送和接收数据以及终止连接。tcp协议利用重发技术和拥塞控制机制,向应用程序提供可靠的通信连接,使它能够自动适应网上的各种变化。即使在internet暂时出现堵塞的情况下,tcp也能够保证通信的可靠。2.udp协议用户数据报协议(udp)如下图所示,它为高层应用提供了ip的无连接特性分组传输通路,在不同计算机之间实现一条数据流。如果检测到错误,分组将被丢弃,且不会执行进一步的动作。udp被称为“无连接”的,因为它不需要握手,在发生差错时也不需要重传数据。基本上,udp在ip上增加了端口寻址功能。报头包括源端口和目的端口、长度字段(包括报头和数据的长度)和校验和,udp中的校验和字段是可选的。udp虽然不如tcp可靠,却可以在网络上快速地发送大量的数据,因而可以用于广播。它允许应用在任何时刻向任何地址发送报文。因此,它通常用于多媒体应用,如实时的视频会议,流式音频和视频以及因特网电话。所用这些应用可以容忍小部分的分组丢失,但udp没有任何的拥堵控制措施。分组在路由器上可能会发生溢出,从而带来严重的问题,但是,差错校验和序列编号等功能也可以加入到选用udp的应用中去。现在,很多流应用运行在udp之上,但是它们内建了应答和重传以减少分组的丢失。不是所用的tcp通信量始终都能通过所有的防火墙,udp经常用作视频和音频流(例如realaudio)的传输方式。 位: 0 15 318个八位位组 源端口 目的端口 长度 校验和83.选择tcp作为文件传输协议 尽管tcp和udp都使用相同的网络层(ip),tcp却向应用层提供与udp完全不同的服务。 tcp提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用tcp的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个tcp连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。 在一个tcp连接中,仅有两方进行彼此通信。广播和多播不能用于tcp。 tcp通过下列方式来提供可靠性: 1应用数据被分割成tcp认为最适合发送的数据块。这和udp完全不同,应用程序产生的数据报长度将保持不变。由tcp传递给ip的信息单位称为报文段或段(segment)tcp如何确定报文段的长度。 2当tcp发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。当tcp收到发自tcp连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒 3tcp将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,tcp将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。4 既然tcp报文段作为ip数据报来传输,而ip数据报的到达可能会失序,因此tcp报文段的到达也可能会失序。如果必要,tcp将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。5tcp还能提供流量控制,tcp连接的每一方都有固定大小的缓冲空间。tcp的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。两个应用程序通过tcp连接交换8bit字节构成的字节流。tcp不在字节流中插入记录标识符。我们将这称为字节流服务(bytestreamservice)。如果一方的应用程序先传10字节,又传20字节,再传50字节,连接的另一方将无法了解发方每次发送了多少字节。收方可以分4次接收这80个字节,每次接收20字节。一端将字节流放到tcp连接上,同样的字节流将出现在tcp连接的另一端。3.2.1 tcp建立连接的过程8 3.2.2 tcp的服务特点1. 面向连接的传输2. 端到端的通信3. 高可靠性,确保传输数据的正确性,不出现丢失或乱序;4. 全双工方式传输5. 采用字节流方式,即以字节为单位传输字节序列;6. 紧急数据传送功能3.2.3 tcp的重传策略tcp协议用于控制数据段是否需要重传的依据是设立重发定时器。在发送一个数据段的同时启动一个重发定时器,如果在定时器超时前收到确认就关闭该定时器,如果定时器超时前没有收到确认,则重传该数据段。在选择重发时间的过程中,tcp必须具有自适应性。它需要根据互联网当时的通信情况,给出合适的数据重发。 这种重传策略的关键是对定时器初值的设定。目前采用较多的算法是jacobson于1988年提出的一种不断调整超时时间间隔的动态算法。其工作原理是:对每条连接tcp都保持一个变量rtt(round trip time),用于存放当前到目的端往返所需要时间最接近的估计值。当发送一个数据段时,同时启动连接的定时器,如果在定时器超时前确认到达,则记录所需要的时间(m),并修正rtt的值,如果定时器超时前没有收到确认,则将rtt的值增加1倍。通过测量一系列的rtt(往返时间)值,tcp协议可以估算数据包重发前需要等待的时间。在估计该连接所需的当前延迟时通常利用一些统计学的原理和算法(如karn算法),从而得到tcp重发之前需要等待的时间值。83.3 c/s构架c/s(client/server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到client端和server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是client/server形式的两层结构,由于现在的软件应用系统正在向分布式的web应用发展,web和client/server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。 3.3.1 客户端(client)客户端(client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序。一般安装在普通的客户机上,需要与服务端互相配合运行。因特网发展以后,较常用的用户端包括了如万维网使用的网页浏览器,收寄电子邮件时的电子邮件客户端,以及即时通讯的客户端软件等。3.3.2 服务器(server)服务器指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。相对于普通pc来说,服务器在稳定性、安全性、性能等方面都要求更高,因此cpu、芯片组、内存、磁盘系统、网络等硬件和普通pc有所不同。3.4 多线程编程 由于用到对话框,所以单线程的操作会严重影响程序功能的实现,所以采用多线程操作,使得在打开一个对话框时,不会影响到另一个对话框的功能,在mfc程序中创建一个线程,调用afxbeginthread函数:cwinthread afxbeginthread(afx_threadproc pfnthreadproc, 控制函数lpvoid pparam, 传递给控制函数的参数int npriority = thread_priority_normal, 线程的优先级uint nstacksize = 0, 线程的堆栈大小dword dwcreateflags = 0, 线程的创建标志lpsecurity_attributes lpsecurityattrs = null 线程的安全属性);1结束进程:进程只是提供了一段地址空间和内核对象,其运行是通过在其地址空间内的主线程来体现的。当主线程的进入点函数返回时,进程也就随之结束。这种进程的终止方式是进程的正常退出,进程中的所有线程资源都能够得到正确的清除。除了这种进程的正常退出方式外,有时还需要在程序中通过代码来强制结束本进程或其它进程的运行。exit- process()函数即可在进程中的某个线程中使用,并将立即终止本进程的运行。 该函数具有强制性,在执行完毕后进程即已经被结束,因此位于其后的任何代码将不能被执行。虽然exitprocess()函数可以在结束进程的同时通知与其相关联的动态链接库,但是由于它的这种执行的强制性,使得exitprocess()函数在使用上将存在安全隐患。3.5 多线程技术3.5.1 线程的组成线程有两部分组成。 1一个是线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。 2另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量。 进程从来不执行任何东西,它只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。这意味着线程在它的进程地址空间中执行代码,并且在进程的地址空间中对数据进行操作。因此,如果在单进程环境中,你有两个或多个线程正在运行,那么这两个线程将共享单个地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程而不是每个线程存在。线程是一种操作系统对象,它表示在进程中代码的一条执行路径。在每一个win32的应用程序中都至少有一个线程,它通常被称为主线程或默认线程。在应用程序中也可以自由地创建别的线程去执行其他任务。线程技术使不同的代码可以同时运行。当然,只有在多cpu的计算机上,多个线程才能够真正地同时运行。在单个cpu上,由于操作系统把cpu的时间分成很短的片段分配给每个线程,这样给人的感觉好像是多个线程真的同时运行,他们只是“看起来”同时在运行。3.5.2 创建一个线程每个线程必须拥有一个进入点函数,线程从这个进入点开始运行。线程函数可以使8用任何合法的名字。可以给线程函数传递单个参数,参数的含义由你自己定义。线程函数必须由一个返回值,它将成为该线程的退出代码。线程函数应该尽可能的使用函数参数和局部变量。当createthread被调用时,系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。可以将线程内核对象视为由关于线程的统计信息组成的一个小型数据结构。系统从进程的地址空间中分配内存,供线程的堆栈使用。新线程运行的进程环境与创建线程的环境相同。因此,新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和在这个相同的进程中的所有其他线程的堆栈。这使得单个进程中的多个线程确实能够非常容易地互相通信。一旦内核对象创建完成,系统就分配用于线程的堆栈的内存。该内存是从进程的地址空间分配而来的,因为线程并不拥有它自己的地址空间。然后系统将两个值写入新线程的堆栈的上端(线程堆栈总是从内存的高地址向低地址建立)。3.5.3 线程的终止当线程终止运行时,会发生下列操作:l 线程拥有的所有用户对象均被释放。在windows中,大多数对象是由包含创建这些对象的线程的进程拥有的。但是一个线程拥有两个用户对象,即窗口和挂钩。当线程终止运行时,系统会自动撤消任何窗口,并且卸载线程创建的或安装的任何挂钩。其他对象只有在拥有线程的进程终止运行时才被撤消。l 线程的退出代码从still_active改为传递给exitthread或terminatethread的代码l 线程内核对象的状态变为已通知。l 如果线程是进程中最后一个活动线程,系统也将进程视为已经终止运行。l 线程内核对象的使用计数递减1。当一个线程终止运行时,在与它相关联的线程内核对象的所有未结束的引用关闭之前,该内核对象不会自动被释放。3.5.4 线程的调度每个线程是拥有一个上下文结构的,这个结构维护在线程的内核对象中。这个上下文结构反映了线程上次运行时该线程的cpu寄存器的状态。每隔20ms左右,windows要查看当前存在的所有线程内核对象。在这些对象中,只有某些对象被视为可以调度的对象。windows选择可调度的线程内核对象中的一个,将它加载到cpu的寄存器中,它的值是上次保存在线程的环境中的值。这项操作称为上下文转换。windows实际上保存了一个记录,它说明每个线程获得了多少个运行机会。1 windows被称为抢占式多线程操作系统,因为一个线程可以随时停止运行,随后另一个线程可进行调度。如你所见,可以对它进行一定程度的控制,但是不能太多。注意,无法保证线程总是能够运行,也不能保证线程能够得到整个进程,无法保证其他线程不被允许运行等等。 windows系统只调度可以调度的线程。这意味着该线程已经暂停运行,不应该给它安排任何cpu时间。在创建一个线程的时候,createthread函数接收的倒数第二个参数中赋值create_suspended就可以创建一个暂停的线程。除了暂停的线程外,其他许多线程也是不可调度的线程,因为它们正在等待某些事情的发生。3.6 文件的分块为便于各客户端下载文件,文件被分成大小相等(最后一块除州的若干块。每一块附上校验信息,对于一个大的文件来说,这是很有必要的,因为传输层的校验方法过于简单,漏检率较高。各客户端以块为单位下载文件,一块下载完成后对该块进行校验,并和校验信息进行比较,确认无误后才认为该块己被下载。文件分块算法描述如下:l 欲下载某一文件的用户首先获得提供该文件的服务器的地址(包括ip地址和端口号,该服务器一定得是公网上的一台计算机,即该服务器不位于任何nat和防火墙之后)。l 与该服务器通信。服务器将记录它所看到的该用户的ip地址和端口号。l 该用户向服务器请求获取1到2个文件块,服务器根据当前荷载情况决定是否让该用户下载文件块。若同意该用户下载文件块,服务器将优先选择还没有被其他用户下载的文件块。l 向服务器请求获取一定数量的其他用户的地址。服务器随机选择一定数量的其他用户的地址返回给该用户,优先选择时延小的地址。l 该用户与从服务器获得的其他用户的地址通信,若不能直接通信,将请求服务器辅助。l 用户之间互相交换他们己经下载的文件块的信息,若需要(某用户觉得自己的下载速度慢,且自己的网络带宽的利用率远远不够,需要获得更多的其他用户的地址)的话交换他们所拥有的其他用户的地址信息。l 用户之间互相下载文件块,直至文件的所有块被下载。优先下载稀有的文件块,即只被少数用户拥有的文件块。由于各用户下载文件时并不是像传统的文件下载那样从文件头开始,直到文件尾,而是按一定的算法顺序下载文件的各个块,因此需要将已经下载的文件块合理地存放起来,便于所有的文件块下载完成后恢复成原来的文件。该软件下载过程前先申请空间,8然后按下载的文件块的序号,写到相应的文件位置中。3.7 多线程文件传输与断点续传在本系统中,文件的传送是重要的功能之一,也是共享的基础。本文件传输系统跟一些重要的协议像http、ftp等一样,都支持文件的多线程文件传输和断点续传功能。其目的就是为了解决网络间的文件传送问题,而且以其稳定,高速,简单而一直保持着很大的生命力。用来接收文件的客户端的多线程文件传输是最重要,也最复杂,它负责线程的管理,进度的记录等工作。算法描述如下:先连接服务器,统计能有多少在线用户能提供某一文件的下载,然后根据文件长度和用户数量决定分几个线程下载,每一线程连接一个用户,接着发送文件下载请求,请求包括文件位置,名字,md5校验码,需要文件的开始位置和结束位置等。开始下载后,各个线程将下载到的文件块写入到本地磁盘中。断点续传的算法描述如下: 在实际网络的传输过程中,总会因为各种原因让文件的下载被终止,如果因为终止而使已经下载的资源被废弃,会造成大量的浪费,使用断点续传技术能很好地解决这一问题。断点续传的思想其实比较简单,在下载文件的同时生成一个临时文件,并记录文件的一些相关信息,一旦文件停止下载,临时文件保存上述信息,下次重新下载时先读取文件的相关信息当各个线程开始下载以后,并记录各个线程下载文件进程,每下载一定大小就记录一次,并把文件下载进度写到磁盘文件中,以防断电,直到下载结束。当要实现断点续传时,先校验本地文件的md5校验码,如果校验码与源文件校验码一致,则不需要使用续传。如果不一致,先查询本地的文件进度文件,根据进度文件记录的数值,向远程用户发送下载请求,文件的开始位置和结束位置为文件记录的数值。3.8 windows socket编程 windows sockets 规范定义并记录了如何使用api 与internet 协议族(ips,通常我们指的是tcp/ip)连接,尤其要指出的是所有的windows sockets 实现都支持流套接口和数据报套接口。 为了方便这种client/server模型的网络编程,90年代初,由microsoft联合了其它几家公司共同制定了一套windows下的网络编程接口,即windows sockets规范,它不是一种网络协议,而是一套开放的、支持多种协议的windows下的网络编程接口。现在的winsock已经基本上实现了与协议1无关,你可以使用winsock来调用多种协议的功能,但较常使用的是tcpip协议。socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有socket接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个socket接口来实现。1.在初始化阶段调用wsastartup()此函数在应用程序中初始化windows sockets dll ,只有此函数调用成功后,应用程序才可以再调用其它windows sockets dll中的api函数。在程序中调用该函数的形式如下:wsastartup(word)(181),(lpwsadata)&wsadata),其中(181)表示我们用的是winsocket1.1版本,wsaata用来存储系统传回的关于winsocket的资料。2.建立socket初始化winsock的动态连接库后,需要在服务器端建立一个监听的socket,为此可以调用socket()函数用来建立这个监听的socket,并定义此socket所使用的通信协议。此函数调用成功返回socket对象,失败则返回invalid_socket(调用wsagetlasterror()可得知原因,所有winsocket 的api函数都可以使用这个函数来获取失败的原因)。socket pascal far socket( int af, int type, int protocol ) 3.绑定端口接下来要为服务器端定义的这个监听的socket指定一个地址及端口(port),这样客户端才
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉字诵读课件
- 汉字易错字课件
- Unit 2 Home Sweet Home 单元测试 2025-2026学年人教版(2024)八年级英语上册
- 3S技术及其应用进展 知到智慧树答案
- 《红楼梦》赏析知到智慧树答案
- 金融科技在小微企业融资中的作用
- 汉字书法课件模板楷书面
- 2025汽车销售的中介合同样本
- DBJ41-T 137-2014 防渗墙质量无损检测技术规程
- 求诸己课件教学课件
- 教育家精神引领下职业院校师德师风建设研究
- 2024年“泰山杯”山东省网络安全职业技能竞赛理论试题库(含答案)
- 教师资格考试初中物理学科知识与教学能力2024年下半年试题及答案解析
- 工地受伤赔偿协议书
- NB-T10859-2021水电工程金属结构设备状态在线监测系统技术条件
- 呼吸系统疾病所致精神障碍
- 磁悬浮型与普通型离心冷水机组的性能及能耗比较
- 青光眼小梁切除手术
- 口腔种植一期手术
- 严重精神障碍社区随访经验
- 员工团队意识培训课件
评论
0/150
提交评论