ftp客户端交互流程如下:
- 客户端连接远程服务器
- 客户端输入用户名、密码
- 客户端做各种文件传输和信息查询操作
- 客户端登出远程futp服务器
完成以上步骤就实现了一个ftp客户端,在客户端实现时需要考虑服务器是工作做主动模式还是被动模式,服务器工作在主动模式时服务器21端口用于传输指令,一般数据端口使用20。
使用python实现ftp客户端需要倒入ftplib模块,并实例化一个ftplib.FTP类对象,所有的FTP操作均使用这个对象完成。
主要使用代码如下:
from ftplib import FTP f = FTP(domain.name) f.login('user','password') .. f.quit()
在客户端开发时主要使用ftplib.FTP类方法,该类主要包含方法如下:
login()登录到ftp服务器,参数可选
pwd()得到当前目录
cwd()把当前目录设在成path
dir()列目录一个可选参数,他会被传给
nlst()与dir类似返回文件名列表而不是现实这些文件名
retrlinces()个顶FTP命令如RETR filename用于下载文本文件,可选回调函数cb用处理文件每一行
retrbinary()与retrlines()类似
storbinary(cmd,f[,bs=8192])
storlines(cmd,f)上传文件,f为一个文件对象
rename(old,new)修改文件名
delete(path)删除指定目录
mkd(directory)创建目录
md(directory)删除远程目录
quit()关闭连接
具体实现代码如下:
`
示例代码:#!/usr/bin/env python
import ftplib
import os
import socket
HOST='004.3vftp.com'
DIRN='./'
FILE ='xcount.py'
def main():
try:
f = ftplib.FTP('004.3vftp.com')
except (socket.error,socket.gaierror), e:
print 'ERROR: cannot reach "%s"' % HOST
return
print """connected to host "%s"""" % HOST
pwd = raw_input('please inpu password:')
user = raw_input('please input user:')
try:
f.login(user,pwd)
except ftplib.error_perm:
print 'error: cannot login anonymously'
return
print '-------logged in as %s secuss----' % user
try:
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()
`