收藏 分销(赏)

线多程网络-文件传输系统的设计与实现--本科毕业设计.doc

上传人:可**** 文档编号:2184899 上传时间:2024-05-22 格式:DOC 页数:43 大小:834KB
下载 相关 举报
线多程网络-文件传输系统的设计与实现--本科毕业设计.doc_第1页
第1页 / 共43页
线多程网络-文件传输系统的设计与实现--本科毕业设计.doc_第2页
第2页 / 共43页
线多程网络-文件传输系统的设计与实现--本科毕业设计.doc_第3页
第3页 / 共43页
线多程网络-文件传输系统的设计与实现--本科毕业设计.doc_第4页
第4页 / 共43页
线多程网络-文件传输系统的设计与实现--本科毕业设计.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

1、 毕业设计(论文)题目 多线程网络文件传 输系统的设计与实现 学生姓名 学号 专业 班级 指导教师 评阅教师 完成日期2013 年5月 15日 2学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。 作者签名: 年 月 日 学位论文版权使用授权书本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权省级优秀学士学位论文评选机

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 多线

3、程文件传输与断点续传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实现,套接字可以看成是两个网

4、络应用程序进行通信时,各自通信连接中的一个端点。系统分客户端软件和服务器端软件两部分,同时需要用到多线程相关知识,一个应用程序可以同时有多个线程一起运用CPU的资源,大大的加强对CPU的利用率,同时也从另一个方面加快了传输的速度。由于TCP/IP连接协议的服务是设计客户端/服务器应用程序时的主流标准,所以本软件主要采用TCP/IP协议的网络通信技术;客户端,服务器类是从CAsyncSocket类中继承来的,因此本软件通信完全是异步的;程序在 Windows XP系统、Visual C6.0下编译通过,且运行良好。关键词:文件传输 套接字 多线程 Abstract:File transfer i

5、s 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 comm

6、unication.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

7、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 th

8、e software is completely asynchronous communi- cation; procedures in Windows XP system and under Visual C + + 6.0 compiler,and Running well8Keywords:The file transfer The socket multithreading 前言 如今随着计算机应用的普及,已经有越来越多的人正在Internet(国际互联网)上畅游,许多人也已经将进入Internet作为下一个计算机升级的目标,而使用Internet进行文件传输,则是计算机联入Inter

9、net的一个重要功能之一。下面我们详细地谈一谈如何使用Internet的FTP功能进行文件传输。FTP中文意思为文件传输协议,用于管理计算机之间的文件传送。一般说来,我们联网的主要目的就是实现信息共享,而文件传输则是计算机间实现信息共享的一个非常重要的内容之一。在Internet上早期实现文件传输并不是一件很容易的事,因为Internet是一个非常复杂的计算机环境,有个人电脑、工作站、MAC、服务器、还有大型机等。据统计目前连接在Internet上的计算机已经有四千多万台,并且每年正在以20%的速度增长。而这些连接在网上的计算机也在各自运行着不同的操作系统,有运行Windows、Dos的个人电

10、脑,有运行MacOS的苹果机,也有运行unix的服务器等,而各种操作系统的文件结构也各不相同。要解决这种异种机、异种操作系统之间的文件传输交流问题,需要建立一个统一的文件传输协议,这就是FTP。基于不同的计算机操作系统,就有不同的FTP应用程序,而所有的这些应用程序都遵守同一种协议,这样我们就可以把自己的文件传送给别人,或者从其他的计算机用户中获得文件。因此文件传输通常就是指计算机利用Internet进行文件传输的服务。FTP允许您从数以千计的远程主机上把文件传输到您的主机上,您可以传输计算机程序、图像、声音、电影或其它任何文件。 FTP用于Internet上的控制文件的双向传输。在实现的层面

11、上,FTP又可理解为一个可用于文件传输的客户机/服务器系统(C/S架构),该系统包括客户机端程序和服务器端程序,客户端和服务器端通信规则为FTP协议。用户通过客户机程序向服务器程序发出命令请求,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序接收到这个文件,将其存放在用户目录中。在通信协议的分层模型中,文件传输协议是在TCP(Transmission control Protocol,传输控制协议)之上的一个应用层协议,应用程序之间的通信需要用到传输层提供

12、的字节流透明无误传输服务。Windows操作系统具有TCP/IP协议栈,应用程序可通过Winsock API函数的调用实现端到端透明数据链接的建立。 网络应用程序是一种在不同系统的新进程间通过网络通信协议进行的进程间的通8信问题。在网络中为了标识通信的进程,首先要标识网络中进程所在的主机,其次要标识主机用IP地址来标识不同的主机,主机上不同的进程要用使用端口号来标识。 其次,在Windows中编程是通过套接字SOCKET来编程的,套接字可以看成是两个网络应用程序进行的通信时,各自通信连接种的一个端点。通信时,其中的一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket

13、通过网络接口卡NIC的传输介质将这段信息发送到另一台主机的Socket种,使这段信息能穿传送到其他程序中。要通过Internet进行通信,至少需要一对套接字,其中一个运行在客户端,称之为ClientSocket,另一个运行于服务器端面,称为ServerSocket。根据连接启动的方式以及本地要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听、客户端请求、连接确认。服务器监听是指服务端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求是由客户端的套接字提出连接请求,要连接的目标是服务器端套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接

14、字,指出服务器套接字的地址和端口号,然后再向服务器端套接字提出连接请求。 连接确认是当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的信息发送给客户端,一旦客户端确认了此连接,连接即可建立。而服务器端继续处于监听状态,继续接收其他客户端的连接请求。 网络传输文件的时候还需要用到多线程和线程间访问互斥文件的问题。创建线程后,一个应用程序可以同时有多个线程一起运用CPU的资源,大大的加强对CPU的利用率。同时也从另一个方面加快了传输的速度。但是要遇到一个问题就是各个线程对文件的共享问题。所以建立好的信号量来实现他们之间的访问

15、规则是很重要的。否则,传输的文件将会出现很多问题。81 绪论 这一部分主要介绍多线程文件传输的相关背景和研究的意义,大致概括了国内外研究的现状,最后说明了本系统需要研究的主要内容。1.1 研究背景及意义1.1.1 研究背景 目前,国内外企业对局域网的文件传输系统认识和使用情况并不好,各个企业单位在局域网内实现文件传输,资源共享还有很大的缺陷。技术无论是从理论上或实践上都还不够完善。文件传输系统由于比较复杂,可变因素较多,安全性低,因此发展还不成熟。 但是随着科学技术的发展,各种以局域网为单位的文件传输系统已经进入稳健发展期,比如说市面上比较普遍使用的QQ、UC、飞鸽传书等以内部网络为中心的资源

16、共享系统也即将进入高速发展期。在国内,随着企业资源管理的规范化和规模的不断扩大,企业的计算机资源管理将不仅仅停留在依靠硬件或者Internet网络获取,而且将会向着安全的内部网络化资源管理方式迈进。1.1.2 研究意义1.学会采用多线程提高传输速度 文件传输是因特网上最常用的服务之一,多线程文件传输能有效地提高文件传输的速度和效率。2.学会利用windows socket进行高性能开发 本系统采用windows socket实现,windows socket是因特网上进行通信程序设计的常用方法,是开发高性能网络程序的基础,采用socket方法可以编写出满足各种应用需要的网络程序,具有很强的适应

17、性。3.掌握网络底层开发技术本课题通过对网络文件传输系统的开发,使我掌握socket编程技巧,熟悉网络底层软件开发方法。1.2 国内外研究现状 目前,国内外企事业单位对文件传输系统的认识和使用情况并不好,各企事业单位大多在局域网内实现文件传输,资源共享方面还存在较多缺陷,对相关技术的理论研究也不够深入。由于文件传输系统的复杂性、多变性、安全性低等特点,使得其发展还不8够成熟。随着科学技术的发展,各种以局域网或是广域网为基础的文件传输系统已经进入稳健发展时期。而计算机网络通信技术已趋于成熟,促使应用于文件传输的软件种类不断增多。由于网络编程技术的发展,人们使用的文件传输软件也表现出更多的高性能、

18、易操作、稳定好等特点,但是开发者在注重下载功能实现的同时,往往忽略了用户上传文件的需要。 在国外,用户使用的传输软件主要有网络蚂蚁(NetAnt)和网际快车(FlashGet)。这些软件大都是针对用户下载来设计的,能够实现功能完善的下载服务。在国内,用户使用的文件传输软件主要是迅雷和飞鸽传书。迅雷主要针对的是文件快速下载的实现,而飞鸽传书则主要应用于局域网中的文件共享。目前常用的文件传输软件往往功能比较单一,也缺乏良好的用户使用界面和方便快捷的服务。许多软件在断点续传、多线程传输、进度显示以及文件的动态压缩等方面还存有欠缺。 随着企事业单位资源管理的规范化和规模的不断扩大,计算机的资源管理以及

19、办公文档的发布和传递将不仅仅停留在依靠硬件或者电子邮件的获取上,而是会向着更全面、更可靠、更快捷的方向发展。过去,企事业单位往往将文件传输系统与OA系统结合在一起并将其作为OA系统的一个模块来处理。对于文档传输模块的设计,通常都是为办公文档管理而设计,并不能考虑到一些特殊文档的管理情况,例如多个文档同时传输的高效存储访问的问题等。综上所述,目前的文件传输系统在文件多线程传输的实现上还不是很完善,虽然可供用户选择的文件传输软件种类繁多,但仍然存在质量良莠不齐、功能各有异同的问题,用户在使用的时候也总会遇到诸多的不便,需要对一些技术做进一步的改进和提高,对于那些经常需要同时传输多个文件的特殊行业和

20、生产领域,更加需要有针对性的进行改善。1.3 本文研究内容1.软件设计原理本软件是在Windows操作系统下,Visual C+ 6.0环境下借用WinSock控件实现的,是基于TCP/IP协议的C/S模式,在服务器端和客户端分别以socket为中心进行编程,客户端和服务器端的界面分别是由文件发送模块和文件接收模块组成。客户端先调用connect()与服务器建立连接,然后用send()发送数据;服务器端先调用listen()侦听客户端的连接请求,然后调用accept()对连接请求进行响应,如果需要接收数据,则会调用receive()接收。 82.软件设计思路 我设计实现的多线程文件传输系统主要

21、包括两个大的部分:服务器端和客户端。其中服务器端开启服务,监听客户端的连接,然后如果有客户端开启,建立了连接以后,就可以由服务器端选择文件来进行发送传输。在服务器端,因为是多线程传输,会有文件的分割,所以文件传输的时候可以选择较大的文件进行传输,客户端同时也是和服务器端一样用多线程进行连接和接收,同时客户端可以开启多个,并同时接收服务器传输的文件。3.软件主要功能本文件传输系统主要实现了服务器端和客户端的文件传输,并且采用多线程技术,有效地提高了文件传输的效率。软件研究了Windows多线程编程技术,使用流式套接字来完成服务器端与客户端连接。根据客户端对服务器端访问的特点,在服务器端采用异步方

22、式监听客户端的连接请求,避免客户端长时间等待服务器端的回应出现卡死现象,更好的完成客户的文件传输需求,充分利用服务器端的系统资源。2 需求分析 这一部分主要对多线程文件传输系统需要实现的基本功能进行描述以及介绍了服务器和客户端进行通信的基本原理。2.1 功能模块描述 我设计实现的文件传输系统主要包括两个大的部分:服务器端和客户端。即传统的C/S模式,其中服务器端开启服务,监听客户端的连接,然后如果有客户端开启,建立了连接以后,就可以由服务器端选择文件来进行发送传输,首先是添加文件到服务器端,客户端接收文件时,点击接收是首先获取的是相关文件的地址信息,然后你双击保存文件到相关文件夹,这时候服务器

23、就会调用相关线程进行传送。 服务器只能开启一个,并向客户端传送文件,客户端可以开启多个,并且可以同时接收服务器的文件,传送文件时,服务器可以实现对文件的分割,所以可以传送较大的文件。系统不仅可以在同一台PC机上传输,同时可以在局域网内传输,体现了网络传输8的功能。2.2 软件需要实现的功能 这里就分别介绍了服务器和客户端需要完成的功能,其中由于文件只能从服务器发送到客户端,而不能从客户端发送到服务器,所以在文件传输时服务器只能发送文件而客户端只能接收文件。2.2.1 服务器端的应用程序将完成如下功能监听客户端的连接请求为请求连接的客户端建立SOCKET队列向客户端发送消息从客户端接收消息向客户

24、端发送文件2.2.2 客户端的通信程序将完成如下功能建立与服务器的连接关闭与服务器的连接向服务器发送消息从服务器接收消息从服务器接收文件2.3 通信原理及过程大多数通过网络进行通信的应用程序,不论是通过因特网还是小型的办公网络,它们都使用同样的原则和功能来执行通信。计算机上的一个应用程序正在等待另一个程序打开通信连接,可以说这前一个应用程序正在“侦听”该连接请求,这很像你在等待某人给你打电话时,一直在留心电话铃声。与时同时,另一个应用程序,一般是运行在另一台计算机上(当然也可以是同一台机器上),试图同第一个应用程序连接。这种试图找开连接的方式就类似于向某人打电话。你拨了电话号码,并希望要找的那

25、个人正在电话线的另一头等接电话。当然,要完成电话的呼叫,必须知道被呼叫方的电话号码。同样的道理,试图连接到第一个应用程序的这个程序也必须知道第一个应用程序的网络位置或网络地址。一旦两个应用程序建立了连接,它们之间就可以互相发送和接收消息 。正像两个人打电话交谈一样,这个连接是一个双向的通道,即双方都可以发送消息。最后,如果一方或双方完成了对话,连接即关闭,就像打完电话一样,你能够知道电话中的对方是否把电话给挂断了,或者双方由于其它原因连接不上了。一旦该应用程序同一8个应用程序之间建立了连接,就能够在它的对话框里键入要发送的文本消息,并把它们发送给另一个应用程序。消息被发送之后,就被加到已发送消

26、息的列表中。接收到的每一条消息都被复制到所有已收到的消息列表中。这样就能看到完整的已发送和已接收到的消息列表,还可以对发送消息的应用程序和接收消息的应用程序进行比较。3 主要实现技术 这一部分主要介绍实现本系统相关功能需要用到的核心技术,并对相关技术进行了具体的介绍。3.1 关键要点分析 文件传输的本质用一句话概括就是:发送方将文件数据读出来,然后调用套接字的发送函数将数据传输到接收方,接收方调用套接字接收函数接收数据,然后重新建立文件并将数据写入文件。 TCP协议提供的是可靠的、面向连接的传输控制协议,即在传输数据前要先建立逻辑连接,然后再传输数据,最后释放连接3个过程。TCP提供端到端通信

27、;采用字节流方式,如果字节流太长,将其分段;提供紧急数据传送功能。 多线程可以同步完成多项任务,不是为了提高运行效率,而是为了通过提高资源使用效率来提高系统的效率。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行,也可以把它理解为代码运行的上下文。线程负责在单个程序里执行多任务,通常由操作系统负责多个线程的调度和执行。WINSOCK 是在Windows进行网络通信编程的API接口,也是Windws网络编程的事实标准。在网络编程中最常用的方案便是客户机/服务器模型。Windows Sockets 规范定义并记录了如何使用API 与Internet 协议族(IPS,通常我们指的是T

28、CP/IP)连接,尤其要指出的是所有的Windows Sockets 实现都支持流套接口和数据报套接口。3.2 数据传输协议以及选择TCP作为本系统的传输协议1.TCP协议TCP协议提供的是可靠的、面向连接的传输控制协议,即在传输数据前要先建立逻辑连接,然后再传输数据,最后释放连接3个过程。TCP提供端到端、全双工通信;采用字节流方式,如果字节流太长,将其分段;提供紧急数据传送功能。TCP协议被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机连接时,TCP协议会让它们建立一个连接、8发送和接收数据以及终止连接。TCP协议利用重发技术和拥塞控制

29、机制,向应用程序提供可靠的通信连接,使它能够自动适应网上的各种变化。即使在Internet暂时出现堵塞的情况下,TCP也能够保证通信的可靠。2.UDP协议用户数据报协议(UDP)如下图所示,它为高层应用提供了IP的无连接特性分组传输通路,在不同计算机之间实现一条数据流。如果检测到错误,分组将被丢弃,且不会执行进一步的动作。UDP被称为“无连接”的,因为它不需要握手,在发生差错时也不需要重传数据。基本上,UDP在IP上增加了端口寻址功能。报头包括源端口和目的端口、长度字段(包括报头和数据的长度)和校验和,UDP中的校验和字段是可选的。UDP虽然不如TCP可靠,却可以在网络上快速地发送大量的数据,

30、因而可以用于广播。它允许应用在任何时刻向任何地址发送报文。因此,它通常用于多媒体应用,如实时的视频会议,流式音频和视频以及因特网电话。所用这些应用可以容忍小部分的分组丢失,但UDP没有任何的拥堵控制措施。分组在路由器上可能会发生溢出,从而带来严重的问题,但是,差错校验和序列编号等功能也可以加入到选用UDP的应用中去。现在,很多流应用运行在UDP之上,但是它们内建了应答和重传以减少分组的丢失。不是所用的TCP通信量始终都能通过所有的防火墙,UDP经常用作视频和音频流(例如RealAudio)的传输方式。 位: 0 15 318个八位位组 源端口 目的端口 长度 校验和83.选择TCP作为文件传输

31、协议 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务。 TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。 在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。 TCP通过下列方式来提供可靠性: 1应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。由TCP传递给IP的信息单位称为报文段或段(segment)TCP

32、如何确定报文段的长度。 2当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒 3TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。4 既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正

33、确的顺序交给应用层。5TCP还能提供流量控制,TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。两个应用程序通过TCP连接交换8bit字节构成的字节流。TCP不在字节流中插入记录标识符。我们将这称为字节流服务(bytestreamservice)。如果一方的应用程序先传10字节,又传20字节,再传50字节,连接的另一方将无法了解发方每次发送了多少字节。收方可以分4次接收这80个字节,每次接收20字节。一端将字节流放到TCP连接上,同样的字节流将出现在TCP连接的另一端。3.2.1 TCP建立连接的过程8

34、 3.2.2 TCP的服务特点1. 面向连接的传输2. 端到端的通信3. 高可靠性,确保传输数据的正确性,不出现丢失或乱序;4. 全双工方式传输5. 采用字节流方式,即以字节为单位传输字节序列;6. 紧急数据传送功能3.2.3 TCP的重传策略TCP协议用于控制数据段是否需要重传的依据是设立重发定时器。在发送一个数据段的同时启动一个重发定时器,如果在定时器超时前收到确认就关闭该定时器,如果定时器超时前没有收到确认,则重传该数据段。在选择重发时间的过程中,TCP必须具有自适应性。它需要根据互联网当时的通信情况,给出合适的数据重发。 这种重传策略的关键是对定时器初值的设定。目前采用较多的算法是Ja

35、cobson于1988年提出的一种不断调整超时时间间隔的动态算法。其工作原理是:对每条连接TCP都保持一个变量RTT(Round Trip Time),用于存放当前到目的端往返所需要时间最接近的估计值。当发送一个数据段时,同时启动连接的定时器,如果在定时器超时前确认到达,则记录所需要的时间(M),并修正RTT的值,如果定时器超时前没有收到确认,则将RTT的值增加1倍。通过测量一系列的RTT(往返时间)值,TCP协议可以估算数据包重发前需要等待的时间。在估计该连接所需的当前延迟时通常利用一些统计学的原理和算法(如Karn算法),从而得到TCP重发之前需要等待的时间值。83.3 C/S构架C/S(

36、Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。 3.3.1 客户端(Client)客户端(Cli

37、ent)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序。一般安装在普通的客户机上,需要与服务端互相配合运行。因特网发展以后,较常用的用户端包括了如万维网使用的网页浏览器,收寄电子邮件时的电子邮件客户端,以及即时通讯的客户端软件等。3.3.2 服务器(Server)服务器指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。相对于普通PC来说,服务器在稳定性、安全性、性能等方面都要求更高,因此CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。3.4 多线程编程 由于用到对话框,所以单线

38、程的操作会严重影响程序功能的实现,所以采用多线程操作,使得在打开一个对话框时,不会影响到另一个对话框的功能,在MFC程序中创建一个线程,调用AfxBeginThread函数:CWinThread AfxBeginThread(AFX_THREADPROC pfnThreadProc, 控制函数LPVOID pParam, 传递给控制函数的参数int nPriority = THREAD_PRIORITY_NORMAL, 线程的优先级UINT nStackSize = 0, 线程的堆栈大小DWORD dwCreateFlags = 0, 线程的创建标志LPSECURITY_ATTRIBUTES

39、lpSecurityAttrs = NULL 线程的安全属性);8结束进程:进程只是提供了一段地址空间和内核对象,其运行是通过在其地址空间内的主线程来体现的。当主线程的进入点函数返回时,进程也就随之结束。这种进程的终止方式是进程的正常退出,进程中的所有线程资源都能够得到正确的清除。除了这种进程的正常退出方式外,有时还需要在程序中通过代码来强制结束本进程或其它进程的运行。Exit- Process()函数即可在进程中的某个线程中使用,并将立即终止本进程的运行。 该函数具有强制性,在执行完毕后进程即已经被结束,因此位于其后的任何代码将不能被执行。虽然ExitProcess()函数可以在结束进程的同

40、时通知与其相关联的动态链接库,但是由于它的这种执行的强制性,使得ExitProcess()函数在使用上将存在安全隐患。3.5 多线程技术3.5.1 线程的组成线程有两部分组成。 1一个是线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。 2另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量。 进程从来不执行任何东西,它只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。这意味着线程在它的进程地址空间中执行代码,并且在进程的地址空间中对数据进行操作。因此,如果在单进程环境中,你有两个或多个线程正在运行,那么

41、这两个线程将共享单个地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程而不是每个线程存在。线程是一种操作系统对象,它表示在进程中代码的一条执行路径。在每一个Win32的应用程序中都至少有一个线程,它通常被称为主线程或默认线程。在应用程序中也可以自由地创建别的线程去执行其他任务。线程技术使不同的代码可以同时运行。当然,只有在多CPU的计算机上,多个线程才能够真正地同时运行。在单个CPU上,由于操作系统把CPU的时间分成很短的片段分配给每个线程,这样给人的感觉好像是多个线程真的同时运行,他们只是“看起来”同时在运行。3.5.2 创建一

42、个线程每个线程必须拥有一个进入点函数,线程从这个进入点开始运行。线程函数可以使8用任何合法的名字。可以给线程函数传递单个参数,参数的含义由你自己定义。线程函数必须由一个返回值,它将成为该线程的退出代码。线程函数应该尽可能的使用函数参数和局部变量。当CreateThread被调用时,系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。可以将线程内核对象视为由关于线程的统计信息组成的一个小型数据结构。系统从进程的地址空间中分配内存,供线程的堆栈使用。新线程运行的进程环境与创建线程的环境相同。因此,新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和

43、在这个相同的进程中的所有其他线程的堆栈。这使得单个进程中的多个线程确实能够非常容易地互相通信。一旦内核对象创建完成,系统就分配用于线程的堆栈的内存。该内存是从进程的地址空间分配而来的,因为线程并不拥有它自己的地址空间。然后系统将两个值写入新线程的堆栈的上端(线程堆栈总是从内存的高地址向低地址建立)。3.5.3 线程的终止当线程终止运行时,会发生下列操作:l 线程拥有的所有用户对象均被释放。在Windows中,大多数对象是由包含创建这些对象的线程的进程拥有的。但是一个线程拥有两个用户对象,即窗口和挂钩。当线程终止运行时,系统会自动撤消任何窗口,并且卸载线程创建的或安装的任何挂钩。其他对象只有在拥有线程的进程终止运行时才被撤消。l 线程的退出代码从STILL

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服