安全文件传输系统的设计与实现

  • 格式:docx
  • 大小:243.40 KB
  • 文档页数:11

下载文档原格式

  / 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

安全文件传输系统的设计与实现

院系:计算机与通信工程学院

班级:嵌入式软件10-01

姓名:

学号:*****

指导老师:陈晓雷老师

1.安全文件传输系统的软件设计框架

安全文件传输系统由硬件和软件两部分组成。硬件部分可以是普通的安装Linux操作系统的PC机,也可以是嵌入式系统。本系统的硬件实现平台是S3C2440嵌入式开发板。

现代网络通信中,大部分网络协议的实现都由客户端(Client)和服务器端(Server)来协作完成。这种模型本质上涉及两个不同的程序,通常这两个程序在不同机器上运行,这些机器之间都有网络连接。服务器端程序提供服务并对来自客户程序的请求作成响应。而客户端程序则是在使用者和服务器端程序之间建立某种沟通的渠道,或者是作为使用服务器端提供的某种网络服务的工具。

本文传输过程也是通过客户端和服务器端来实现,软件实现的总体框图如图:

系统使用C和C++程序编写,支持将每个文件的元数据进行存储;支持从服务器中获取文件的元数据;服务器是多线程的,能够允许多个客户端同时连接;并且记录文件操作事件日志,能够支持用户名和密码的验证;客户端是QT应用程序,具有上传和下载两种能力,并且

为了确保上传和下载是否成功,先检查碰盘空间。系统的数据流如图:

服务器端是数据流向的交汇点,也是系统数据存储的资源池。各个客户端发起连接请求,服务端利用进程并发技术,相应多个客户端的请求。因此服务端主要完成两个任务,检查客户端是否成功登录,以及判断客户端发来的信号,对该信号进行相应。

客户端是每个应用终端的实现方式也是外在表现,它主要包括:登录交互平台、检查信息是否完整喝客户端主窗口的配置。用户根据自己的需要在成功登录系统以后,可以向服务器发出命令。可以发出的命令包括:服务器List显示、服务器端List刷新、上传文件、下载文件、客户端List显示。

系统的内部设计是通过socket套接字建立连接,socket在所有的网络操作系统和网络应用程序中都是必不可少的,它是网络通信中应用进程和网络协议之间的接口。在Linux操作系统中,socket属于文件系统中的一部分,网络通信可以被看作是对文件系统的读取。这就

使得用户对网络的控制,像对文件的控制一样方便。Socket网络通信同样也分为服务器端和客户端两部分。

2.安全文件传输系统的服务器端设计

服务器端的作用是响应用户连接请求,验证用户,对取到的命令进行解析,根据命令执行不同的操作。根据输入的文件名打开文件并将文件数据读入缓冲区;将缓冲区内的数据写入文件。并且对接收到的协议包解封,将数据缓冲区中的数据进行封装。服务器端内部设计流程图如图:

服务器端内部设计主要用到的连接函数有:

(1) int socket(int family, int type, int protocol)

该函数用于建立一个socket连接,可指定socket类型等信息。在建立了socket连接之后,可对socketadd或sockaddr_in进行初始化,

以保存所建立的socket信息。

(2) int bind(int sockfd, struct sockaddr *my_addr, int addrlen)

该函数是用于将本地IP地址绑定端口号的,若绑定其他地址则不能成功。另外,它主要用于TCP的连接,而在UDP的连接中则无必要。本文基于TCP连接。

(3) int listen(int sockfd, int backlog)

该函数用于通知内核,服务器将在某个套接口上监听并接受连接。

(4) int accept(int sockfd, void *addr, int *addrlen)

该函数的作用是,当其被调用时,服务器端的程序会一直拥塞直到有一个客户程序发出了连接。

accept()

调用成功时,返回连接进来的客户机的文件描述符,之后服务器端就可以利用该描述符向客户机读写信息了,失败时返回-1.

(5)int send(int sockfd, const void *msg, int len, unsigned int flags) 和int recv(int sockfd, void *buf, int len, unsigned int flags) 这两个函数是在建立连接后用于完成发送与接收数据的系统调用。

3.安全文件传输系统的客户端设计

客户端的作用是通过输入IP,port向服务器发起请求连接,然后将用户名和密码发给服务器进行验证,验证通过后通过选中客户端本地的目录来查看该目录下的文件列表,上传的时候根据输入的文件名找到文件并将文件数据读入缓冲区,下载的时候从保存有文件数据的缓冲区取出数据写入本地磁盘。客户端在上传文件的时候将得到的文件数据缓冲区中的数据封装到协议包,下载文件的时侯根据得到的协议包解析出其中包含的文件有效数据。客户端内部设计流程图:

客户端内部设计主要用到的连接函数有:

(1) int socket(int family, int type, int protocol)

该函数的作用同服务器端socket()函数,用于建立socket

连接。

(2) int bind(int sockfd, struct sockaddr *my_addr, int addrlen)

该函数的作用同服务器端bind()函数,用于将本地IP地址绑定端口号。

(3) int connect(int sockfd, struct sockaddr *serv_addr, int addrlen)

该函数用于与服务器端建立连接。

(4) int send(int sockfd, const void *msg, int len, unsigned int flags) 和int recv(int sockfd, void *buf, int len, unsigned int flags)

这两个函数是在建立连接后用于完成发送与接收数据的系统调用。

系统的通信流程是:首先在服务器端使用socket()建立一个通信的断点,再用bind()命令把一个地址绑定到这个端点,然后,服务器端使用listen()侦听连接请求。当远程的客户机试图使用connect() 连接listen()正在监听的端口时,连接将会在请求队列中等待,直到服务器使用accept()处理了连接请求后,将会产生一个新的描述这个连接端口的套接字,利用这个套接字旧可以发送或接收数据了。如果listen()一直没有侦听到连接请求,那么服务器任务就会在accept()处阻塞,直到有连接请求到来。对于客户任务来说,它也需