免费预览已结束,剩余26页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕 业 论 文论文题目: 一个基于linux 的ftp系统 专 业: 嵌入式 指导老师: 作者姓名: 学 号: 信息工程系2011年 12 月 25 日摘 要ftp(file transfer protocol, ftp)是tcp/ip网络上两台计算机传送文件的协议,ftp是在tcp/ip网络和internet上最早使用的协议之一,它属于网络协议组的应用层。ftp客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录等功能。虽然这是一个小型的ftp程序,但它基本上实现了ftp所具有的功能。它是在任何linux系列的系统上运行,用linux gcc 编译工具。为了测试,ftp 服务器端和客户端都要实现。ftp协议是一款基于tcp/ip的协议tcp是面向连接的可靠地一个协议。为什么会有ftp呢?由于网络的带宽及各种服务的限制,单纯从页面上下载显得又慢又不可靠,所以就有许多ftp工具提供出来。从根本上说,ftp就是在网络中各种不同的计算机之间按照tcp/ip协议来传输文件。ftp采用的是现在流行的client/server模式,由ftp客户端和ftp服务器端程序组成。通常服务器端是远程端点,用户可以通过internet网络连接到远程的ftp服务器站点。服务器的功能是主要的。只有当ftp服务器支持各种协议和指令时,才能够开发相应的客户端程序。下面就是整个ftp项目的设置思路。abstractftp (file transfer protocol, ftp), the two computers to transfer files in the tcp / ip network protocol, ftp is one of the earliest protocol used in tcp / ip network and internet, it belongs to the application layer of the network protocol suite. ftp client can issue commands to the server to download files, upload files, create or change directories on the server. although this is a small ftp program, but it basically has ftp. it is running on any linux series system, use the linux the gcc compiler tool. in order to test the ftp server and client to be realized. the ftp protocol is a tcp / ip-based protocol tcp is connection-oriented reliable to an agreement. why is there a ftp? network bandwidth and service limitations, a simple download from the page is slow and unreliable, so there are many ftp tools. fundamentally speaking, the ftp is a variety of network between computers in accordance with the tcp / ip protocol to transfer files. ftp is a popular client / server model, consisting of an ftp client and ftp server-side programs. usually server-side remote endpoint, users can connect through the internet network to a remote ftp server site. the servers main function is. only when the ftp server supports various protocols and instructions to be able to develop appropriate client program. here is the entire set of ftp projects ideas.目录摘 要2abstract2目录3第一章ftp 协议与原理31.1ftp 协议41.2ftp 工作原理51.3ftp 权限管理61.4ftp的传输有两种方式71.5ftp的工作方式71.6该程序服务器端实现的的命令8第二章开发环境及工具介绍92.1 c 语言和socket机制92.2如何开发一个server-client模型的程序112.3常用的socket类型122.4项目用到的socket函数和编译环境15第三章 ftp 服务器与客户端需求分析16第四章 系统设计与实现194.1.软件总体分析与设计194.2.各模块具体设计19第五章 系统测试285.1系统可能出现的问题与不足285.2采用的测试类型295.3测试的过程与结果分析29结论29参考文献30致谢31第一章 ftp 协议与原理1.1ftp 协议ftp(file transfer protocol),是文件传输协议的简称。用于internet上的控制文件的双向传输。同时,它也是一个应用程序(application)。用户可以通过它把自己的pc机与世界各地所有运行ftp协议的服务器相连,访问服务器上的大量程序和信息。正如其名所示:ftp的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着ftp服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。ftp 是 tcp/ip 协议组中的协议之一,是英文file transfer protocol的缩写。该协议是internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,ftp就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载(download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。在tcp/ip协议中,ftp标准命令tcp端口号为21,port方式数据端口为20。从根本上说,ftp协议就是在网络中各种不同的计算机之间按照tcp/ip协议来传输文件。ftp协议采用客户机/服务器 (client/sever)模式,由ftp客户端程序和ftp服务器端程序组成。使用时,先启动ftp客户端程序与远程主机建立连接,然后向远程主机发出传输命令,远程主机在收到命令后就给予响应,并执行正确的命令。但是ftp有一个根本的限制,那就是,如果用户在某个主机上没有注册获得授权,即没有用户名和口令,就不能与该主机进行文件传输。但匿名ftp服务器除外,它能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户名“anonymous”或“guest”就可有限制地访问远程主机上公开的文件。现在许多系统要求用户将emai1地址作为口令,以便更好地对访问者进行跟踪。出于安全的目的,大部分匿名ftp主机一般只允许远程用户下载(download)文件,而不允许上载(upload)文件。也就是说,用户只能从匿名ftp主机拷贝其需要的文件而不能把文件拷贝到匿名ftp主机。另外,匿名ftp主机还采用了其他一些保护措施以保护自己的文件不至于被用户修改和删除,并防止计算机病毒的侵入。匿名ftp一直是internet上获取信息资源的最主要方式,在internet成千上万的匿名ftp主机中存储着无以计数的文件,这些文件包含了各种各样的信息、数据和软件。人们只要知道特定信息资源的主机地址,就可以用匿名ftp登录。1.2ftp 工作原理拿下载文件为例,当你启动ftp从远程计算机拷贝文件时,你事实上启动了两个程序:一个本地机上的ftp客户程序:它向ftp服务器提出拷贝文件的请求。另一个是启动在远程计算机的上的ftp服务器程序,它响应你的请求把你指定的文件传送到你的计算机中。ftp采用“客户机/服务器”方式,用户端要在自己的本地计算机上安装ftp客户程序。与大多数internet服务一样,ftp也是一个客户机/服务器系统。用户通过一个支持ftp协议的客户机程序,连接到在远程主机上的ftp服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。使用ftp时必须首先登录,在远程主机上获得相应的权限以后,方可上载或下载文件。也就是说,要想同哪一台计算机传送文件,就必须具有哪一台计算机的适当授权。换言之,除非有用户id和口令,否则便无法传送文件。这种情况违背了internet的开放性,internet上的ftp主机何止千万,不可能要求每个用户在每一台主机上都拥有帐号。匿名ftp就是为解决这个问题而产生的。匿名ftp是这样一种机制,用户可通过它连接到远程主机上,并从其下载文件,而无需成为其注册用户。系统管理员建立了一个特殊的用户id,名为anonymous, internet上的任何人在任何地方都可使用该用户id。值得注意的是,匿名ftp不适用于所有internet主机,它只适用于那些提供了这项服务的主机。ftp支持两种模式,一种方式叫做standard(也就是 port方式,主动方式),一种是passive(也就是pasv,被动方式)。standard模式ftp的客户端发送port命令到ftp服务器。passive模式ftp的客户端发送pasv命令到ftp server。主动方式的ftp工作过程:port模式ftp客户端首先和ftp服务器的tcp 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送port命令。port命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的tcp20端口连接至客户端的指定端口发送数据。ftp server必须和客户端建立一个新的连接用来传送数据。针对ftp服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式ftp:1).任何端口到ftp服务器的21端口(客户端初始化的连接sc)。2).ftp服务器的21端口到大于1023的端口(服务器响应客户端的控制端口sc)。3)ftp服务器的20端口到大于1023的端口(服务器端初始化数据连接到客户端的数据端口sc)。4).大于1023端口到ftp服务器的20端口(客户端发送ack响应到服务器的数据端口sc)。1.3ftp 权限管理在考虑ftp服务器安全性工作的时候,第一步要考虑的就是谁可以访问ftp服务器。在vsftpd服务器软件中,默认提供了三类用户。不同的用户对应着不同的权限与操作方式。一类是real帐户。这类用户是指在ftp服务上拥有帐号。当这类用户登录ftp服务器的时候,其默认的主目录就是其帐号命名的目录。但是,其还可以变更到其他目录中去。如系统的主目录等等。第二类帐户实guest用户。在ftp服务器中,我们往往会给不同的部门或者某个特定的用户设置一个帐户。但是,这个账户有个特点,就是其只能够访问自己的主目录。服务器通过这种方式来保障ftp服务上其他文件的安全性。这类帐户,在vsftpd软件中就叫做guest用户。拥有这类用户的帐户,只能够访问其主目录下的目录,而不得访问主目录以外的文件。第三类帐户是anonymous(匿名)用户,这也是我们通常所说的匿名访问。这类用户是指在ftp服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源。在组建ftp服务器的时候,我们就需要根据用户的类型,对用户进行归类。默认情况下,vsftpd服务器会把建立的所有帐户都归属为real用户。但是,这往往不符合企业安全的需要。因为这类用户不仅可以访问自己的主目录,而且,还可以访问其他用户的目录。这就给其他用户所在的空间 带来一定的安全隐患。所以,企业要根据实际情况,修改用户所在的类别。tcp/ip协议中,ftp标准命令tcp端口号为21,port方式数据端口为20。ftp协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问internet, 你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。1.4ftp的传输有两种方式ascii传输模式和二进制数据传输模式。 1)ascii传输方式:假定用户正在拷贝的文件包含的简单ascii码文本,如果在远程机器上运行的不是unix,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。 2)二进制传输模式:在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到windows系统,在对方系统上,此文件不能执行。 如果你在ascii方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ascii方式一般假设每一字符的第一有效位无意义,因为ascii字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。 1.5ftp的工作方式ftp支持两种模式,一种方式叫做standard (也就是 port方式,主动方式),一种是 passive (也就是pasv,被动方式)。 standard模式 ftp的客户端发送 port 命令到ftp服务器。passive模式ftp的客户端发送 pasv命令到 ftp server。 port模式ftp 客户端首先和ftp服务器的tcp 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送port命令。 port命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的tcp 20端口连接至客户端的指定端口发送数据。 ftp server必须和客户端建立一个新的连接用来传送数据。 passive模式在建立控制通道的时候和standard模式类似,但建立连接后发送的不是port命令,而是pasv命令。ftp服务器收到pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接ftp服务器此端口,然后ftp服务器将通过这个端口进行数据的传送,这个时候ftp server不再需要建立一个新的和客户端之间的连接。 很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的ftp服务器不支持pasv模式,因为客户端无法穿过防火墙打开ftp服务器的高端端口;而许多内网的客户端不能用port模式登陆ftp服务器,因为从服务器的tcp 20无法和内部网络的客户端建立一个新的连接,造成无法工作。 1.6该程序服务器端实现的的命令1).user:指用户名,它带一个参数。格式为:user username在登录ftp服务器的时候先用此命令告诉服务器那个用户要登录此服务器。如:user root 此命令是以root用户登录服务器。2).pass:指明与用户名对应的密码,带一个参数。格式为:pass password当服务器收到来自客户端的user命令后,检查其合法后就像客户端发提示信息要求输入密码,客户端这是就可以向服务器发送pass命令加上root用户的密码。服务器检查密码的正确后,客户端就与服务器连接起来了。3).list: pathname参数表示要列文件的目录路径名,若不带参数,刚使用当前目录。此命令会把pathname 路径下的文件或目录按照一定的格式发送给客户端让客户端显示出来。4).quit:由于要求传输文件时有登陆的过程,断开连接到应有相应的注销过程。这个命令就是从服务器上注销的过程,如果服务器收到该命令时,没有文件正在传达室输,刚断开控制,连接如果有文件正在传输,刚控制连接仍然保持,直到收到有关传输结果的应答时,服务器才断开连接。5).load:取得文件这条命令是ftp事务是用得最多的命令,在请求下载文件时都有会用到。6).update:存放文件。7).wywt:请求服务器返回系统类型。8).type:表示文件类型,共有四种,所带参数也有四种,a,e ,i ,l 分别对应ascii,ebcdic,imagb和local类型。格式为:type type9).cmd:请求更改服务器的当前目录这各命令带一个参数,参数表示要更改的目录名。10).dele:请求删除服务器上的文件。11).mko:请求在服务器上新建一个目录,这条命令带一个参数指明要建立的目录名。 12). port:指明数据连接的端口号,带六个参数。格式为:port h1,h2,h3,h4,p1,p213).cat:命令显示某一个文件的内容。使用格式:cat filename 打印filename文件向终端。14).touch:请求在服务器上新建一个文件,这条命令带一个参数指明要建立的文件名。使用格式:touch filename15).pwd:在服务器上显示当前工作目录。16).mv:请求在服务器上为某一个指定的文件或文件夹重命名。17).cp:请求在服务器上拷贝一个目录或文件。使用格式:cp spathname dpathname 第二章开发环境及工具介绍2.1 c 语言和socket机制c语言是在70年代初创建的一种计算机语言,它既有汇编语言可以直接访问机器硬件的功能,又具有高级语言面向用户、可读性好和易于记忆的优点,因此受到广大程序员的欢迎。c是一种结构化的程序设计语言。它由顺序、选择和循环三种基本结构组成,便于实现由上到下、逐步细化的结构化程序设计。因此,用c编写的程序具有容易理解和便于维护的优点。c语言的函数结构有利于程序分割为相对独立的功能模块,为大型软件实现模块化的程序设计创造了条件。该程序是在linux 系列下的c语言开发,主要利用linux c下的api socket编程。socket 通讯机制是一种较原始的通讯机制,通过socket的数据表现出来的形式是原始字节流信息,通讯双方只要在此基础上按照双方约定方式进行数据的格式化和解析处理工作,这样才能完成具体的应用,即实现某种协议的过程。socket可以看成是在两个程序间进行通讯连接的两个端点,一个程序将一段信息写入一个socket中,该socket将这段信息发送给另外一个socket,以便使这段信息能传达到其他程序中。socket有两种主要的工作方式:有连接的和无连接的。有连接方式如流通讯;无连接方式如数据包方式。有连接的socket操作就像一部电话。它们必须建立一个连接和一个呼叫。所有的事情在到达时的顺序与它们出发时的顺序一样。 socket的英文原义是“孔”或“插座”。作为4bds unix的进程通信机制,取后一种意思。通常也称作套接字,用于描述ip地址和端口,是一个通信链的句柄。在internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个socket,并绑定到一个端口上,不同的端口对应于不同的服务。socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。所谓socket通常也称作套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求。以j2sdk-1.3为例,socket和serversocket类库位于java .net包中。serversocket用于服务器端,socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是socket还是serversocket它们的工作都是通过socketimpl类及其子类完成的。重要的socket api:java .net.socket继承于java.lang.object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见jdk-1.3文档。 accept方法用于产生阻塞,直到接受到一个连接,并且返回一个客户端的socket对象实例。阻塞是一个术语,它使程序运行暂时停留在这个地方,直到一个会话产生,然后程序继续;通常阻塞是由循环产生的。 getinputstream方法获得网络连接输入,同时返回一个inputstream对象实例。 getoutputstream方法连接的另一端将得到输入,同时返回一个outputstream对象实例。注意:其中getinputstream和getoutputstream方法均可能会产生一个ioexception,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。 服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。 客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。2.2如何开发一个server-client模型的程序开发原理: 服务器,使用serversocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。 客户端,使用socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。 socket接口是tcp/ip网络的api,socket接口定义了许多函数或例程,程序员可以用它们来开发tcp/ip网络上的应用程序。要学internet上的tcp/ip网络编程,必须理解socket接口。socket接口设计者最先是将接口放在unix操作系统里面的。如果了解unix系统的输入和输出的话,就很容易了解socket了。网络的socket数据传输是一种特殊的i/o,socket也是一种文件描述符。socket也具有一个类似于打开文件的函数调用socket(),该函数返回一个整型的socket描述符,随后的连接建立、数据传输等操作都是通过该socket实现的。server-client模型: 2.3常用的socket类型有两种:流式socket(sock_stream)和数据报式socket(sock_dgram)。流式是一种面向连接的socket,针对于面向连接的tcp服务应用;数据报式socket是一种无连接的socket,对应于无连接的udp服务应用。socket为了建立socket,程序可以调用socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:int socket(int domain,int type,int protocol);domain指明所使用的协议族,通常为pf_inet,(其与addrinfo 里的 af_inet在现在看来是相同的。只是历史上人们曾构想将af(地址家族address family)与pf(protocol family 协议家族)分开,但实际上这种区分并未真正推广,所以现在af_inet和pf_inet具有相同的意义。其中af_inet是基于ipv4而pf_inet基于ipv6)表示互联网协议族(tcp/ip协议族);type参数指定socket的类型:sock_stream 或sock_dgram,socket接口还定义了原始socket(sock_raw),允许程序使用低层协议;protocol通常赋值0。socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用socket函数时,socket执行体将建立一个socket,实际上建立一个socket意味着为一个socket数据结构分配存储空间。socket执行体为你管理描述符表。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。socket数据结构中包含这五种信息。socket在测量软件中的使用也很广泛 。linux支持多种类型的套接口,也叫做套接口寻址族,这是因为每种类型的套接口都有自己的寻址方法。linux支持以下的套接口类型: unix unix域套接口 inet internet地址族tcp/ip协议支持通信。 ax25 amateur radio x25 ipx novell ipx apple talk appletalk ddp x25 x25 这些类型的套接口代表各种不同的连接服务。 linux的bsd套接口支持下面的几种套接口类型: 1、流式(stream) 这些套接口提供了可靠的双向顺序数据流连接。它们可以保证数据传输中的完整性、正确性和单一性。i n e t寻址族中的t c p协议支持这种类型的套接口。 2、数据报(datagram) 这种类型的套接口也可以像流式套接口一样提供双向的数据传输,但它们不能保证传输的数据一定能够到达目的节点。即使数据能够到达,也无法保证数据以正确的顺序到达以及数据的单一性、正确性。udp协议支持这种类型的套接口。 3、原始(raw) 这种类型的套接口允许进程直接存取下层的协议。 4、可靠递送消息(reliable delivered messages) 这种套接口和数据报套接口一样,只能保证数据的到达。 5、顺序数据包(sequenced packets) 这种套接口和流式套接口相同,除了数据包的大小是固定的。 6、数据包(packet) 这不是标准的bsd 套接口类型,而是linux 中的一种扩展。它允许进程直接存取设备层的数据包。 利用套接口进行通信的进程使用的是客户机/服务器模式。服务器用来提供服务,而客户机可以使用服务器提供的服务,就像一个提供w e b页服务的we b服务器和一个读取并浏览web页的浏览器。服务器首先创建一个套接口,然后给它指定一个名字。名字的形式取决于套接口的地址族,事实上也就是服务器的当地地址。系统使用数据结构sockaddr来指定套接口的名字和地址。一个inet 套接口可以包括一个i p端口地址。你可以在/etc/services中查看已经注册的端口号,例如,一个web页面服务器的端口号是80。在服务器指定套接口的地址以后,它将监听和此地址有关的连接请求。请求的发起者,也就是客户机,将会创建一个套接口,然后再创建连接请求,并指定服务器的目的地址。对于一个inet 套接口来说,服务器的地址就是它的i p地址和端口号。这些连接请求必须通过各种协议层,然后等待服务器的监听套接口。一旦服务器接收到了连接请求,它将接受或者拒绝这个请求。如果服务器接受了连接请求,它将创建一个新的套接口。一旦服务器使用一个套接口来监听连接请求,它就不能使用同样的套接口来支持连接。当连接建立起来以后,连接的两端都可以发送和接收数据。最后,当不再需要此连接时,可以关闭此连接。 使用bsd套接口的确切含义在于套接口所使用的地址族。设置一个tcp/ip连接就和设置一个业余无线电x.25连接有很大的不同。和vfs一样,linux从bsd 套接口协议层中抽象出了套接口界面,此界面负责和各种不同的应用程序之间进行通信。内核初始化时,内核中的各个不同的地址族将会在bsd 套接口界面中登记。稍后当应用程序创建和使用bsd 套接口时,就将会在bsd 套接口和它支持的地址族之间建立一个连接。此连接是通过交叉关联的数据结构和地址族表建立的。例如,当一个应用程序创建一个新的套接口时,将产生一个可以被bsd 套接口使用的与特定的地址族有关的套接口创建子过程。 设置系统内核时,一系列的地址族和协议将会保存在协议向量中。每一个协议都由它的名 字代表,例如, i n e t和其初始化进程的地址。当系统启动并初始化套接口界面时,将会调用每一个协议的初始化进程。对于套接口地址族来说,这意味着它们注册的一系列有关协议操作。 这是一系列的子程序,每一个都执行一个和特定的地址族有关的操作。已经注册的和协议相关的操作保存在pops向量中,而此向量由一系列指向数据结构proto_ops的指针组成。 数据结构proto_ops包括地址族的类型以及指向与特定地址族有关的套接口操作程序的指 针。pops向量用地址族标识符作为索引。2.4项目用到的socket函数和编译环境应用程序调用socket函数来创建一个能够进行网络通信的套接字。 头文件 #include #include 函数原型 int socket(int domain, int type, int protocol); 第一个参数指定应用程序使用的通信协议的协议族,对于tcp/ip协议族,该参数置af_inet; 第二个参数指定要创建的套接字类型,流套接字类型为sock_stream、数据报套接字类型为sock_dgram、原始套接字sock_raw(winsock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据包以及协议首部); 第三个参数指定应用程序所使用的通信协议。此参数可以指定单个协议系列中的不同传输协议。在internet通讯域中,此参数一般取值为0,系统会根据套接字的类型决定应使用的传输层协议。 该函数如果调用成功就返回新创建的套接字的描述符,如果失败就返回invalid_socket。套接字描述符是一个整数类型的值。每个进程的进程空间里都有一个套接字描述符表,该表中存放着套接字描述符和套接字数据结构的对应关系。该表中有一个字段存放新创建的套接字的描述符,另一个字段存放套接字数据结构的地址,因此根据套接字描述符就可以找到其对应的套接字数据结构。每个进程在自己的进程空间里都有一个套接字描述符表但是套接字数据结构都是在操作系统的内核缓冲里。source insight 3.5是一个面向项目开发的程序编辑器和代码浏览器,它拥有内置的对c/c+, c#和java等程序的分析。source insight能分析你的源代码并在你工作的同时动态维护它自己的符号数据库,并自动为你显示有用的上下文信息。 source insight不仅仅是一个强大的程序编辑器,它还能显示reference trees,class inheritance diagrams和call trees。source insight提供了最快速的对源代码的导航和任何程序编辑器的源信 息。 source insight提供了快速和革新的访问源代码和源信息的能力。与众多其它编辑器产品不同,source insight能在你编辑的同时分析你的源代码,为你提供实用的信息并立即进行分析。source insight是如今最好用的语言编辑器,支持几乎所有的语言, 如c、c+、asm、pas、asp、html等常见的,还支持自己定义关键字,如果您 是一个程序员或者网页制作人,这个软件对您都是有帮助的! source insight为您提供了可快速访问源代码和源信息的功能。source insight相较其它的编辑器产品来说,还可以帮您分析源代码,并在您编辑的同时立刻提供给您有用的信息和分析。 source insight自动创建并维护它自己高性能的符号数据库,包括函数、method、全局变量、结构、类和工程源文件里定义的其它类型的符号。source insight 可以迅速地更新您的文件信息,即使在您编辑代码的时候。而且符号数据库的符号可以自动创建到您的工程文件中。第三章 ftp 服务器与客户端需求分析选择好开发工具,我们用的是redhat linux 5 内核版本是2.6.18。我们选择在局域网内通讯,以便于测试和调试;既要实现一个服务器,也要为其测试实现一个客户端。可以现在一台计算机上实现两者并进行调试和测试,然后再在局域网中的两台计算机之间分别运行客户端和服务器端。服务器要处理多个客户端,所以会采用多进程编程,每个进程处理一个客户端的请求。所以在编程的时候会用到多进程编程,和进程间通信等知识。ftp服务器是基于tcp的面向连接的安全的可靠连接,也会用的socket编程,还有ftp整个协议的具体分析。为了测试方便我们的服务器程序会和客户端程序一起进行开发。服务器与客户端原理图分析:一一实现程序服务器端实现的的命令如下:1).user:指用户名,它带一个参数。格式为:user username在登录ftp服务器的时候先用此命令告诉服务器那个用户要登录此服务器。如:user root 此命令是以root用户登录服务器。2).pass:指明与用户名对应的密码,带一个参数。格式为:pass password当服务器收到来自客户端的user命令后,检查其合法后就像客户端发提示信息要求输入密码,客户端这是就可以向服务器发送pass命令加上root用户的密码。服务器检查密码的正确后,客户端就与服务器连接起来了。3).list: pathname参数表示要列文件的目录路径名,若不带参数,刚使用当前目录。此命令会把pathname 路径下的文件或目录按照一定的格式发送给客户端让客户端显示出来。4).quit:由于要求传输文件时有登陆的过程,断开连接到应有相应的注销过程。这个命令就是从服务器上注销的过程,如果服务器收到该命令时,没有文件正在传达室输,刚断开控制,连接如果有文件正在传输,刚控制连接仍然保持,直到收到有关传输结果的应答时,服务器才断开连接。5).load:取得文件这条命令是ftp事务是用得最多的命令,在请求下载文件时都有会用到。6).update:存放文件。7).wywt:请求服务器返回系统类型。8).type:表示文件类型,共有四种,所带参数也有四种,a,e ,i ,l 分别对应ascii,ebcdic,imagb和local类型。格式为:type type9).cmd:请求更改服务器的当前目录这各命令带一个参数,参数表示要更改的目录名。10).dele:请求删除服务器上的文件。11).mko:请求在服务器上新建一个目录,这条命令带一个参数指明要建立的目录名。 12). port:指明数据连接的端口号,带六个参数。格式为:port h1,h2,h3,h4,p1,p213).cat:命令显示某一个文件的内容。使用格式:cat filename 打印filename文件向终端。14).touch:请求在服务器上新建一个文件,这条命令带一个参数指明要建立的文件名。使用格式:touch filename15).pwd:在服务器上显示当前工作目录。16).mv:请求在服务器上为某一个指定的文件或文件夹重命名。17).cp:请求在服务器上拷贝一个目录或文件。使用格式:cp spathname dpathname 第四章 系统设计与实现4.1.软件总体分析与设计根据需求分析,按照系统开发的基本观点对功能进行分解,从功能上可对模块作如下划分:1).连接管理模块:主要完成主机与服务器之间的连接与关闭操作。2).文件管理模块:主要完成文件的显示、新建文件、删除文件等。3).文件传输模块:主要完成主机与服务器连接成功以后文件的上传与下载。4).辅助功能模块:主要是保存一些登录信息和一些简单的配置信息。4.2.各模块具体设计该ftp客户端工具用一个winsocket连接上ftp服务器,然后向其发送命令。在这个过程中,我们依靠发送响应的机制。即发送ftp命令接收返回的响应信息分析该信息执行相关操作发送下一条命令。在一般意义上,有一个socket用来连接ftp服务器的相关端口(如默认的21),它负责ftp命令的发送和接收返回的响应信息。一些操作如“进入目录”、“删除文件”,依靠这个socket发送一条命令就可完成了。1)客户端与服务器连接ftp是建立在tcp之上的连接,端口号使用21。若客户端与服务器之间成功连接,服务器将返回字符串,如:220 gms (version 5.0)。前三个字符220表示客户端与服务器成功连接,后面的字符会因服务器的不同而不同,但我们只关心前三个字符。2)用户名和密码认证客户端发送用户名给服务器,如:user he,如果服务器找到用户名he,将返回字符串,如:331 user name okay, need password。接着客户端应发送密码给服务器,如:pass 123,密码正确,返回如:230 user logged in, proceed,如果用户名或密码认证没有通过,返回如:530 not logged in。用户名也可以使用匿名,如:user anonymous,返回如:331 anonymous access allowed, send identity (e-mail name) as password。3)应答码及其含义110:重新启动标记应答。在这种情况下文本是确定的,它必须是:mark yyyy=mmmm其中yyyy是用户进程标记,mmmm是服务器标记。120:服务在nnn分钟内准备好。125:数据连接已打开,准备传送。150:文件状态良好,打开数据连接。200:命令成功。202:命令未实现。211:系统状态或系统帮助响应。212:目录状态。213:文件状态。214:帮助信息,信息仅对人类用户有用。215:名字系统类型。220:对新用户服务准备好。221:服务关闭控制连接,可以退出登录。225:数据连接打开,无传输正在进行。226:关闭数据连接,请求的文件操作成功。227:进入被动模式。230:用户登录。250:请求的文件操作完成。257:创建“pathname”。331:用户名正确,需要口令。332:登录时需要账户信息。350:请求的文件操作需要进一步命令。421:不能提供服务,关闭控制连接。425:不能打开数据连接。426:关闭连接,中止传输。450:请求的文件操作未执行。451:中止请求的操作:有本地错误。452:未执行请求的操作:系统存储空间不足。500:格式错误,命令不可识别。501:参数语法错误。502:命令未实现。503:命令顺序错误。504:此参数下的命令功能未实现。530:未登录。532:存储文件需要账户信息。550:未执行请求的操作。551:请求操作中止
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 批量设备采购合同
- 廉洁合同的终止与解除
- 个人安全共同守护
- 挖掘机使用合同文本
- 通风与空调工程劳务分包契约
- 销售合同必要
- 房地产中介合同范本
- 积极进取上学保证书
- 标准化的民间借款合同
- 负责任的仓库保管承诺
- 天津市河东区2022-2023学年七年级上学期期末地理试题
- JT-T-860.2-2013沥青混合料改性添加剂第2部分:高黏度添加剂
- 江苏开放大学本科财务管理专业060111马克思主义基本原理期末试卷
- 2024年4月自考00155中级财务会计试题及答案
- 商务英语写作1(山东联盟)智慧树知到期末考试答案章节答案2024年山东管理学院
- 细胞生物学智慧树知到期末考试答案章节答案2024年中南民族大学
- 2024中国留学生归国求职洞察报告
- 2024年全国人才流动中心招聘事业编制人员3人历年公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 中班音乐《小看戏》课件
- 电大财务大数据分析编程作业2
- 葡萄糖醛酸在药物开发中的应用
评论
0/150
提交评论