设为首页 收藏本站
查看: 1111|回复: 0

[经验分享] python 网络编程学习: 3 网络客户端编程之FTP

[复制链接]

尚未签到

发表于 2015-4-21 12:37:22 | 显示全部楼层 |阅读模式
  什么是网络客户端?
  首先,我们把因特网简化成一个数据中心,数据交换的参与者是一个服务提供者和一个服务使用者。类似于“生产者-消费者”这里 服务器就是生产者,它提供服务,一般只有一个服务器喝多个消费者,就像我们之前看道德客户端/服务器模型那样。
  这里主要介绍三个网际协议---FTP、NNTP和POP3
  文件传输协议--FTP
  FTP是internet上文件传输、软件和源代码下载的主要手段之一。FTP要求输入用户名和密码才能访问FTP服务器,但它也允许没有帐号的用户以匿名用户登录(当然这需要管理员设置FTP服务器允许匿名用户登录)。这时用户名是匿名(anonymous),密码是一般是用户的电子邮件地址。
  FTP工作流程如下


  • 客户端链接远程FTP服务器
  • 客户端输入用户名和密码
  • 客户端做各种文件传输和信息查询
  • 客户端登出远程FTP服务器,结束通讯
  有时由于网络原因 会导致事务在完成之前中断。客户端在超过900秒不活动后连接就会被关闭。
  在底层,FTP使用TCP 而不是UDP。并且客户端和服务器都使用两个套接字来通讯:一个控制和命令端口(21号端口),一个数据端口(20号端口).。
  FTP有两种模式:主动和被动(Python同时支持主动被动两种模式)。只有主动模式服务器才使用数据端口。而被动模式中服务器只告诉客户端他的随即端口号码,客户端必须主动建立数据链接。
  
  Python 和 FTP
  在使用Python的FTP支持时,需要导入ftplib模块,并实例化一个ftplib.FTP类对象
  ftplib.FTP类方法

方法属性
login([user[, passwd[, acct]]])  登录到FTP服务器,所有参数都是可选的

pwd()得到当前工作目录
cwd(pathname)把当前工作目录设置为pathname
dir(argument[, ...[,cb]·])显示参数目录的内容,可选参数cb是一个回调函数他会被传给retrlines()方法
nlst(argument[, ...])与dir 类似 但返回一个文件名列表 而不是显示这些文件
retrlines(command[, callback])给定FTP命令 用于下载文本文件 可选的会小函数用于处理每一块下载的数据(每块默认为为8k)
retrbinary(command, callback[, maxblocksize[, rest]])与上一个类似 但这个指令处理二进制文件
storlines(command, file[, callback])给定FTP命令,用于上传文件 要给定一个文件对象file
storbinary(command, file[, blocksize, callback, rest])与上一个类似 只是这个处理二进制文件 要给定文件对象 上传块大小默认8k
rename(fromname, toname)修改文件名
delete(filename)删除远程文件
mkd(pathname)创建远程目录
rmd(dirname)删除远程目录
quit()关闭链接并断开
  
  
  
  
  
  
  
  
  
  
  
  
  内容参见 http://docs.python.org/library/ftplib.html
  
  Python使用FTP流程为



from ftplib import FTP
f = FTP('ftp.python.org')
f.login('anonymous','guess@who.org')
:
f.quit()
  
  下面我们写一段代码,假设你要从mozilla网站上下载最新的

bugzilla-3.6.9-to-3.6.10-nodocs.diff.gz 代码
  代码示例

  



#!/usr/bin/python
# -*- coding: utf-8 -*-
import ftplib
import os
import socket
HOST = 'ftp.mozilla.org'
DIRN = 'pub/mozilla.org/webtools'
FILE = 'bugzilla-3.6.7.tar.gz'

def main():
try:
f = ftplib.FTP(HOST)
except (socket.error, socket.gaierror):
print 'ERROR:cannot reach " %s"' % HOST
return
print '***Connected to host "%s"' % HOST
try:
f.login()
except ftplib.error_perm:
print 'ERROR: cannot login anonymously'
f.quit()
return
print '*** Logged in as "anonymously"'
try:
f.cwd(DIRN)
except ftplib.error_perm:
print 'ERRORL cannot CD to "%s"' % DIRN
f.quit()
return
print '*** Changed to "%s" folder' % DIRN
try:
#传一个回调函数给retrbinary() 它在每接收一个二进制数据时都会被调用
f.retrbinary('RETR %s' % FILE, open(FILE, 'wb').write)
except ftplib.error_perm:
print 'ERROR: cannot read file "%s"' % FILE
os.unlink(FILE)
else:
print '*** Downloaded "%s" to CWD' % FILE
f.quit()
return
if __name__ == '__main__':
main()
  
  
  
  运行代码将输出一下内容 并将

bugzilla-3.6.7.tar.gz
下载到电脑



***Connected to host "ftp.mozilla.org"
*** Logged in as "anonymously"
*** Changed to "pub/mozilla.org/webtools" folder
*** Downloaded "bugzilla-3.6.7.tar.gz" to CWD
[Finished in 11.4s]
  


  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59242-1-1.html 上篇帖子: 黄聪:解决python中文处理乱码,先要弄懂“字符”和“字节”的差别 下篇帖子: Python与 PHP使用递归建立多层目录函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表