之前已经了解了TCP/IP这种低级别的协议,还有一些网络协议包括文件传输(FTP,STP)、阅读Usenet新闻组(NNTP)、电子邮件发送(SMTP)、从服务器上下载电子邮件(POP3、IMAP)等。

一、文件传输

1.文件传输网际协议

因特网中最流行的事情就是文件交换。

文件交换无处不在。有很多协议可以供因特网上传输文件使用。

最流行的有文件传输协议(File Transfer(转移) Protocol,FTP)、Unix-to-Unix复制协议(Unix-to-Unix Copy Protocol(协议),UUCP)

和网页的超文本传输协议(Hypertext(超文本) Transfer Protocol,HTTP)。

另外还有(Unix下的)远程文件复制命令rcp(以及更安全更灵活的scp和rsync)。

迄今为止,HTTP、FTP和scp/rsync还是非常流行的。HTTP主要用于网页文件的下载和访问web服务上。

它一般不要求用户输入登陆的用户名密码就可以访问服务器上的文件和服务。

HTTP文件传输请求主要是用于获取网页(文件下载)。

相对的,scp和rsync要求用户登录到服务器,否则不能上传和下载文件。

至于FTP,跟scp/rsync一样,可以上传或下载文件,还采用了Unix的多用户的概念,用户一定要输入有效的用户名和密码才能使用。不过,FTP也允许匿名登陆。

二、文件传输协议(FTP)

文件传输协议最早主要用于匿名下载公共文件,也可以用在两台电脑之间传输文件,尤其是在使用Unix系统作为文件存储系统,使用其他机器来工作的情况。

在网络流行之前,FTP就是在因特网上文件传输、软件和源代码下载的主要手段之一。

FTP要求输入用户名和密码才能访问远程的FTP服务器,但它也允许没有账号的用户以匿名用户登陆。

不过,管理员要先设置FTP服务器允许匿名用户登陆。这时,匿名用户的用户名是“匿名”(anonymous),密码一般是用户的电子邮件地址。

与特定的用户拥有特定的账户不同,这有点像把FTP公开出来让大家访问。匿名用户通过FTP协议可以使用的命令与一般的用户相比来说,限制更多。

下图展示了FTP协议的工作流程:

(1)客户端连接远程的FTP服务器;

(2)客户端输入用户名和密码(或“匿名”和电子邮件地址);

(3)客户端做各种文件传输和信息查询操作;

(4)客户端登出远程FTP服务器,结束通讯。

当然,这只是一个大致流程。有时,由于网络两边电脑的崩溃或是网络问题,会导致整个事务在完成之前被中断。

一般在客户端超过超过15分钟(900秒)不活动之后,连接就会被关闭。

在底层上,FTP只使用TCP——它不使用UDP。而且,FTP是客户端/服务器编程中很“与众不同”的例子。

客户端和服务器都使用两个套接字来通讯:一个是控制和命令端口(21号端口),另一个是数据端口(有时是20号端口)。

我们说“有时”是因为FTP有两种模式:主动和被动。

只有在主动模式服务器才使用数据端口。在服务器把29号端口设置为数据端口后,它“主动”连接客户端的数据端口。

而被动模式中,服务器只是告诉客户端它的随机端口号码,客户端必须主动建立数据连接,在这种模式下,你会看到,FTP服务器在建立数据连接时是“被动的”。

python已经支持il包括FTP在内的大多是数据网际协议。

三、python和FTP

下面会介绍如何用python写FTP客户端程序,回顾一下简要的流程:

(1)连接到服务器

(2)登陆

(3)发出服务请求(可能有返回信息)

(4)退出

在使用python的FTP支持时,你所需要做的就是导入ftplib模块,并实例化一个ftplib.FTP类的对象,所有的FTP操作(如登陆,传输文件和登出等)都要使用这个对象来完成。

1.ftplib.FTP类的方法

下面列出了一些最常用的方法。

FTP对象相关方法
方    法 描    述
login(user='anonymous',passwd='',acct='') 登陆到FTP服务器,所有的参数都是可选的
pwd() 得到当前工作目录
cwd(path) 把当前工作目录设置为path
dir([path[,....[,cb]]]) 显示path目录里的内容,可选的参数cb是一个回调函数,它会被传给restrlines()方法
nlst([path[,....]]) 与dir()类似,但返回一个文件名的列表,而不是显示这些文件名
retrlines(cmd[,cb]) 给定FTP命令,用于下载文本文件。可选的回调函数cb用于处理文件的每一行
retrbinary(cmd,cb[bs=8192[,ra]]) 与retrlines(类似),只是这个指令处理二进制文件,回调函数cb用于处理每一块(块大小默认为8K)下载的数据
storlines(cmd,f) 给定FTP命令,以上传文本文件,要给定一个文件对象f
storbinary(cmd,f[,bs=8192]) 与storlines()类似,只是这个指令处理二进制文件,要给定一个文件对象f,上传块大小bs默认为8K
rename(old,new) 把远程文件old改为new
delete(path) 删除位于path的远程文件
mkd(directory) 创建远程目录
rmd(directory) 删除远程目录
quit() 关闭连接并退出

也就是说,你不一定要使用其他的方法,因为它们或者是辅助函数,或者是管理函数,或者是被API调用的。

文件传输协议FTP的更多相关文章

  1. 第9章 应用层(5)_文件传输协议FTP

    6. 文件传输协议FTP 6.1 FTP主动和被动模式 (1)FTP协议 ①与其他协议不同,FTP协议在客户端访问FTP服务器时需要建立两个TCP连接.一个用来传输FTP命令,一个用来传输数据. ②在 ...

  2. 【知识强化】第六章 应用层 6.3 文件传输协议FTP

    这节课我们来学习一下文件传输协议FTP. 我们知道一个文件的传输过程呢一定需要协议的规定,那在文件传送协议这一块呢有很多个协议.比较主要的两个一个是文件传送协议FTP,一个是简单文件传送协议TFTP. ...

  3. 文件传输协议FTP、SFTP和SCP

    网络通信协议分层 应用层: HTTP(Hypertext Transfer Protocol 超文本传输协议,显示网页) DNS(Domain Name System) FTP(File Transf ...

  4. 【传输文件】文件传输协议FTP、SFTP和SCP

    网络通信协议分层 应用层: HTTP(Hypertext Transfer Protocol 超文本传输协议,显示网页) DNS(Domain Name System) FTP(File Transf ...

  5. 文件传输协议-FTP

    一.FTP概述 FTP(File Transfer Protocol 文件传输协议)C/S结构的应用层协议.由服务端和客户端两个部分共同实现文件传输功能 FTP服务器普遍部署于内网中,具有容易部署.方 ...

  6. 文件传输协议(FTP)

    文件传输协议(FTP)用于用户在两台主机之间进行远距离的文件传输,并保证传输的可靠性. FTP采用客户机/服务器的方式,由FTP服务器和FTP客户机两部分组成. FTP服务器中以目录结构保存着各种文件 ...

  7. FTP(文件传输协议)工作原理

    目前在网络上,如果你想把文件和其他人共享.最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件. 1.FTP架构 如同其他的很多通讯协议,FTP通讯协议也采用客户 ...

  8. 安全文件传输协议之SFTP的使用

    一.SFTP概述 在前几篇文章,我们讲到了文件传输协议FTP(File Transfer Protocol),那也是使用比较广泛的文件服务器,但是我们需要知道,Linux系统并不自带FTP程序 如果要 ...

  9. ftp (文件传输协议)

    ftp (文件传输协议) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议” ...

随机推荐

  1. java.lang.NoSuchMethodError: ognl.SimpleNode.isEvalChain(Lognl/OgnlContext;)Z解决方法

    执行JavaEE项目时出现例如以下错误: java.lang.NoSuchMethodError: ognl.SimpleNode.isEvalChain(Lognl/OgnlContext;)Z a ...

  2. Linux下Nagios的安装与配置(转载)

    一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...

  3. appium for mac 安装与测试ios说明

    一.安装 安装dmg,可以自己下载appium-1.4.0.dmg或者找rtx我要,文件过大不能添加附件. Appium提供了一个doctor,运行appium-doctor 如果有问题,Fix it ...

  4. Mysql的建表规范与注意事项

    一. 表设计规范 库名.表名.字段名必须使用小写字母,“_”分割. 库名.表名.字段名必须不超过12个字符. 库名.表名.字段名见名知意,建议使用名词而不是动词. 建议使用InnoDB存储引擎. 存储 ...

  5. Redis 数据恢复方法,redis-port 工具将自建 redis 的 rdb文件同步到云数据库

    1. Redis 恢复的机制 如果只配置 AOF ,重启时加载 AOF 文件恢复数据: 如果同时配置了 RDB 和 AOF ,启动是只加载 AOF 文件恢复数据: 如果只配置 RDB,启动是将加载 d ...

  6. NSNotification的几点说明

    1.NSNotification消息的同步性 ①NSNotification使用的是同步操作.即如果你在程序中的A位置post了一个NSNotification,在B位置注册了一个observer,通 ...

  7. windows小游戏之扫雷技巧

    通过单击即可挖开方块.如果挖开的是地雷,则您输掉游戏. 如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷.

  8. 二维树状数组的区间加减及查询 tyvj 1716 上帝造题的七分钟

    详细解释见小结.http://blog.csdn.net/zmx354/article/details/31740985 #include <algorithm> #include < ...

  9. 《HBase in Action》 第三章节的学习总结 ---- 如何编写和运行基于HBase的MapReduce程序

    HBase之所以与Hadoop是最好的伙伴,我理解就因为两点:1.HADOOP的HDFS,为HBase提供了分布式的存储方式:2.HADOOP的MR为HBase提供的分布式的计算方法.u 其中第一点, ...

  10. spring-test-dbunit的配置和使用

    1.数据源配置 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" ...