(计算机应用技术专业论文)批量数据定时上传系统及其稳定性的研究与实现.pdf_第1页
(计算机应用技术专业论文)批量数据定时上传系统及其稳定性的研究与实现.pdf_第2页
(计算机应用技术专业论文)批量数据定时上传系统及其稳定性的研究与实现.pdf_第3页
(计算机应用技术专业论文)批量数据定时上传系统及其稳定性的研究与实现.pdf_第4页
(计算机应用技术专业论文)批量数据定时上传系统及其稳定性的研究与实现.pdf_第5页
已阅读5页,还剩60页未读 继续免费阅读

(计算机应用技术专业论文)批量数据定时上传系统及其稳定性的研究与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西安建筑科技大学硕士学位论文 批量数据定时上传系统及其稳定性的研究与实现 专业:计算机应用技术 研究生:曹群 指导教师:赵文静教授 摘要 论文主要研究了批量数据定时上传系统及其稳定性的设计与实现。该系统主 要用于定时将性能测量数据转换为结果文件并上传这些结果文件。该系统包含两 个进程:系统的功能部分由s t f i | e 进程完成,系统的稳定性由s w d 服务进程来保 证。 论文首先深入研究了系统实现的关键技术,接着分析了系统的功能并进行相 应的模块划分。论文还详细描述了功能系统s t f i l e 的设计与实现。采用多线程技术 设计实现了该进程,在其中将采集测量数据与上传结果文件的功能分别用不同的 线程来完成从而来提高系统的性能,并且在其中对结果数据保存到e x c e l 文件中的 三种方法进行了探讨。 最后论文结合实际需求给出了系统可靠性和稳定性的设计与实现。功能系统 s t f i l e 运行的关键信息保存在日志文件中,功能系统s t f i l e 的运行状况由s w d 服 务进程来监控。 该系统已研发成功并已经在移动交换系统上运行,效果良好,得到了用户的 肯定。 关键词:f t p , a d o ,w i n d o w s 服务,多线程,定时器 西安建筑科技大学硕士学位论文 s t u d ya n di m p l e m e n t a t i o no f t h es y s t e mo f t i m i n g u p l o a d i n g b u l kd a t aa n di t ss t a b i l i t y s p e c i a l i t y :c o m p u t e ra p p l i c a t i o nt e c h n o l o g y n a m e : c a oq u n i n s t u r c t o r :z h a ow e n j i n g a b s t r a c t t h i sp a p e rs t u d i e st h ed e s i g na n dt h ei m p l e m e n t a t i o no ft h es y s t e mo ft i m i n g u p l o a d i n gb u l kd a t aa n d i t ss t a b i l i t y , t h es y s t e mw i ut i m i n gc o n v e r tt h ed a t af r o ms t a t s d m a b a s ei n t or e s u l tf i l e sa n dt i m i n gu p l o a dt h e s er e s u l tf i l e s t h es y s t e mh a st w o p r o c e s s :o n ei sn a m e ds t f i l e e x e ,t h eo t h e ri sn a m e ds w d e x e t h ep r o c e s sn a m e d s t f i l e e x ew i l lb ei m p l e m e n t e da sm a i nb o a yo ft h es y s t e ma n dt h eo t h e rp r o c e s sw i l l w a t c h t h er u t 2o f i t t h i sp a p e rs t u d i e sc m c i a lt e c h n o l o g i e so fi m p l e m e n t i n gt h es y s t e ma tf i r s t t h e n t h i sp a p e ra n a l y s e st h ef u n c t i o nr e q u i r e m e n t sa n dd e s i g n st h em o d e l so ft h es y s t e m t h i sp a p e rd e t a i l e d l yd e s c r i b e st h ed e s i g na n di m p l e m e n t a t i o no fs t f i l e e x e i ta d o p t s m u l t i t h r e a d i n gt e c h n o l o g yt oi m p l e m e n ts t f i l e e x e t w ot h r e a d sw i l la c q u i r er e s u l td a t a a n du p l o a dr e s u l td a t af i l e sr e s p e c t i v e l ys oa st oe n h a n c et h ep e r f o r m a n c eo f t h es y s t e m a n di td i s c u s s e st h r e em e t h o d so f t r a n s f e r i n gr e s u l td a t at oe x c df i l e s a tl a s tt h i sp a p e rg i v e st h ed e s i g na n di m p l e m e n t a t i o no ft h er e l i a b i l i t ya n dt h e s t a b i l i t yo ft h es y s t e ma c c o r d i n gt op r a c t i c a lr e q u i r e m e n t s c r u c i a li n f o r m a t i o n p r o d u c e db yt h er u no fs t f i l e e x ei ss a v e di n t ol o gf i l e sa n dt h er u no fs t f i l e e x ei s w a t c h e db ys w d e x e t h es y s t e mh a sb e e nd e v e l o p e ds u c c e s s f u l l y , r u nw e l lo nt h em o b i l es w i t c hs y s t e m a n da c c e p t e db yi t sc o i l s u r l l e r s k e yw o r d s :f t p , a d o ,w i n d o w ss e r v i c e s , m u l t i t h r e a d i n g , t i m e r i i 声明 本人郑重声明我所呈交的论文是我个人在导师指导下进行的研究工 作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外, 论文中不包含其他人已经发表或撰写过的研究成果,也不包含本人或其他 人在其它单位已申请学位或为其它用途使用过的成果。与我一同工作的同 志对本研究所做的所有贡献均已在论文中作了明确的说明并表示了致谢。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 论文作者签名: 畅 关于论文使用授权的说明 日期:沙夕,舅 本人完全了解西安建筑科技大学有关保留、使用学位论文的规定,即: 学校有权保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布 论文的全部或部分内容,可以采用影印、缩印或者其它复制- - t - 段保存论文。 ( 保密的论文在论文解密后应遵守此规定) 黼:畸新虢趟吼础炙。 注:请将此页附在论文首页。 西安建筑科技大学硕士学位论文 1 1 课题背景 第一章绪论 为保证移动交换网络可靠稳定的运行,先前移动交换中心会对各种网络性能 指标进行测量和统计,并将这些原始的性能指标测量数据保存在移动交换中心后 台管理服务器的性能数据库中。移动交换中心的管理人员可以通过后台管理服务 器上或后台客户端上的性能结果客户端查询系统来了解移动交换系统的运行状 况,即性能状况。这种利用性能客户端来查询移动交换系统运行状况的方式存在 很大的缺陷: 1 在某时刻只能查询一个性能测量任务的某个时间段的结果,很难全面了解 性能测量任务的整体情况。 2 在查询的性能结果数据量很大的时候,客户端在显示性能测量结果时的速 度非常慢。 3 不能保存性能测量结果,每次查询时要对原始性能测量数据进行大量的计 算。 4 只能查看某个移动交换中心的性能测量结果,不能同时了解多个移动交换 中心的运行状况。 为了避免性能客户端所造成的缺陷,现需要研究并设计一个系统来达到可以 快速地全面地了解某个测量性能任务的测量结果,并达到可以同时了解多个移动 交换中心的运行性能的目的。该系统需要两个分开的系统来完成,一个系统完成 将某个移动交换中心的所有性能测量结果数据上传到指定的服务器上,一个系统 完成在指定的服务器上将多个移动交换中心上传的数据进行合并和显示。本文所 研究实现的批量数据定时上传系统将完成前一个系统功能。 1 2 课题概述 本课题是某移动通信设备公司一个计划开发的项目,主要研究并实现批量数 据定时上传系统及其稳定性。 本课题中的批量数据定时上传系统完成定时采集结果数据和定时上传结果 文件功能。采集结果数据部分将定时地从移动交换管理中心性能数据库中获取性 能测量指标的原始数据,然后通过分析和计算所获得的原始数据得到性能测量 指标的结果数据,并将结果数据保存到文件中。上传结果文件部分将定时地把结 西安建筑科技大学硕士学位论文 果文件上传到指定的服务器中。 研究并实现的批量数据定时上传系统将要实际地运行在移动交换中心后台 管理服务器中,所以系统需要有较高的可靠性和稳定性,因此对如何为该系统提 供所需要的可靠性和稳定性进行了研究和实现。 本课题为研究并实现符合移动交换系统实际需要的批量数据定时上传系统, 具体作了如下工作: 深入研究了实现本课题研究的系统所需要的关键技术,其中包括v c 中的a d o 数据库访问技术、f t p 客户端实现技术、多线程开发技术,w i n d o w s 服务程序实 现技术和定时实现技术等等。 分析了批量数据定时上传系统的功能,划分系统功能模块,对系统进行了总 体设计。 利用多线程技术开发了系统功能进程( s 但i l e e x e ) 。用a d o 技术实现了采集 结果数据功能部分,用w i n l n e t 技术实现了上传结果文件功能部分,并且对将结 果数据保存到e x c e l 文件中的三种方法进行了探讨。 利用w i n d o w s 服务编程技术开发了监控功能进程s t f i l e e x 运行的监控系统 s w d e x e 。 另外本课题使用如下的开发环境: 操作系统是基于w i n d o w s2 0 0 0 的,i e 版本为5 5 及以上,开发语言采用 v i s u a lc + + 6 o 。 1 3 论文组织 本人作为批量数据定时上传系统的独立开发者,承担了该系统设计和开发的 全部工作,并且对相关的技术进行了研究,在这些研究的基础之上,很好地实现 了该系统。 本文对研究和设计工作加以总结,论述了开发该系统所使用的关键编程技术, 功能需求分析和模块划分,系统主体功能和系统稳定性的设计与实现。 本论文组织结构安排如下: 第一章介绍了课题研发的技术背景、课题的意义以及论文结构。 第二章详细介绍了在系统实现中所用到的关键编程技术,主要包括a d o 数据 库访问技术,f t p 协议以及使用w i n i n e t 实现f t p 客户端,多线程技术,w i n d o w s 服务程序的实现技术和定时实现技术。 第三章分析了系统的功能并对功能进行了模块划分。 第四章详细描述了系统功能进程s t f i l e e x e 的设计与实现。该进程由主线程和 两个工作线程组成。其中主线程负责启动其他两个线程和处理系统界面;采集结 西安建筑科技大学硕士学位论文 果数据线程负责从数据库中读取测量性能指标的原始数据,然后分析并计算获得 结果数据,并将结果数据以一定的格式保存到文件中:上传结果文件线程负责将 结果文件上传到f t p 服务器上。 第五章给出了系统可靠性和稳定性的设计与实现。主要叙述了监控进程 s w d e x e 和日志的处理。监控进程s w d e x e 负责启动和监控系统功能进程 s t f i l e e x e 的运行;日志负责记录系统功能进程运行时产生的关键信息。 最后对本论文的主要研究工作进行了总结,并提出了本论文所研究设计的系 统有待进一步完善的地方。 3 西安建筑科技大学硕士学位论文 第二章课题关键编程技术介绍 这一章将介绍在实现本课题研究的系统所需要的关键编程技术,主要包括 a d o 数据库访问技术,f t p 协议以及使用w i n l n e t 实现f t p 客户端,多线程技术, w i n d o w s 服务程序的实现技术和定时实现技术。 2 1 a d o 编程技术 2 1 1 数据库访问技术概述 v c 提供了多种多样的数据库访问技术:o d b c a p i 、m f co d b c 、d a o 、o l e d b 、a d o 等,下面将简单介绍这些数据库访问技术【8 】。 1 o d b c a p i ( 开放的数据库连接) 开放的数据库连接提供了一个通用的编程接口,它为不同的数据库系统( 如 o r a c l e 、s q ls e r v e r 等) 提供驱动程序,从而允许程序与多种不同的数据库进行连 接。用户可以使用s q l 语句对数据库进行直接的底层功能操作。 o d b c a p i 的特点是功能强大,提供异步操作、事务处理等高级功能。o d b c 提供了一套统一的a p i ,使应用程序可以应用所提供的a p i 来访问任何提供了 o d b c 驱动程序的数据库。而且o d b c 已经成为一种标准,目前所有的关系数据 库都提供了o d b c 驱动程序,这使o d b c 的应用非常广泛。 o d b c 是一种底层的访问技术,因此o d b ca p i 可以使客户应用程序从底层 设置和控制数据库,从而完成一些高层数据库技术无法完成的功能。但由于o d b c 只能用于访问关系数据库,使得利用o d b c 很难访问对象数据库及其他非关系数 据库。 2 m f c o d b c 直接使用o d b ca p i 编写数据库应用程序需要编制大量代码,在m f c 中提供 了相应的o d b c 类来封装o d b ca p i ,这使得利用m f c 来创建o d b c 的应用程 序变得非常简便。主要的m f co d b c 类有c d a t a b a s e 、c r e c o r d s e t 、c r e c o r d v i e w 、 c d b e x c e p t i o n 。 m f co d b c 类由于它功能丰富,操作相对简便而在实际开发应用最广。 3 m f c d a o ( 数据访问对象) d a o 提供了一种通过程序代码创建和操纵数据库的机制。多个d a o 构成一 个体系结构,在这个结构中,各个d a o 对象协同工作。m f c d a o 是微软提供的 用于访问m i c r o s o f tj e t 数据库文件( 十m d b ) 的强有力的数据库开发工具。主要的 4 西安建筑科技大学硕士学位论文 m f cd a o 类有c d a o d a t a b a s e 、c d a o r e c o r d s e t 、c d a o r e c o r d v i e w 、c d a o e x c e p t i o n 、 c d a o t a b l e d e f , c d a o q u e r y d e f c d a o f i e l d e x c h a n g e 等。 m f cd a o 仅用来支持a c c e s s 数据库,应用范围相对较窄。 4 o l e d b o l ed b 是基于c o m 接口的数据库开发技术。o l ed b 为任何数据源提供了 高性能的统一的访问接口,这些数据源包括关系和非关系数据库、电子邮件和文 件系统、文本和图形、自定义业务对象等等。也就是说,o l ed b 并不局限于i s a m , j e t 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方 法。在实际应用中,这种多样性意味着可以访问驻留在e x c e l 电子数据表、文本文 件、电子邮件目录服务甚至邮件服务器,诸如m i c r o s o f t e x c h a n g e 中的数据。 直接使用o l ed b 来设计数据库应用程序需要大量的代码,在v c 中提供了 a t l 模板用于设计o l ed b 数据应用程序和数据提供程序。 5 a d o a d o ( a c f i v e xd a t ao b j e c t ) 是目前在w i n d o w s 环境中比较流行的客户端数据 库编程技术。a d o 是建立在o l ed b 底层技术之上的高级编程接口,因而它兼具 有强大的数据处理功能( 处理各种不同类型的数据源、分布式的数据处理等等) 和极 其简单、易用的编程接口,因而得到了广泛的应用。 按微软公司的意图,o l e d b 和a d o 将逐步取代o d b c 和d a o 。 2 1 2 在v c 中使用a d o a d o 实际上就是由一组自动化对象构成的组件,因此可以像使用其它任何自 动化对象一样使用a d o a d o 中最重要的对象有三个:c o n n e c t i o n ,c o m m a n d 和 r e c o r d s e t ,它们分别表示连接对象、命令对象和记录集对象。 a d o 数据库开发的基本流程如下所示: 1 ) 引入a d o 库定义文件,初始化c o m 库。 2 ) 用c o n n e c t i o n 对象连接数据库。 3 ) 利用建立好的连接,通过c o n n e c t i o n ,c o m m a n d 对象执行s q l 命令,或利 用r e c o r d s e t 对象取得结果记录集进行查询、处理。 4 ) 使用完毕后关闭连接释放对象。 下面简单介绍a d o 的基本操作。 1 引入a d o 库文件和初始化c o m 库 使用a d o 前必须在工程的s t d a f x h 头文件里用直接引入符号# i m p o r t 引入 a d o 库文件,以使编译器能正确编译。代码如下所示: # i m p o r t ”c :p r o g r a mf i l e s c o m m o nf i l e s s y s t e m a d o k m s a d 0 1 5 d 1 1 ” 5 西安建筑科技大学硕士学位论文 n o _ n a m e 印a c er e n a m e ( ”e o f ”,”a d o e o f ”) a d o 库是一组c o m 动态库,这意味着应用程序在使用a d o 对象之前需要初 始化c o m 库。在m f c 应用程序中一般在应用程序主类的i n i t l n s t a n c e 成员函数 里初始化c o m 库。代码如下所示: b o o l c s t f i l e a p p :i n i t l n s t a n c e 0 初始化c o m 库 c o l n i t i a l i z e 0 ; ) 2 a d 0 接口简介 a d o 库包含三个基本接口:c o n n e c t i o n p t r 接口、c o m m a n d p t r 接口和 _ r e c o r d s e t p t r 接口。 c o r m e c f i o n p t r 接口返回一个记录集或一个空指针。通常使用它来创建一个数 据连接或执行一条不返回任何结果的s q l 语句,如一个存储过程。使用 _ c o n n e c t i o n p t r 接口返回一个记录集不是一个好的使用方法。对于要返回记录的操 作通常用r e c o r d s e t p t r 来实现。而用_ c o r m e c f i o n p t r 操作时要想得到记录条数得遍 历所有记录,而用r e c o r d s e t p t r 时则不需要。 一c o m m a n d p t r 接口返回一个记录集。它提供了一种简单的方法来执行返回记 录集的存储过程和s q l 语句。在使用c o m m a n d p t r 接1 3 时,可以利用全局 _ c o t m e c t i o n p t r 接口,也可以在_ c o m m a n d p t r 接口里直接使用连接字符串。如果只 执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据 库,并返回很多记录集,那就应该使用全局c o r m e c t i o n p 廿接口创建一个数据连接, 然后使用c o m m a n d p t r 接口执行存储过程和s q l 语句。 j t e c o r d s e t p t r 接口用来操作记录集的指针。同以上两种接口相比,它为记录集 提供了更多的控制功能,如记录锁定,游标控制等。同c o m m a n d p t r 接口一样, 它不一定要使用一个己经创建的数据连接,可以用一个连接字符串代替连接指针 赋给_ r e c o r d s e t p t r 的c o n n e c t i o n 成员变量,让它自己创建数据连接。如果你要使用 多个记录集,最好的方法是同c o m m a n d 对象一样使用己经创建了数据连接的全局 c o n n e c t i o n p t r 接口,然后使用r e c o r d s e t p t r 执行存储过程和s q l 语句。 3 用c o n n e c t i o n p t r 建立数据库连接 在使用a d o 访问数据库之前一般先使用c o n n e c t i o n 对象来建立与数据库服务 器的连接,它相当于m f co d b c 中的c d a t a b a s e 类。和c d a m b a s e 类一样,调用 c o n n e c t i o n 对象的o p e n 方法即可建立与服务器的连接。代码如下所示: 一c o r m e c t i o n p t rm _ p c o n n e c t i o n = n u l l ; 6 西安建筑科技大学硕士学位论文 t r y h r e s u l th r2 m _ p c o n n e c t i o n c r e a t e l n s t a n c e ( _ _ u u i d o f ( c o n n e c t i o n ) ) ; i f ( s u c c e e d e d ( h r ) ) 连接数据库 m _ _ p c o r m e c f i o n 一 o p e n ( _ b s t r _ t ( s t r c o n n e c t ) ,”,”, n u l l ) ; c a t c h ( _ c o m _ e r r o r & e 1 其中,s t r c o r m e c t b s t r t 类型的连接字符串,根据不同的数据源而定。 4 定义r e c o r d s e t p t r 型变量,并打开数据集 定s ( r e c o r d s e t p t r 型变量,然后通过它调用r e c o r d s e t 对象的o p e n 方法, 即可打开一个数据集。r e c o r d s e t 对象与m f c 中的c r e c o r d s e t 类类似,它也有当 前记录、当前记录指针的概念。 砷c o r d s e t p t rm _ p r e c o r d s e t = n u l l ; t r y h r e s u l th r2 m _ p c o n n e c t i o n c r e a t e l n s t a a c e ( _ u u i d o f ( c o n n e c t i o a ) ) ; i f ( s u c c e e d e d ( h r ) ) 打开记录集 m a o r e c o r d s e t - o p e n ( _ v a r i a n t _ ts t r s q l ) , _ v a r i a n t _ _ t ( ( i d i s p a t c h + ) m _ p c o n n e c t i o n ,t r u e ) , a d o p e n k e y s e t ,a d l o c k o p t i m i s t i c ,a d c m d t e x t ) ;、 ) c a t c h ( c o r ne r r o r & e 、 西安建筑科技大学硕士学位论文 r e c o r d s e t 对象的o p e n 方法非常重要,它的第一个参数可以是一个s q l 语句、 一个表的名字或一个命令对象等等;第二个参数就是前面建立的连接对象指针。此 外,用c o n n e c t i o n 和c o m m a n d 对象的e x e c u t e 方法也获得到记录集,但只能读取 记录集,不能对记录集进行增、删、改操作。 5 读取当前记录的数据 读取数据比较简单的方法示例如下: v a r i a n t tmv a g e ; t r y m p r e c o r d s e t - m o v e f i r s t 0 ; w h i l e ( ! m a o r e c o r d s e t - a d o e o f ) ,读取a g e 字段的值 m v a ge 5m a ) r e c o r d s e t - g e t c o l l e c t ( ”a g e ”) ; m _ p r e c o r d s e t 一 m o v e n e x t 0 ; ) ) 上面的a g e 是字段名,通过g e t c o l l e c t 方法读取的字段值保存在m _ v a g e 变量 内。 6 关闭记录集与关闭连接 记录集和连接都可以用c l o s e 方法来关闭: ,关闭记录集 m a o r e c o r d s e t - c 1 0 s e 0 ; 关闭连接 m a ) c o n n e c f i o n - c 1 0 s e o ; 7 关于数据类型转换 由于c o m 对象是跨平台的,它使用了一种通用的方法来处理各种类型的数 据,因此c s t r i n g 类和c o m 对象是不兼容的,我们需要一组a p i7 来转换c o m 对象 和c + + 类型的数据。一v a r i a n t t 和_ b s t r t 就是这样两种对象。它们提供了通用 的方法来转换c o m 对象和c + + 类型的数据。 西安建筑科技大学硕士学位论文 2 2f t p 协议及使用w i n i n e t 实现f t p 客户端 2 2 1g r i p 协议 f t p ( f i l et r a n s f e rp r o t o c 0 1 ) 即文件传输协议,是文件传输的i n t e r a c t 标准, 适合于在异构网络中的任意计算机之间传送文件。f t p 是基于客户朋艮务器模型而 设计的。用户与远程文件服务器连接,需要登录服务器的注册帐号,或者匿名访 问( 通过允许匿名f t p 的服务器来使用) 。登录后,用户可查看远程服务器上的文件 列表,把所需要的内容下载到本地计算机;另一方面,如果远程文件服务器授权用 户对该服务器上的文件进行管理,用户就可以把本机上的内容上传到服务器进行 共享,而且还能自由地对服务器上的文件进行编辑操作,例如对文件进行删除、 移动、改名等。 f t p 协议建立在t c p 协议基础之上,是一种面向连接的传输协议,能够保证 高可靠性的文件传输。f t p 的通信过程如图2 1 所示: 终端用户 文件系统 用户p 1 用户d t p i i ! 控制连接 l【, g f t p 命令 i ( f t p 响应 i i i i 数据连接 一i 服务器p i 文件系统 客户f t p 服务器f t p i 、一? 图2 1 【6 1f t p 的通信过程 f t p 客户与服务之间采用两个t c p 连接来传输文件( 或文件列表) ,一个是控 制连接,另一个是数据连接1 。 由用户p i ( p r o t o c o li n t e r p r e t e r ) 开始控制连接。在开始阶段,标准f t p 命令 由用户p i 产生并通过控制连接传送到服务器进程。服务器p i 将向用户p i 返回f t p 命令相应的标准应答。 用户d t p ( d a t a t r a n s f e r p r o c e s s ) 在特定的数据端口侦听,服务器开始数据连 接并以指定的参数开始数据传输,这个数据连接是全双工的。 西安建筑科技大学硕士学位论文 控制连接以通常的客户服务器方式建立。服务器以被动方式打开t c p 端口 2 l ,等待客户的连接。客户则以主动方式打开t c p 端口2 1 来建立连接。控制连接 始终等待客户与服务器之间的通信。 每一次文件传输或目录列表都要建立一个全新的数据连接,其一般过程如下: 1 ) 在客户端主机上为所在数据连接端选择一个临时端口号,以被动方式打开 该端口。 2 ) 客户使用p o r t 命令从控制连接上把端口号发向服务器。 3 ) 服务器在控制连接上接收端口号,并向客户端主机的临时端口发布一个主 动的打开,服务器的数据连接端一直使用端口2 0 。通常服务器也执行数据连 接的主动关闭。 建立数据连接时,客户也可以不发送p o r t 命令,而是由服务器与客户端的控 制连接源端口主动建立数据连接,服务器面向该连接的端口号是2 0 。 数据连接有以下三大用途: 1 ) 从客户向服务器发送文件。 2 ) 从服务器向客户发送文件。 3 ) 从服务器向客户发送文件或目录列表。 f t p 服务器把列表从数据连接上发回,而不是控制连接上的多行应答,避免了 行的有限性对目录大小的限制。 f t p 传输过程中可以使用的数据类型有a s c i i 码类型,e b c d i c 类型,图像类 型和本地类型。 a s c i i 码类型( 默认选择) 主要用于传输文本文件; e b c d i c 类型用于传输文本文件,且要求两端都是e b c d i c 系统; 图像类型通常用于传输二进制文件( 如电子表格,程序,数据库文件等) ,也 称为二进制类型: 本地类型是在具有不同字节大小的主机间传输二进制文件。每一字节的比特 数由发送方规定。 f t p 的传输方式规定了文件在数据连接中是如何传输。主要有流方式,块方式, 压缩方式。 流方式( 默认选择) 文件以字节流的形式传输。 块方式文件以一系列块来传输。 压缩方式一个简单的全长编码压缩方法,压缩连续出现的相同字节。 以上很多选择通常不实现,但对f t p 中的每一个特征来说,都存在着至少一 种实现。 1 n 西安建筑科技大学硕士学位论文 2 2 2 使用w i n i n e t 实现w r p 客户端 本系统的实现中使用了f t p 服务来向服务器上传文件。为了使f t p 客户端的 实现起来更简捷,在此使用了w i n l n e t 技术。下面就简单介绍w i n n e t 技术。 w i n i n e t 是个比w i n s o e k 高一层的a p i ,它只适用于h t t p 、f t p 和g o p h e r 的客户端程序,我们不能用w i n l n e t 创建服务器程序。w i n l n e t 在缓冲机制、安全 机制、w e b 代理访问以及用户友好性等方面都远远胜过w i n s o c k 。 可以通过直接调用晰1 1 3 2 函数( 包含在w i n d 咂t d l l 中) 或使用m f c 提供 的w i n n e t 类编写w i n i n e t 客户端应用程序。 利用m f c 提供的w i n l n e t 类编写f t p 客户端应用程序的基本操作如表2 1 所 刁。 操作说明 创建c i n t e m e t s e s s i o n 对象初始化w i n i n e t 并连接到服务器 调用获得f t p 连接 c i n t e m e t s e s s i o n :g e t f t p c o n n e e t i o n ( 、 调用在f t p 服务器上创建指定的目录 c f t p c o n n e e t i o n :c r e a t e d i r e c t o r y ( ) 调用更改f t p 服务器上的当前连接目录 c f t ) c o n n e c t i o n :s e t c u r r e n t d i r e c t o r y ( ) 调用获得f t p 服务器上的当前连接目录 c f t p c o n n e c t i o n :g e t c u r r e n t d i r e e t o r y ( ) 调用c f t p f i l e f i n d :f i n d f i l e ( ) 查找f t p 当前连接目录中的第2 个文 件 调用c f t p f i l e f i n d :f i n d n e x t f i l e ( ) 查找f t p 当前连接目录中的下一个文 件 调用c f q 0 c o n n e c f i o n :r e m o v e ( ) 删除f t p 服务器中当前连接目录下的 文件 调用c f t p c o n n e c f i o n :p u t f i l e ( )将文件上传到f t p 服务器中 调用c f t p c o n n e c f i o n :g e t f i l e ( ) 从f t p 服务器中下载文件 调用c f t p c o n n e c t i o n :o p e n _ f i l e ( ) 打开f t p 服务器中的指定文件 调用c f t p c o n n e c t i o n :c l o s e ( )关闭f t p 连接 使用c i n t e m e t e x c e p t i o n 类 处理所有常见的i n t e m e t 异常类型 表2 1f t p 客户端应用程序中的基本操作 西安建筑科技大学硕士学位论文 2 3 多线程技术 2 3 1 进程与线程 进程是指装入内存中正在执行的应用程序,它包括私有的虚拟地址空间、代 码、数据、动态分配的内存、文件旬柄等操作系统资源。 线程是操作系统分配处理器的最基本单元,线程隶属于进程,是进程之内独 立执行的一个单元。线程可以执行进程代码的任何部分,包括那些正在被其他线 程所执行的代码。 一个进程可以包括多个在进程上下文中运行的线程,同一个进程的多个线程 共享该进程的资源和分配给该进程的内存空间,每个线程也有自己独有的一些资 源,如堆栈等。 2 3 2 多线程 每一个进程至少要有一个主线程。在多线程的进程中其他的线程都由主线程 所创建。当操作系统载入w i n m a i n o 函数时,主线程被激活。编程者可以将同一个 进程中各个独立的线程看作是同时运行的。实际上操作系统的调度程序根据特定 的规则将各个线程调入c p u 中执行,这一切都是由系统自动来完成。多线程程序 的执行顺序如图2 2 所示。 图2 2 1 9 1 多线程程序的执行示意图 多线程技术的应用,可使编程任务简化和模块化,可以提高处理器的效率 减少任务的切换时间,提高吞吐量和并发度,从而提高程序的性能。 西安建筑科技大学硕士学位论文 2 3 3w i n 3 2a p i 对多线程的支持 w i n 3 2 提供了一系列的a p i 函数来完成线程的创建、挂起、恢复、终结以及 通信等工作。表2 2 列出这些基本的函数及其功能。 w h 3 2 a p i 说明 c r e a t e t h r e a d 0 创建一个新的线程,并返回已建线程的句柄 s u s p e n d t h r e a d 0 挂起指定的线程,即增加一个线程的挂起计数 r e s u m e t h r e a d 0恢复被挂起的线程,即减少一个线程的挂起计数 e x i t t h r e a d 0终止线程的执行 t e r m i n a t e t h r e a d 0强制终止线程的执行,并不释放线程所占的资源,不安全 s e t t h r e a d p r i o d t y 0 设置指定线程的优先级 表2 2w i n 3 2 提供的操作线程的基本a p i 函数 2 3 4m f c 对多线程的支持 在m f c 中把线程分成两大类:用户界面线程( u s e r - i n t e r f a c et h r e a d ) 和工作 者线程( w o r k e rt h r e a d ) 。两者的主要区别在于工作者线程没有消息循环,而用 户界面线程有自己的消息队列和消息循环。 工作者线程由于没有消息机制,通常用来执行后台计算和维护任务,如冗长 的计算过程,打印机的后台打印等。 用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户 和系统所产生的事件和消息等。 在w i n3 2 的多线程编程模式中,我们可以遵循这种策略:即让主线程仅来做 用户界面的工作,而其它繁重的工作则交由工作者线程在后台完成。在主线程中 调用c r e a t e t h r e a d 函数来生成新线程,调用e x i t t h r e a d 或t e r m i n a t e t h r e a d 函数来 结束一个线程。 在m f c 中,可以用a f x b e g i n t h r e a d 函数来创建并初始化一个线程的运行,这 个函数有两种重载形式,分别用于创建工作者线程和用户接口线程。两种函数原 型及说明如下: 1 创建工作者线程 c w i n t h r e a d 4a f x b e g i n t h r e a d ( a f x _ t h r e a d p r o cp f n t h r e a d p r o c ,l p v o i d p p a r a m ,i n tn p r i o r i t y 。t h r e a d _ p r i o r i t y _ n o r m a l ,u i n tn s t a c k s i z e = 0 , d w o r dd w c r e a t e f l a g s 2 0 ,l p s e c u r i t y a t t r i b u t e sl p s e c u r i t y a t t r s = n u l l ) 1 3 西安建筑科技大学硕士学位论文 p f i a t h r e a d p r o :指向工作者线程执行函数的指针,执行函数定义该线程。当进 入函数时,线程启动;退出时,线程终止;该指针不能为n u l l ,且原型必须声明 为如下: u i n te x e c u t i n g f u n c t i o n ( u 0 i dp v a r a m ) ; p p a r a m :在线程启动时传递给其执行函数e x e c u t i n g f u n c t i o n 的参数,执行函 数将用某种方式来解释该值。它可以是数值,或是指向包括多个参数的结构的指 针,甚至可以被忽略。 n p r i 0 6 t y :线程的优先级 n s t a c k s i z e :线程为自用堆栈分配的地址空间大小,单位为字节。 d w c r e a t e f l a g s :控制线程被创建的标志。如果为0 则线程在被创建后立即开 始执行。 l p s e c u r i t y a t t r s :线程的安全属性指针。 2 创建用户接口线程 c w i n t h r e a d + a f x b e g i n t h r e a d ( c r u n t i m e c l a s s 4p t h r e a d c l a s s ,i n tn p r i o f i t y = t h r e a d _ p r o r i t y _ n o r m a l ,u i n tn s t a c k s i z e = 0 ,d w o r dd w c r e a t e f l a g s = 0 , l p s e c u r i t y _ a t t r i b u t e sl p s e c u r i t y a t t r s = n u l l ) ; p t h r e a d c l a s s :指向c w m t h r e a d 的派生类的运行时类对象指针,该派生类定 义了被创建的用户界面线程的启动,退出等。其他参数含义同上。 c w i n t h r e a d 类的对象描述了进程中线程的执行,进程的主线程执行通常由 c w i n t h r e a d 类派生的c w i n a p p 的派生对象所提供。在m f c 中,用户界面线程对 象是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论