一、文件传输协议
1.Python和FTP
from ftplib import FTP as ftp
f = ftp('some.ftp.server')
f.login('anonymous','your@email.address')
.
.
f.quit()
2.ftplib.FTP类的方法
login(user='anonymous',passwd='',acct='') #登录ftp服务器参数可选
pwd() #获取当前工作目录
cwd(path) #把当前目录设置为path所以的路径
dir(path[,...[,cb]]) #显示path目录里的内容,可选的参数cb是一个回调函数,会传递给retrlines()方法
nlst(path[,...]) #与dir()类似,但返回的一个文件名列表,而不是显示这些文件名
retrlines(cmd[,cb]) #FTP命令(如:“RETR filename”,用于下载文本文件。可选的回调函数cb用于处理文件的每一行)
retrbinary(cmd,cb[,bs=8192[,ra]]) #与retrlines()类似,只是这个指令处理二进制文件。回调函数cb用于处理每一块(块大小默认为8KB)下载的数据
storlines(cmd,f) #给定FTP命令(如:"STOR filename"),用来上传文本文件,要给定一个文件对象。
storbinary(cmd,f[,bs=8192]) #与storlines()类似,只是这个指令处理二进制文件,要给定一个对象f,上传块大小bs默认为8KB
rename(old,new) #把远程文件old重命名为new
delete(path) #删除位于path的远程文件
mkd(directory) #创建远程目录
rmd(directory) #删除远程目录
quit() #关闭连接并退出
交互FTP示例
>>> from ftplib import FTP
>>> f = FTP('ftp.python.org')
>>> f.login('anonymous','guido@python.org')
'230 Guest login ok, access restrictions apply'
>>> f.dir()
total 3
drwxrwxr-x 10 1075 4127 512 May 17 2000 .
drwxrwxr-x 10 1075 4127 512 May 17 2000 ..
drwxrwxr-x 3 root wheel 512 May 19 1998 bin
drwxrwxr-x 3 root 1400 512 Jun 17 2000 dev
drwxrwxr-x 3 root wheel 512 May 17 2000 etc
>>> f.quit()
SocketServer模块
SocketServer是标准库中的 一个高级模块(Python3.x中命名为socketserver),它的目标是简化多样板代码,它们是创建网络客户端和服务器所必需的代码。这个模块有为你创建各种各样的类。
BaseServer #包含核心服务器功能和min-in类的钩子;仅用于推导,这样不会创建这个类的实例;可以用TCPServer或UDPServer创建类的实例。
TCPServer/UDPServer #基础网络同步TCP/UDP服务器
UnixStreamServer/UnixDatagramServer #基于文件的基础同步TCP/UDP服务器
ForkingMixIn/ThreadingMixIn #核心派出或线程功能;只能做max-in类与一个服务器类配合实现一些异步性;不能直接实例化这个类;
ForkingTCPServer/ForkingUDPServer #ForkingMinIn和TCPServer/UDPServer的组合。
ThreadingTCPServer/ThreadingUDPServer #ThreadingMinIn和TCPServer/UDPServer的组合。
BaseRequestHandler #包含处理服务请求的核心功能;仅仅用于推导,这样无法创建这个类的实例;可以使用StreamRequestHandler或DatagramRequestHandler创建类的实例;
StreamRequestHandler/DatagramRequestHandler #实现TCP/UDP服务器的服务处理器;
服务端示例
#!/usr/bin/python
from SocketServer import (TCPServer as TCP,StreamRequestHandler as SRH)
from time import ctime
HOST = ''
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST,PORT)
class MyRequestHandle(SRH):
def handle(self):
print '...connected from :',self.client_address
self.wfile.write('[%s] %s'%(ctime(),self.rfile.readline()))
tcpServ = TCP(ADDR,MyRequestHandle)
print 'waiting for connection...'
tcpServ.serve_forever()
客户端示例
#!/usr/bin/python
from socket import *
HOST = 'localhost'
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST,PORT)
while True:
tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect_ex(ADDR)
data = raw_input('> ')
if not data:
break
tcpCliSock.send('%s\r\n' %data)
data = tcpCliSock.recv(BUFSIZE)
if not data:
break
print data.strip()
tcpCliSock.close()