#-*- coding:utf-8 -*- import socketserver from module import * class server: def __init__(self,request): self.conn=request self.conn.sendall(by('欢迎光临大龙FTP!')) def login(self): self.user=st(self.conn.recv(1024)) self.conn.sendall(by('1')) self.password=st(self.conn.recv(1024)) if self.user in userdict.keys() and self.password==userdict[self.user]: self.result='Success' self.conn.sendall(by('\033[32m登陆成功!\033[0m')) else: self.result='Failed' self.conn.sendall(by('\033[31m登陆失败!\033[0m')) log(self.user,self.result,'users_log.txt') return self.result def register(self): self.user=st(self.conn.recv(1024)) self.conn.sendall(by('1')) self.password=st(self.conn.recv(1024)) if self.user in userdict.keys(): self.conn.sendall(by('\033[031m注册失败,该用户已存在\033[0m')) else: self.conn.sendall(by('\033[032m注册成功!\033[0m')) userdict[self.user]=self.password self.userdump() log(self.user,self.result,'users_log.txt') def put(self): self.use=0 self.name=st(self.conn.recv(1024)) self.conn.sendall(by('1')) self.size=int(st(self.conn.recv(1024))) if os.path.isfile('ftp\\'+self.name): print('cun zai') print('ftp\\'+self.name) self.have=os.path.getsize('ftp\\'+self.name) self.conn.sendall(by(str(self.have))) self.choose=st(self.conn.recv(1024)) if self.choose=='2': self.have=0 self.conn.sendall(by('1')) # self.size=int(st(self.conn.recv(1024))) self.conn.sendall(by('11')) f=open('ftp\\'+self.name,'ab') while self.size != self.use: self.line=self.conn.recv(1024) f.write(self.line) self.use+=len(self.line) f.close() print('wanbi') log(self.user,'Success','file_log.txt') if self.choose=='1': self.conn.sendall(by('1')) # self.size=int(st(self.conn.recv(1024))) self.conn.sendall(by('11')) f=open('ftp\\'+self.name,'ab') while self.size != self.use: self.line=self.conn.recv(1024) f.write(self.line) self.use+=len(self.line) f.close() print('wanbi') log(self.user,'Success','file_log.txt') else: print('no zai') self.conn.sendall(by(str(0))) # self.size=int(st(self.conn.recv(1024))) self.conn.sendall(by('11')) f=open('ftp\\'+self.name,'wb') while self.size > self.use: self.line=self.conn.recv(1024) f.write(self.line) self.use+=len(self.line) f.close() print('wanbi') log(self.user,'Success','file_log.txt') def get(self): self.cmd() self.path=st(self.conn.recv(1024)) if self.path not in os.listdir('ftp'): self.conn.sendall(by('0')) else: self.conn.sendall(by('1')) self.size=os.path.getsize(self.path) self.conn.sendall(by(str(self.size))) self.conn.recv(1024) with open('ftp\\%s'%self.path,'rb') as f : for line in f: self.conn.sendall(line) log(self.user,'Success','file_log.txt') def cmd(self): cmd=st(self.conn.recv(1024)) p = os.popen(cmd) x = p.read() self.conn.sendall(by(x)) @staticmethod def userdump(): with open('user.txt','wb') as f: pickle.dump(userdict,f) f.close() class Myserver(socketserver.BaseRequestHandler): def handle(self): s=server(self.request) while True: opt=st(s.conn.recv(1024)) print(userdict) if opt =='1': self.result=s.login() if 'Failed' in self.result:continue while True: opt2 = st(s.conn.recv(1024)) if opt2 =='1': print('put') s.put() elif opt2=='3': s.cmd() elif opt2=='2': print('get') s.get() elif opt2=='4': break elif opt=='2': s.register() elif opt=='3': break if __name__=='__main__': Server=socketserver.ThreadingTCPServer(('127.0.0.1',8888),Myserver) Server.serve_forever() # print(dir(socketserver))
相关文章: