

已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计(论文)题 目: 基于多线程socket的文本文件管理系统 学 院: 计算机科学学院 专业班级: 计算机科学与技术08级6班 指导教师: 职称: 学生姓名: 学 号: 论文题目:基于多线程socket的文本文件管理系统摘 要随着科技的发展,特别是信息技术的发展,使人类社会进入到信息化时代。人们的生活工作节奏随着网络的普及而不断加快。大量信息的涌入,信息的高效管理、高效工作、共享、存储等成为人们的热门话题。在实际工作中,为了提高传输速率和办公效率,大量信息都是用规定格式的纯文本文件进行存储和传输。于是,基于多线程socket的文本文件管理系统的出现成为必然。本论文首先介绍了文本文件管理系统的发展,从目前的对文本文件管理的需求分析的基础入手,结合面向过程的语言c的技术特点,开发了基于windows平台的socket的多线程文本文件管理系统。按照软件工程的要求,本文详细的介绍了该系统开发的需求分析,概要设计,详细设计,使用的关键技术,编码与测试的全过程并对系统的操作方法进行了说明。最终实现了文件显示、文件复制、字符串查找、字符串插入共四个功能。总之,这是一次将理论知识与开发技术相结合的综合实践,关键词:文本文件,socket,多线程abstractwith the development of science and technology, especially the development of information technology, make the human society into the information age. the life of people working rhythm with the popularity of the network and to speed up. the influx of a large amount of information, information of the efficient management, efficient work, sharing, storage become people to the hot topic of conversation. in actual work, in order to improve the transmission rate and office efficiency, a lot of information is to use the format prescribed by the pure text file storage and transmission. then, based on the text file management multithreading socket system appear become inevitable.this paper first introduces the text file management system of development, from the current text file management to the needs of the basis of analysis, combining process oriented language c of the technical features, development platform based on the windows of the socket multithreading text file management system. according to the requirements of software engineering, this paper introduced the development of the system requirements analysis and general design, detailed design, use the key technology, coding and the whole process of the test and the operation method of the system were introduced. finally realize the documents show, file copy, string search, string insert four function. all in all, this is a theoretical knowledge and development technology of combining the comprehensive practicekey words: text files,socket, multithreading目 录摘 要iabstractii目 录iii第1章 概 述11.1 课题背景11.2 课题研究的现状11.2.1 选择基于多线程socket的文本文件管理系统的原因21.2.2 基于多线程socket文本文件管理系统的实施步骤21.3 系统研究目标和内容31.3.1 该系统设计的目标与原则31.3.2 该系统设计的主要内容31.3.3 本系统涉及的关键技术41.4 系统设计的总体规划41.4.1 总体规划41.4.2 系统规划图5第2章 需求分析62.1功能需求分析62.2 性能需求分析62.3 系统基本工作模式图7第3章 概要设计83.1系统所用辅助软件介绍83.1.1 microsoft visual c+ 6.083.1.2 source insight 3.593.2功能模块描述93.2.1服务器模块处理基本动作93.2.2客户端模块处理基本动作9第4章 详细设计及关键技术介绍104.1 服务器端详细设计104.1.1程序流程图104.2 客户端详细设计134.2.1客户端处理流程图134.3 关键技术简介134.3.1 winsock简介144.3.2 socket简介144.3.3多线程简介15第5章 系统实现185.1 实现过程185.1.1 服务器端实现过程185.1.2 客户端实现过程215.2实现结果255.2.1 服务器端实现结果255.2.2 客户端实现结果27第6章 测试316.1 测试观点的确定316.2 测试用例的设计和实施316.2.1 显示模块测试326.2.2 文件复制模块326.2.3 文件查找模块336.2.4 字符串插入模块35第7章 总结36致 谢37参考文献3838西安工程大学学士论文第1章 概 述本章的主要内容就是介绍了本人选择该课题的背景。当今基于多线程socket的文本文件管理系统的现状以及现在文本文件管理存在哪些问题;基于存在的问题提出相应的解决方案以及开发本系统的意义,并对系统的整体设计做出相应的规划。1.1 课题背景文本是海量、异构、分布的文档。文档内容是人类所使用的自然语言,缺乏计算机可理解的语义。文本文档都是半结构或无结构的,所以,文本管理面临的首要问题是在某一特定的情况下如何在计算机中合理地表示文本,使之既要包含足够的信息以反映文本的特征,又不至于过于复杂而无法处理或解析。在浩如烟海的网络信息中,80%的信息是以文本的形式存放的,文本管理是文本内容挖掘的一种重要形式。文本的表示及其特征项的选取是文本管理、信息检索的一个基本问题,它把从文本中查找到的特征词进行量化来表示文本信息。从而将它们由一个无结构的原始文本转化为结构化的计算机可以识别处理的信息或者一些具有统计意义的数据信息,即对文本进行科学的抽象,建立它的数学模型,用以描述文本的内层含义和代替文本,使计算机能够通过对这种模型的计算和操作来实现对文本的识别。由于文本是非结构化的数据,要想从大量的文本中提取出有用的信息就必须首先将文本转化为可处理的结构化形式。对文本做净化处理,在保证原文含义的基础上,找出对文本特征类别最具代表性的文本特征。为了解决这个问题,最有效的办法就是通过特征选择、统计。 1.2 课题研究的现状自1997年开始,我国因特网用户呈现几何级数增长。人们的生活工作节奏随着网络的普及而不断加快。大量信息的涌入,信息的高效管理、高效工作、共享、存储等成为人们的热门话题。在实际工作中,为了提高传输速率和办公效率 ,大量信息都是用规定格式的纯文本文件进行存储和传输的。目前对纯文本文件的研究主要分为两个方面:文本解析和文本动态关联性的修改。1.2.1 选择基于多线程socket的文本文件管理系统的原因随着信息技术的深入发展,计算机给工作、生活等带来了极大的方便,在极大地提高劳动生产率的同时,给社会带来了无限的商机与财富。但随着各个企事业单位对计算机使用程度的不断加深,大量的、文本文档的管理和利用成为越来越显著的难题。尽管每个人都认真的学习了与自己工作、生活相关的软硬件知识,其中的软件的配置文件,硬件管理信息等一些文档都为文本文档;尽管管理人员花费了大量的精力和时间通过各种方法去管理和维护此类文档,但在实际工作中检索和管理所需文档依旧要花费大量时间。如何有效、安全的对大量特定的文本文档进行管理和利用成为当务之急。很多单位或部门在以往的实际工作当中,为了提高传输速率和办公效率,大量信息都是用规定格式的纯文本文件进行存储和传输的。但由于二次加工的需要,需首先将这些信息按字段存储于数据库当中;还有的情况是用纯文本文件作为动态参数配置文件,也就是说参数的名称和数量都是变化当中的,之所以选择用纯文本文件进行配置,主要是考虑到部署时的简便和效率的提高。对于第一种情况进行的处理过程称为文本解析,其目的就是通过对文本内容特征进行识别 ,提取出有用的字段,将它们存储到数据库当中,实现从文件管理到数据库管理的转换,以便于进行二次加工,以更友好的形式供读者使用,或者进行诸如检索、文本挖掘等更深层次的加工和服务。第二种情况要复杂一些,不仅涉及到内容特征的识别,有用字段的提取,还要进行动态的关联性的修改,这就需要对整个配置文件的结构分析清楚,找出其唯一性的特征和修改时机。我们可以根据规定的格式进行文本文件的查找和修改等操作。把文本配置文件中易出错的点进行排除和修正,还可以通过对有效信息的定位和提取,提高工作效率。1.2.2 基于多线程socket文本文件管理系统的实施步骤实施文本文件管理系统是一项复杂的系统工程,整个项目涉及信息系统, 统计分析等众多门类的知识。因此我们除了要选择合适的软件开发工具外还必须按照正确的实施方法才能保证项目得以成功。文本文件处理项目的实施步骤可分为: (1) 需求分析需求分析是本系统实施的第一个关键的步骤,在其他活动开展之前必须明确的定义用户对该文本文件管理系统的期望和需求,进一步将用户的需求具体化。全面、恰当的理解用户的需求,为本系统的设计和实现打下坚实的基础。(2) 概要设计(体系结构设计)通过对企业和用户需求的分析,建立系统的数据结构和设计数据库,并规划好系统的应用架构,将整个系统划分为适当的模块及模块的组合、运行控制方式,运行时间,确定各个模块的功能、性能、接口。(3) 详细设计确定各个模块的具体算法,分析确定各个模块内部的数据结构,进一步细化各个模块接口的细节。如有条件的话可以为每个模块设计一组测试用例。 (4) 系统的实现选择一门恰当的编程语言,按照设计实现该系统的预想内容并对系统进行测试。(5) 用户培训和数据模拟测试对于开发和使用该文本文件管理系统, 最终的使用是相当简单的, 只需要点击操作就可针对特定的文本文件进行管理。 (6) 系统改进和完善任何系统的实施都必须是不断完善的,本系统更是如此。在用户使用一段时间后可能会提出更多的,更具体的要求, 这时需要再按照上述步骤对系统进行重构或完善。1.3 系统研究目标和内容1.3.1 该系统设计的目标与原则基于多线程socket的本文本文件管理系统设计的主要目的是服务于单位或部门的实际工作 ,为了提高传输速率和办公效率。具体做到:(1)高效率在检索海量内容的文本的时候,能以较高的速度返回结果。(2)高准确性根据用户的输入进行查询,做到准确,无误,确保结果是高可用的。(3)高灵活性只要用户所要管理的文件是.txt形式,都可以按照用户的要求把结果保存到指定的位置。(4)高适应性本系统对用户的所使用的电脑的软硬件要求都不高,且它的体积小,安装、操作简单,决定了本系统的适应性极强,使用面相当广泛。(5)架构清晰,界面简捷,实用性强。(6)可用性目标系统功能齐全,能够完全满足业务需求。1.3.2 该系统设计的主要内容由于本系统采用的是c/s架构,所以在开发本系统的主要内容涉及服务器端和客户端的开发,在这两端由可以划分为以下几大模块:网络配置、文件显示、文件复制、文件查找、文件插入五大模块。(1)网络配置1)客户端创建socket-地址解析-连接服务器-向服务器端发送请求-接收来自服务器端的结果。2)服务器端 创建socket-绑定-监听端口-接受客户端的请求-创建线程进行处理-向客户端发送处理结果。(2)文件显示显示用户所指定的文本文件的内容,并显示其行号。(3)文件复制把指定的文本文件复制到指定的文本文件中,并把结果和异常保存到指定的结果文件中。(4)文件查找在相关的文件中查找指定的字符串,并统计出它出现的位置和总次数,并把结果和异常保存到指定的结果文件中。(5)文件插入将指定的字符串插入指定的文件中,并把结果和异常保存到指定的结果文件中。 1.3.3 本系统涉及的关键技术该系统综合运用了大学期间学到的一些重要技术,其中的主要技术如下。(1)vc+ 6.0的工程构建技术(2)windows网络编程技术 (3)多线程编程技术(4)基于c语言的开发技术1.4 系统设计的总体规划1.4.1 总体规划21世纪是信息量不断扩张的时代,如何能在数据的海洋提取出所需要的部分,让有效数据为我们的生活带来便利已经成为一个热门话题。internet技术得到持续、猛烈的发展,使得计算机在人们的生活中占有很重要的地位,对计算机的应用已经不局限于基本的使用,而是更深层次的开发和利用。 指针是c语言的一大特色,可以说是c语言优于其它高级语言的一个重要原因。就是因为它有指针,可以直接进行靠近硬件的操作。c语言具有强大的控制结构、快速、紧凑、可移植性强等特点。本次毕业设计-基于多线程的socket文本文件管理系统,是在windows xp平台下,以microsoft visual c+ 6.0为开发平台,source insight 3.5、ultraedit等软件为辅助,采用socket技术和多线程技术开发的。在本论文中全面详细地介绍了该文本文件管理系统系统的设计方案,第1章概述,包括本次选题的背景、课题研究的现状,以及系统规划等的介绍。第2章需求分析。第3章开发环境介绍,包括在vc6.0建立工程并把一些相应的类库加载到工程中的具体细节等。第4章详细设计及关键技术介绍,包括系统所用的软件介绍,功能模块设计等。第5章系统实现,主要是编码的实现;第6章系统测试与调试,介绍了开发系统中所遇到的各种问题以及解决方式。第7章总结和展望,介绍了开发过程中的心得体会以及以后所要进行的工作。1.4.2 系统规划图图1-1系统模块设计第2章 需求分析需求分析是进行系统开发的基础。通过需求分析,可以明确用户需求,确定系统功能。具体而言,本文将从如下几个方面进行了分析。2.1功能需求分析功能需求主要是为了明确所开发的软件必须具备的功能。文本文件是日常工作和生活中常用的文件格式,也是许多应用软件的配置文件的格式。文本文件管理系统应当有助于用户对文本文件进行日常应用的操作如:显示,复制,增加,删除、查找等操作,还要向用户公开和保存运行后的结果。因此,文本文件管理系统应当满足以下的需求:(1)显示指定文本文件的内容显示文本文件的内容并为其添加行号,提示用户有效信息的所在行数,更能明确要查找信息的位置。(2)复制文件把用户指定的文件复制到另一指定的文件,实现文件数据备份。(3)向文件中插入字符串将用户指定的字符串插入到文件中的指定位置。(4)查找在指定的文件中查找字符串(长度80),并统计出该字符串出现的位置和总的次数。此匹配为精确匹配,区分大小写,不支持统配符匹配,包含匹配,非全单词匹配。(5)结果和message一览表以上所有功能(注(1)-(4)中)在运行过程中发生的异常情况,均要输出异常提示message,并写入到结果文件中,作成异常message一览表。2.2 性能需求分析该系统所面临的使用人群和使用场合决定了该系统应满足以下几个方面的性能要求。(1) 正确性根据文本管理系统的运作流程的设计,流程中的每个步骤在系统中都必须有所体现,保证程序的正确性。(2)灵活性系统应具有较灵活的操作性,用户可以根据自己的不同情况进行功能的选择,让程序更灵活,方便,高效。(3)稳定性系统应具备长期持续工作的能力,使服务器保持开启状态,避免因系统引起的死机现象。(4)安全性有良好的并发控制操作,避免因系统并发操作对文件造成损坏。同时保证文本信息的安全性,不出现内容泄露、串改等意外。(5)高效性由于本系统是c/s架构、多线程的,可以有多个用户同时对服务器端进行访问,就要求服务器有高效的处理速度,尽可能的让每个用户都能舒心的使用该系统。2.3 系统基本工作模式图图2-1 系统基本工作模式图第3章 概要设计3.1系统所用辅助软件介绍3.1.1 microsoft visual c+ 6.0 microsoft visual c+ 6.0,作为一种c/c+语言的集成开发环境(ide),产生vc的最早的根源其实要追溯到dos时代的borland公司,当初borland公司开发的turbo pascal和turbo c让程序员们深刻感受到了把编辑器和编译器集成在一起的ide是多么的方便,微软也看到了这一优点,于是相继开发了quick c和microsoft c/c+等多个dos版本的c/c+集成开发工具。随着windows的不断成熟,微软决定放弃dos下的开发工作,正式推出了windows下的visual c+ 1.0,早期的vc功能并不什么强大,使用起来也不方便,1.0版和1.5版都是16位编程工具。vc的革命性改变得益于windows 95的推出,从vc 2.0开始,微软又放弃了16位编程,以后的vc都只用于32位编程开发,为了与mfc类库的版本号保持一致,微软跳过了版本3,直接推出vc 4.0,这个版本及修订版4.2的部分界面风格一直被保留到最新的vc 6.0中。从vc4到vc6,vc的各种功能不断增强,mfc类库的内容也越来越丰富,现在利用vc开发应用程序已经是一件相当轻松的事情了。vc是一个功能强大的、灵活性好和完全可扩展的 windows开发系统。它被用来创建文字处理器、电子数据表格、多媒体、网络。任何在 windows 下能做的事,都可以用vc 来完成。如果 vc 不能直接支持某种特性,那它一定会在 windows 动态链接库或在定制控件形式中得到支持。vc6.0 具有强有力的 internet 支持,mfc 类库封装了 win32 internet (winint),使得 internet 编程更为容易,wininet使 internet 成为应用程序的一部分,并简化了对 internet 服务器的访问。winsock 规范给应用程序开发者提供了一套简单的 api,而且制定了网络规范。winsock ( windows 套接字) 是 wosa 的一部分。 winsock 规范对 windows 进行了专门的扩展,定义了二进制网络编程接口。套接字是通信用卡端点的抽象, 它提供了通过网络发送和接收数据的机制。m fc 提供了有几个类来支持套接字编程。其中的 casyncsocket 类封装了 winsock a p i,而从 casynsocket 派生的 csocket 类则提供了更高一级的抽象来简化网络通信编程。windows 编程是异步的 ,即许多不同的事情同时发生。 casynsocket 类采用函数发送请求后立即返回,当请求完成时发送一条 windows 消息。例如,通过面向连接的 socket向另一个 internet 站点发送一个字符串,可调用 socket 函数 send ( )。send ( ) 函数并不需要发送任何数据,它只是试图发送, 并且当socket 没有准备好或正在等待时立即返回。socket 准备好后,将向 socket 窗口发送一条消息,socket 窗口得到消息后再将数据发送出去。这就是异步 windows 编程。3.1.2 source insight 3.5source insight是一个面向项目开发的程序编辑器和代码浏览器,它拥有内置的对c/c+, c#和java等程序的分析。source insight能分析源代码并动态维护它自己的符号数据库,并自动地显示有用的上下文信息。 source insight不仅仅是一个强大的程序编辑器,它还能显示reference trees,class inheritance diagrams和call trees。source insight提供了最快速的对源代码的导航和任何程序编辑器的源信息。 source insight提供了快速和革新的访问源代码和源信息的能力。source insight能编辑并同时分析源代码,提供实用的信息并立即进行分析。3.2功能模块描述3.2.1 服务器模块处理基本动作 (1)创建socket 。(2)接受客户端的请求,显示请求的客户端的ip。(3)根据用户不同的请求,新建线程。(4)按照文本文件每行的内容进行处理:显示、查找、复制、插入。(5)将处理的结果打包并发送至客户端。3.2.2 客户端模块处理基本动作 (1)创建socket。 (2)接受用户的输入并进行参数检查。(3)连接服务器。(4)将合法的数据打包发送至服务器端。(5)解析从服务器端发回来的结果包,并显示结果。(6)把处理结果写入结果文件,保存。第4章 详细设计及关键技术介绍c/s (client/server,客户机/服务器)模式又称c/s结构,是20世纪80年代末逐步成长起来的一种模式,是软件系统体系结构的一种。c/s结构的关键在于功能的分布,一些功能放在前端机(即客户机)上执行,另一些功能放在后端机(即服务器)上执行。功能的分布在于减少计算机系统的各种瓶颈问题。c/s模式简单地讲就是基于企业内部网络的应用系统。与b/s(browser/server,浏览器/服务器)模式相比,c/s模式的应用系统最大的好处是不依赖企业外网环境,即无论企业是否能够上网,都不影响应用。 4.1 服务器端详细设计服务器通常采用高性能的pc、工作站或小型机,并采用大型数据库系统,如oracle、sybase、informix或 sql server。客户端需要安装专用的客户端软件。 在这里,服务器其实就是一个进程,它需要等待任意数量的客户机与之建立连接,以便为它们的请求提供服务。服务器必须在一个已知的名称上监听连接。在tcp/ip中,这个名称就是本地接口的ip地址,再加一个端口编号。4.1.1程序流程图本系统的服务器端的构架依照编写winsock应用程序的基本方法来完成。首先要初始化winsock,即为每个winsock应用加载一个合适的winsock dll版本(加载winsock库);接着进行协议寻址,使用ipv4协议建立winsock通信;完成以上两步,就可以创建套接字了,套接字是传输提供程序的句柄。前面已经提过,服务器要在一个已知名称(ip地址和一个已知的端口号)上进行监听,在winsock中第一步就是要把socket将给定协议的套接字绑定到它已知的名称上,下一步就是将套接字置为监听模式。最后,若一台客户机试图建立连接,服务器必须通过accept调用来接受连接。在服务器端接受连接后,为该客户端的本次请求创建一个线程。服务器根据客户请求中的功能码的不同来识别用户的请求。(详见图4-1)。服务器端在处理完用户的请求后,把结果发回客户端并在服务器端显示相关的信息(如客户端ip,接受请求是否成功,接受请求包和发送结果包是否成功)以方便用户和维护人员进行管理和查看。图4-1 服务器端基本流程图(1) 线程内处理模式 线程内的基本处理流程可以分为:请求识别,请求处理,结果发送三大部分。其流程图(详见图4-2)如下。其中图4-3为以查找功能为例的处理过程。图4-2 线程内处理流程图 4-3 查找字符串函数内部的流程图4.2 客户端详细设计客户端的创建要简单的多,建立成功连接所需的步骤也要少的多,创建客户端只需3步。(1)创建一个套接字。(2)创建一个sockaddr地址结构,结构名称为准备连接到的服务器名。对于tcp/ip,这个句式客户端应用程序所监听的服务器的ip地址和端口号。(3)用connect初始化客户端于服务器的连接。4.2.1客户端处理流程图图 4-4客户端处理流程图4.3 关键技术简介基于多线程socket的文本文件管理系统应用的主要技术包括windows网络编程技术、多线程技术。下面对这两方面的技术做以下简介。4.3.1 winsock简介winsock是一种标准api(application programming interface,应用程序编程接口主要用于网络中的数据通信,它允许两个或者多个应用程序(或进程)在同一台机器上或通过网络相互通信。winsock是一种网络编程接口而不是协议。使用winsock编程接口,应用程序可通过普通网络协议如tcp/ip(transmission control protocol/internet protocol,传输控制协议/网际协议)或ipx(internet packet exchange,internet数据包交换)协议建立通信。winsock接口从在unix平台上实现bsd socket(套接字)中继承了大量的特性。在windows环境中,这种接口演变成一种真正独立于协议的接口。目前winsock有两个主要版本winsock1和winsock2,两者都能在除windows ce之外(windows ce只支持winsock1)的所有windows平台上运行。本系统采用的是winsock2版本。4.3.2 socket简介网络的socket数据传输是一种特殊的i/o,socket也是一种文件描述符。socket接口是tcp/ip网络的api,socket接口定义了许多函数或例程,程序员可以用它们来开发tcp/ip网络上的应用程序。要学internet上的tcp/ip网络编程,必须理解socket接口。socket接口设计者最先是将接口放在unix操作系统里面的。如果了解unix系统的输入和输出的话,就很容易了解socket了。网络的 socket数据传输是一种特殊的i/o,socket也是一种文件描述符。socket也具有一个类似于打开文件的函数调用socket(),该函数返回一个整型的socket描述符,随后的连接建立、数据传输等操作都是通过该socket实现的。常用的socket类型有两种:流式socket (sock_stream)和数据报式socket(sock_dgram)。流式是一种面向连接的socket,针对于面向连接的tcp服务应用;数据报式socket是一种无连接的socket,对应于无连接的udp服务应用。常用的套接字模式有阻塞式和非阻塞式。阻塞函数在完成其指定的任务以前不允许程序调用另一个函数。例如,程序执行一个读数据的函数调用时,在此函数完成读操作以前将不会执行下一程序语句。当服务器运行到accept语句时,而没有客户连接服务请求到来,服务器就会停止在accept语句上等待连接服务请求的到来。这种情况称为阻塞 (blocking)。而非阻塞操作则可以立即完成。比如,如果你希望服务器仅仅注意检查是否有客户在等待连接,有就接受连接,否则就继续做其他事情,则 可以通过将socket设置为非阻塞方式来实现。非阻塞socket在没有客户在等待时就使accept调用立即返回。 通过设置socket为非阻塞方式,可以实现 轮询若干socket。当企图从一个没有数据等待处理的非阻塞socket读入数据时,函数将立即返回,返回值为-1,并置errno值为ewouldblock。但是这种轮询会使cpu处于忙等待方式,从而降低性能,浪费系统资源。而调用 select()会有效地解决这个问题,它允许你把进程本身挂起来,而同时使系统内核监听所要求的一组文件描述符的任何活动,只要确认在任何被监控的文件描述符上出现活动,select()调用将返回指示该文件描述符已准备好的信息,从而实现了为进程选出随机的变化,而不必由进程本身对输入进行测试而浪费 cpu开销。本系统的套接字模式采用阻塞式。4.3.3 多线程简介(1) 内核对象 1)内核对象的概念内核对象是内核分配的一个内存块,这种内存块是一个数据结构,表示内核对象的各种特征。并且只能由内核来访问。应用程序若需要访问内核对象,需要通过操作系统提供的函数来进行,不能直接访问内核对象(windows从安全性方面来考虑的)。内核对象通过create*来创建,返回一个用于标识内核对象的句柄,这些句柄(而不是内核对象)可在创建进程范围内使用,不能够被传递到其他进程中被使用。2)内核对象使用的计数 因为内核对象的所有者是内核,而不是进程,所以何时撤销内核对象由内核决定,而内核做这个决定的依据就是该内核对象是否仍然被使用。那么如何判断内核对象是否被使用呢?可以通过内核对象的“使用计数”属性,一旦这个值变成0了,内核就可以释放该对象了。3)创建内核对象进程与句柄表每个进程在初始化的时候,将被分配一个句柄表,该句柄表中只存储内核对象的句柄,不存储用户对象的句柄。句柄表的详细结构微软没有公布,但是大致包含三个内容:内核对象句柄,内核对象地址,访问屏蔽标志。为何要将内核对象的句柄设置为进程相关的呢?理由有: u 不同的进程对内核对象的访问权限是不同的,有必要区分对待。u 如果句柄是全局的,则一个进程可以控制另外一个进程的句柄,破坏另外一个进程的句柄。创建内核对象及操作系统内部机制利用createsomeobject的函数来创建内核对象。调用该函数的时候内核就为该对象分配一个内存块,并进行初始化,然后内核再扫描该进程的句柄表,初始化一条记录并放在句柄表中。进程中使用内核对象的内部机制假设函数f使用某个内核对象,其参数为handle1,则该函数内部需要查找该进程的句柄表,找出参数句柄对应的记录,然后才能使用该内核对象。4)关闭内核对象 无论进程怎样创建内核对象,在不使用该对象的时候都应当通过bool closehandle(handle hobj)来向操作系统声明结束对该对象的访问。为什么叫声明呢?是因为此时也许还有其他进程对该对象的访问,操作系统可能并不立即释放该对象。操作系统需要做的是:从进程的句柄表中删除该内核对象的记录,另外再考察该内核对象的使用计数以决定是否需要释放该对象。(2) 线程1)线程的一般概念 进程只是线程的容器,从来不执行任何东西。线程总是在某个进程中被创建。线程在进程的地址空间中执行代码。线程们共享进程中的所有内核对象。2) 线程的创建handle createthread( psecurity_attributes psa, 线程句柄的安全属性,比如子进程是否可以继承这个线程句柄,一般情况设置为null dword cbstack, 线程栈大小,一般取0表示默认大小pthread_start_routine pfnstartaddr, 线程入口函数 pvoid pvparam, 线程入口函数的参数 dword fdwcreate, 控制线程创建的标志一般为0,表示线程立即启动。如果你想创建之后把线程挂起create_suspended pdword pdwthreadid 是线程id返回值);createthread调用的内核行为调用createthread后,os进行如下几个动作: 生成一个线程内核对象。 在进程空间内为线程分配堆栈空间。因为线程的环境同于其所在进程的环境,所以创建的线程可以访问进程中的所有资源,包括线程中所有的内核对象。3)线程的消亡终止线程的方式 方式一:线程函数返回(最好使用这个方式,可以保证:线程种创建的c+对象正常析构;os释放线程堆栈内存;os将线程的退出码设置为线程函数的返回值;系统将递减该线程内核对象的的使用计数器。方式二:调用exitthread(不能释放c+对象,所以最好不要使用这个方式。另外,如果非要调用也应当调用编译器推荐的,如_endthread)。方式三:同进程内的其他线程(包括主线程)调用terminatethread(被撤销线程得不到通知,不能释放资源,尽量避免这种方式。另外这个函数是个异步函数,返回时,线程不保证已经被撤销,如果要观察线程是否被撤销,应当使用waitforsingleobject)方式四:包含线程的进程终止(应当避免这种方式)线程退出时os的行为 线程内的所有用户对象被释放。 线程的退出码从still_active改为传递给exitthread或terminatethread的代码。 线程内核对象的状态改为“已通知”。 如果线程为进程中的最后一个线程,则os将进程当作已终止运行。 线程内核对象的引用计数器减1(一旦线程终止了,其他引用该线程内核对象将不能够处理该线程的句柄,但是可以通过调用getexitcodethread来检查hthread代表的线程是否已经终止运行了。)第5章 系统实现5.1 实现过程由于本系统采用的c/s架构,利用winsock2进行编程,所以在实现服务器端和客户端的功能的时候需要创建一些必须的头文件和加载相应的库文件。winsock2编程时,只需要包winsock2.h包含在应用程序中。形如:#include 。在编译采用了winsock2.h的应用程序时,须链接到ws2_32.lib库(详见图5-1)。一旦包含了必需的头文件和链接环境,就可以开始编写以编写应用程序代码了。图5-1 添加ws2_32.lib库到链接库5.1.1 服务器端实现过程通过对本系统的需求分析、概要设计、详细设计和关键技术的学习,现着手实现服务器端。服务器端的程序基本结构图,详见图5-2。图5-2服务器端的程序基本结构图5.1.1.1 网络连接模块 本系统采用的是面向连接的通信,其基本流程如下图:图5-3 服务器端流程其程序摘要如下:/ initialize winsockerrvalue = wsastartup(makeword(2, 2), &wsd); if (0 != errvalue)printf(could not find a usable winsock dll.nwill exit the system.n);return wininitfail; /create and set socket configurationsever_socket = socket(af_inet, sock_stream, 0);if (invalid_socket = sever_socket) printf(create socket error:%d.nwill exit the system.n, wsagetlasterror();closesocket(sever_socket);wsacleanup();return createsocfail; my_addr.sin_family = af_inet; my_addr.sin_port = htons(servport); my_addr.sin_addr.s_addr = inet_addr(ipaddress); /use bind() make socket and the machine will address and a local port bindingbindret = bind(sever_socket, (struct sockaddr *)&my_addr, sizeof(struct sockaddr);if (socket_error = bindret) printf(bind error.error no:%dtwill exit the system.n, wsagetlasterror();closesocket(sever_socket);wsacleanup();return bindfail; /listen the portlistenret = listen(sever_socket, somaxconn);if (socket_error = listenret) printf(listen error.error no:%dtwill exit the system.n, wsagetlasterror();closesocket(sever_socket);wsacleanup();return listenfail; 5.1.1.2 功能模块的实现细节(以查找为例)(1)创建新的线程child_thread = createthread(null, 0, (lpthread_start_routine)matchthread, (lpvoid)client_socket, 0, null);(2)接收用户发送的请求包recvret= recv(client_socket, (char *)&pack, buflen, 0);(3)判断接收到的数据长度是否合法recvlen = pack.len + sizeof(unsigned int)*3 + sizeof(unsigned short)* 1 + sizeof(char) *2 ;if(recvret != recvlen )(4)解析请求包的内容,根据不同情况进行处理switch(pack.type) case row_info :matchstrret = matchstr(pack, &respack, sub_str);/search is beginingif(ok = matchstrret)sendret = sendpack(client_socket,respack);将结果返回给客户端.else .break;case sub_info :printf(the search string has comed!n);strncpy(sub_str, pack.messsge, pack.len);sub_strpack.len = 0;break;default: .图5-4线程内处理函数调用图(5)打印提示信息,退出线程closehandle(child_thread);(6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年溴氨蓝合作协议书
- 历史文化遗址保护知识点总结卷
- 2025年高品质溴氨酸合作协议书
- 2025年吸污车项目合作计划书
- 知识产权转让与保密协议要求规范
- 酒店客房用品进销存管理软件服务协议
- 2025年道路货物运输服务项目建议书
- 2025年钢材:一级钢合作协议书
- 影视制作与发行合作协议概要
- 网络安全防护方案实战演练试卷
- 水务公司笔试题目及答案
- 延安通和电业有限责任公司招聘真题2024
- 2025年北京市西城区高三二模生物试卷(含答案)
- 病媒生物防治试题及答案
- 正定古城介绍课件
- 2025届浙江省学军、镇海等名校高考英语二模试卷含解析
- 2024年陕西省城固县事业单位公开招聘医疗卫生岗笔试题带答案
- 2025-2030功能性饮料项目商业计划书
- 2025年公共文化服务管理考试试题及答案
- 致敬英雄张富清
- 2025江苏无锡宜兴市国资本投资控股集团限公司招聘工作人员10人易考易错模拟试题(共500题)试卷后附参考答案
评论
0/150
提交评论