详细设计说明书Word下载.docx
- 文档编号:20851928
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:13
- 大小:116.51KB
详细设计说明书Word下载.docx
《详细设计说明书Word下载.docx》由会员分享,可在线阅读,更多相关《详细设计说明书Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
3.3各个目录的情况简介5
4本项目用到的相关技术和知识点13
5涉及到的技术难点:
13
1引言
当今社会,人们的信息越来越多,也越来越重要,人们对信息的安全和保护的意识也越来越高。
为了能给人们的重要信息提供备份和保护,我们准备开发一套“分布式的文件收集备份系统”,这个系统包括服务端和客户端两大方面,客户端用来监控和发送信息,服务端用来接收和保护信息,这套系统将起到对重要文件的自动采集与备份的作用,让人们不再为重要信息的丢失而担心。
1.1编写的目的
本文档将对《分布式文件收集备份系统》软件开发详细设计进行描述,本文档的读者是程序员、项目策划、设计和评审人员。
1.2背景说明
a.待开发的软件系统的名称:
《分布式文件收集备份系统》
b.本项目的任务提出者:
本项目组
c.开发者单位:
河北工程大学科信学院计算机科学与技术1班
d.开发者:
王鹏,刘延召,陆桂华,姚晓媛,张荣荣
1.3定义
流程图:
表示生产过程中事物各个环节进行顺序的简图。
功能结构图:
将系统的功能进行分解,按功能从属关系表示的图表。
管理信息系统的各子系统可以看作是系统目标下层的功能,对其中每项功能还可以继续分解为第三层、第四层……甚至更多的功能。
1.4参考资料
[1]《Unix环境高级编程》------------------W.RichardStevens著
[2]《Unix网络编程,卷1》----------------W.RichardStevens著
[3]《C语言程序设计》-------------------BrianW.Kernighan,DennisM.Ritchie著
[4]《计算机网络·
第五版》-------谢希仁著
2总体设计
2.1功能规定
功能简介:
在客户端实现对客户重要信息的监控和发送,客户端要保证监控到客户所有重要信息,不出错,保证对信息的传出速度要快,保证程序的健壮性,安全性。
在服务端实现对分布式客户端信息的采集,接收和备份保护,服务端要保证能够实现对N台客户端的负载,并发处理客户端的请求,提高对N台客户端的处理速度,保证程序的健壮性和安全性。
2.2运行环境
2.2.1设备
硬件最低要求:
内存256MB以上,硬盘40MB以上。
2.2.2支持软件操作系统及编程工具:
(1)linux操作系统
(2)gcc编译器
(3)vim编辑器
(4)支持makefile
(5)支持网络功能
3系统实现----详细编程计划
3.1程序流程图
以上是本次项目的程序的大致流程图,这是目前的设计状况,如果有需求变化,我们还可以改进
3.2主要模块
本系统将主要分为服务端和客户端两大模块,服务端与客户端运行时是独立的,互不干扰的,所以他们分别在不同的文件夹下,计划设计为如下:
-------------------------------------------------------------
有两个目录分别是:
(1)Client目录-------负责客户端的程序
(2)Server目录-------负责服务端的程序
还有一个目录:
sync_file---------负责日志文件的处理工作:
-------------------------------------------------------------------------------------------
3.3各个目录的情况简介
下面对各个目录的情况进行简要分析:
3.3.1client目录:
在client目录中,将会有以下文件:
——————————————————————————————
下面对这些文件的作用进行进行简要讲解:
(1)check_send_file.h中是对监控系统函数的定义,主要有以下函数的定义
他们实现了监控系统的主要工作。
(2)监控系统的实现,将使用linux的inotify事件监控机制。
Inotify是文件系统事件监控机制,计划包含在即将发布的Linux内核中作为dnotify的有效替代。
dnotify是较早内核支持的文件监控机制。
Inotify是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能。
使用inotify取代dnotify的原因有很多。
第一个原因是,dnotify需要您为每个打算监控是否发生改变的目录打开一个文件描述符。
当同时监控多个目录时,这会消耗大量的资源,因为有可能达到每个进程的文件描述符限制。
Inotify的使用并不是很难,所以我们借助它来实现我们的监控系统。
(3)check_send_file.c中是以上函数的实现。
函数的实现将在下一学期完成。
(4)send_file.h,它里面将定义用来打包和发送文件信息的函数。
它将主要有以下内容:
Fill_packet()函数负责信息的打包,打包时会用到我们自定义的简单协议包。
Send_file()函数用来负责对信息的发送,它将用到x_socket.h中定义的接口函数。
在概要设计书中,已有信息打包和发送的过程,下面再次对信息的打包和解包进行简要介绍:
协议包的定义如下:
_________________________________________________________
||||
|packet_length|data_type|data|
|---------------------------------------------------------|
Packet_length的数据类型是int型,在32位系统下,占4个字节
Data_type的数据类型是short型,在32位系统下,占2个字节
Packet_length的意思是整个包体的长度。
Data_type的意思是data的类型,Data_type主要有四种,分别是:
TYPE_FILE_NAME,代表文件名
TYPE_FILE_SIZE,代表文件的大小
TYPE_FILE_CONTENT,代表文件内容
TYPE_FILE_END,代表文件结束
下面列举一个完整的打包发送,和解包的过程,让大家了解打包发送信息的流程。
比如,一个名称为file.txt的文件,其中的内容是“hello”。
那么,将这个文件发送到服务器的步骤是(注意:
我们每次向服务器发送内容,都是先将信息打包再发送,让后在服务器端,会有相应的方式解包):
a.将“file.txt”打包,打包后整个包体的内容包括:
packet_length,data_type和data。
packet_length的值是4加2再加上“file.txt”所占的字节数
data_type的值是TYPE_FILE_NAME
Data的值是“file.txt”
这样,信息“file.txt”就被打包好了,然后,会使用socket系列API,经过网络将其发送到服务器端。
当服务端收到这些信息后,它通过解包就会明白,它收到的这个信息是一个文件的文件名,服务端将会创建出子进程,让子进程去创建一个名为“file.txt”的空文件。
而父进程会继续监听其它客户端的连接。
b.将文件的大小发送过去,文件的内容是“hello”,文件的大小便是“hello”所占的字节数,假如是大小N。
将数字N打包后整个包体的内容包括:
packet_length,data_type和data。
packet_length的值是4加2再加上数字“N”所占的字节数
data_type的值是TYPE_FILE_SIZE
Data的值是“N”
这样,信息“N”就被打包好了,然后,使用socket系列API,经过网络将其发送到服务器端。
当服务端收到这些信息后,它通过解包就会明白,这是文件的大小,这样服务器就知道了它要备份的文件的大小。
c.将文件的内容发送过去,文件的内容是“hello”
将“hello”打包后整个包体的内容包括:
packet_length,data_type和data。
packet_length的值是4加2再加上“hello”所占的字节数
data_type的值是TYPE_FILE_CONTENT
Data的值是“hello”
这样,信息“hello”就被打包好了,然后,使用socket系列API经过网络将其发送到服务器端。
当服务端收到这些信息后,它通过解包就会明白,这是文件的内容,内容是“hello”,这时服务端就会将此内容写在刚才建立的名为“file.txt”的空文件中。
d.发送一个结束标志--TYPE_FILE_END,表示这个文件的全部信息已经发送完。
发送结束标志只发送包头即可,因为没有内容,也就没有包体。
此次要发送的包的内容包括:
packet_length,data_type
(注意,这里没有data)
packet_length的值是4加2
data_type的值是TYPE_FILE_END
当服务端收到这些信息后,它通过解包就会明白,一次完整的文件接收备份过程已经完成。
此时,服务器将释放本次工作用到的相关系统资源。
以上详细说明了一个文件在客户端打包发送,并在服务端进行解包备份的全过程。
这四步全部完成后,表示整个文件的所有信息发送完毕,这样一个重要的文件也就成功的备份到服务端。
(5)send_file.c,这里边将是以上函数的实现,下学期,我们将会对其进行实现。
(6)x_socket.h,我们将对socket系列API进行封装使用,这里是socket系列函数封装后的定义,它会完成客户端与服务端的连接,信息发送与接收,和网络优化等工作。
它的内容将会是如下:
——————————————————————————————————
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。
要学Internet上的TCP/IP网络编程,必须理解Socket接口。
Socket接口设计者最先是将接口放在Unix操作系统里面的。
如果了解Unix系统的输入和输出的话,就很容易了解Socket了。
网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。
Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
关于linux/unix平台下的网络编程相关内容,我们主要参考了《Unix网络编程》本书,有兴趣学习,或想了解的同学,可以参考这本书。
(7)x_socket.c,这里将是以上函数的具体实现,我们将在下一学期完成。
(8)client.c,这里是整个客户端程序的逻辑流程,最后的客户端可执行程序,就由它来生成。
具体实现,我们将在下一学期完成。
(9)makefile,makefile文件会把整个项目的所有文件的逻辑关系,和依赖关系及编译方法,写清楚。
Makefile可以很复杂,也可以很简单。
具体的实现,我们下一学期,视情况而定。
以上,是client目录的情况,下面介绍server目录的情况。
3.2.2Server目录情况简介:
下面对各个文件进行简单介绍:
(1)x_socket.h和x_socket.c在介绍client目录时,已经介绍,它们的作用是对socket系列函数的封装和使用,负责网络和网络优化的工作。
这里不再做过多的介绍。
(2)recv_file.h,它负责接收客户端发来的信息,并解包和备份文件。
它的主要内容将主要有以下内容:
recv_file.c,它里边是对recv_file.h头文件中内容的实现,我问将在下一学期给出集体的实现过程。
(4)my_lib.h中是一些辅助处理细节的函数,比如守护进程的编写,等等。
(5)my_lib.c中是对my_lib.h中所定义的内容的实现,具体实现,我们将在下一学期给出来。
server.c,这里是整个服务端程序的逻辑流程,最后的服务端可执行程序,就由它来生成。
在它里边会有“并发服务器”的实现过程,能够同时为N台客户端服务,提高服务器的负载能力。
(7)makefile,makefile文件会把整个项目的所有文件的逻辑关系,和依赖关系及编译方法,写清楚。
3.2.3sync_file目录的情况如下:
其实就是一个小型的日志库,
本目录的内容,重要负责日志系统的相关实现,负责记录整个系统的运行情况,用户可以通过查看日志文件的内容,来了解系统的运行情况,系统是否出错等信息。
在客户端与服务端都会这个日志库,来分别记录客户端与服务端的运行情况。
一个稍微大型的日志库设计,就是一个不小的项目,需要顾及到很多方面。
在正真的工作当中,可能也不需要自己来编写日志库,因为有现成的或开源的日志库可用。
但也可能现有的日志库的性能不是太好,因为它是开源的,我们也可以根据下需要,去修改它,来方便自己的使用。
我们编写的这个小日志库,会实现最基本的日志需要,如果时间充足的话,我们可以再扩展这个日志库,使其能够应对更加多变的情况。
目前,这个小日志库的设计如下:
以上是主要的日志函数的定义。
在x_log.c中将是以上函数的具体实现,详细的实现的过程,将在下一学期给出。
3.2.4配置文件
除了以上的内容,还有一个模块是配置文件的模块。
配置文件是在系统运行之前,用户对系统的配置,客户端与服务端都将会有配置文件。
常用的配置文件的格式主要有ini格式的,xml格式的,和json格式的等。
我们将选择其中一种来实现配置文件。
客户端需要的配置项主要有:
(1)服务器的ip地址。
(2)所监控的目录。
(3)日志文件存放的地方等。
服务端需要的配置项主要有:
(1)接收到的客户端的文件的存放的地方。
(2)日志文件存放的地方等。
下一学期,我们会给出配置文件的具体实现。
说明:
因为我们这套软件是在linux系统下做的开发,而在linux平台,大部分的操作都是命令行的,所以不需要有什么界面,因此,我们的这套系统,也没有设计什么用户界面,只需要在命令行中敲入简单的命令即可使用。
4本项目用到的相关技术和知识点
(1)c语言程序设计
(2)linux/unix开发平台的运用
(3)makefile的编写
(4)多进程程序的开发
(5)linux/unix文件目录的操作
(6)信号的控制和使用
(7)S/C模式的应用软件开发
(8)并发服务器的编写
(9)守护进程原理及其编写
(10)socket网络编程
(11)日志系统编写
(12)监控系统
(13)简单的引用层协议的设计
(14)配置文件编写
(1)怎样让一个服务器去应付成千上万的客户端的连接,怎样让服务器能够承受更大的负荷压力?
(2)怎样可以对网路的传输速度进行优化,使得文件在传输的过程中更快?
(3)怎样让服务器更加健壮,能够应付多样的突发事件,怎样编写高性能服务器?
(4)怎样让CPU的利用率降下来?
即让我们的程序占用最少的系统资源,去完成更多的工作?
(5)怎样保证客户端程序的健壮性,保证监控系统的健壮性?
(6)等等
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 详细 设计 说明书
![提示](https://static.bdocx.com/images/bang_tan.gif)