标签:
FtpServer
#!/usr/bin/env python
import SocketServer
class MyServer(SocketServer.BaseRequestHandler):
def setup(self):
pass
def handle(self):
path=‘/tmp‘
while True:
print self.request,self.client_address,self.server
data = self.request.recv(1024)
print data,‘test‘
data = data.split(‘|‘)
if data[0] == ‘put‘:
if len(data) > 2:
filename_from_cli,file_size = data[1],int(data[2])
self.request.send("ReadyToRecvFileContent")
f=file(‘%s/%s‘%(path,filename_from_cli),‘wb‘)
recv_size = 0
flag = True
while flag:
if recv_size + 4096 > file_size:
recv_data = self.request.recv(file_size - recv_size)
flag = False
else:
recv_data = self.request.recv(4096)
recv_size += 4096
f.write(recv_data)
f.close()
print ‘sent Done‘
self.request.close()
def finish(self):
pass
if __name__ ==‘__main__‘:
server=SocketServer.ThreadingTCPServer((‘127.0.0.1‘,8000),MyServer)
server.serve_forever()
FTPClient
#!/usr/bin/env python
import socket
import os
import sys
ip_port=(‘127.0.0.1‘,8000)
sk=socket.socket()
sk.connect(ip_port)
while True:
input = raw_input(‘path:‘)
cmd,path=input.split()
file_name=os.path.basename(path)
file_size=os.stat(path).st_size
print file_size
sk.send(cmd+"|"+file_name+‘|‘+str(file_size))
sent_size=0
data = sk.recv(4096)
if data == ‘ReadyToRecvFileContent‘:
f=file(path,‘rb‘)
flag=True
while flag:
if sent_size + 4096 > file_size :
data=f.read()
flag=False
else:
data = f.read(4096)
sent_size += 4096
sk.send(data)
f.close()
else:
print ‘no‘
上面代码对Python对Socket封装实现FTP功能加已利用可以做很多事情了。
标签:
原文地址:http://www.cnblogs.com/yjz1/p/5426045.html