嵌入式毕业论文.doc_第1页
嵌入式毕业论文.doc_第2页
嵌入式毕业论文.doc_第3页
嵌入式毕业论文.doc_第4页
嵌入式毕业论文.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

黄河水利职业技术学院 yellow river conservancy technical institute 毕 业 论 文 论文题目: 一个基于 linux 的 ftp 系统 专 业: 嵌入式 指导老师: 苏锡锋 作者姓名: 杨根涛 学 号: 2009100408 信息工程系 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 项目的设 置思路。 abstract ftp (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. 目录 摘 要 2 abstract 2 目录 3 第一章ftp 协议与原理 3 1.1ftp 协议4 1.2ftp 工作原理 5 1.3ftp 权限管理 6 1.4ftp 的传输有两种方式 7 1.5ftp 的工作方式 7 1.6 该程序服务器端实现的的命令 8 第二章开发环境及工具介绍 9 2.1 c 语言和 socket 机制 9 2.2 如何开发一个 server-client 模型的程序 11 2.3 常用的 socket 类型 12 2.4 项目用到的 socket 函数和编译环境 15 第三章 ftp 服务器与客户端需求分析 16 第四章 系统设计与实现 19 4.1.软件总体分析与设计 19 4.2.各模块具体设计 19 第五章 系统测试 28 5.1 系统可能出现的问题与不足 28 5.2 采用的测试类型 29 5.3 测试的过程与结果分析 29 结论 29 参考文献 30 致谢 31 第一章 ftp 协议与原理 1.11.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.21.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.31.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.41.4ftp 的传输有两种方式 ascii 传输模式和二进制数据传输模式。 1) ascii 传输方式:假定用户正在拷贝的文件包含的简单 ascii 码文本,如 果在远程机器上运行的不是 unix,当文件传输时 ftp 通常会自动地调整文件的内 容以便于把文件解释成另外那台计算机存储文本文件的格式。 2) 二进制传输模式:在二进制传输中,保存文件的位序,以便原始和拷贝 的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如, macintosh 以二进制方式传送可执行文件到 windows 系统,在对方系统上,此文件 不能执行。 如果你在 ascii 方式下传输二进制文件,即使不需要也仍会转译。这会使传 输稍微变慢 ,也会损坏数据,使文件变得不能用。 (在大多数计算机上,ascii 方 式一般假设每一字符的第一有效位无意义,因为 ascii 字符组合不使用它。如果 你传输二进制文件,所有的位都是重要的。 )如果你知道这两台机器是同样的,则 二进制方式对文本文件和数据文件都是有效的。 1.51.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.61.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 type 9).cmd:请求更改服务器的当前目录这各命令带一个参数,参数表示要更改 的目录名。 10).dele:请求删除服务器上的文件。 11).mko:请求在服务器上新建一个目录,这条命令带一个参数指明要建立的 目录名。 12). port:指明数据连接的端口号,带六个参数。 格式为:port h1,h2,h3,h4,p1,p2 13).cat:命令显示某一个文件的内容。 使用格式:cat filename 打印 filename 文件向终端。 14).touch:请求在服务器上新建一个文件,这条命令带一个参数指明要建立 的文件名。 使用格式:touch filename 15).pwd:在服务器上显示当前工作目录。 16).mv:请求在服务器上为某一个指定的文件或文件夹重命名。 17).cp:请求在服务器上拷贝一个目录或文件。 使用格式:cp spathname dpathname 第二章开发环境及工具介绍 2.12.1 c c 语言和语言和 socketsocket 机制机制 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.22.2 如如何何开开发发一一个个 s se er rv ve er r- -c cl li ie en nt t 模模型型的的程程序序 开发原理: 服务器,使用 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 2. .3 3 常常用用的的 s so oc ck ke et t 类类型型 有两种:流式 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 2. .4 4 项项目目用用到到的的 s so oc ck ke et t 函函数数和和编编译译环环境境 应用程序调用 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 等常见的,还支持自己定义关键字,如果您 是一 个程序员或者网页制作人,这个软

温馨提示

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

评论

0/150

提交评论