client端:
#!/usr/bin/env python import socket,time,os import rlcompleter h,p="192.168.220.130",12346 sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect((h,p)) def runcmd(): received=sock.recv(8192) if received=="changed directoy successful": print "changed directoy successful" else: print received def putfile(filename): print "\033[32;1mstart send %s\033[0m" %filename f=open(filename,'rb') while 1: f_data=f.read(4096) if not f_data:break sock.sendall(f_data) f.close() time.sleep(0.5) sock.sendall("completed") print "send %s completed" %filename def getfile(filename): print "\033[32;1mstart get %s\033[0m" %filename os.chdir(dir) f=open(filename,'wb') while 1: data=sock.recv(8192) if not data:break if data=="completed": time.sleep(0.5) print "%s have get complete" %filename break f.write(data) f.close() while 1: try: cmd=raw_input("\033[32;1mPlease input will run command: \033[0m") sock.sendall(cmd) action=sock.recv(4096) if action=="Has ready" and cmd.split()[0]=="put": global dir dir,filename=os.path.split(cmd.split()[1]) os.chdir(dir) putfile(filename) elif action=="Has ready" and cmd.split()[0]=="get": dir,filename=os.path.split(cmd.split()[1]) getfile(filename) # action=="Has ready" and cmd.split()[0] != "get" and cmd.split()[0] != "put": else: runcmd() except KeyboardInterrupt: print "\n\033[31;1mbye bye!\033[0m" break sock.close()
server端:
#!/usr/bin/python #coding=utf-8 import SocketServer import os,time class myserver(SocketServer.BaseRequestHandler): def runcmd(self,comm): print "\033[33;1mwill run %s on %s\033[0m" %(comm,self.client_address[0]) self.request.sendall("Has ready") if comm.split()[0]=="cd": os.chdir(comm.split()[1]) self.request.sendall("changed directoy successful") else: cmd=os.popen(comm) result=cmd.read() result_data="\n\033[35;1mFeedback from Server \n\033[0m" + result self.request.sendall(result_data) def handle(self): print "\033[32;1m connected from %s\033[0m" %self.client_address[0] while 1: # print "\033[32;1m connected from %s\033[0m" %self.client_address[0] try: data=self.request.recv(4096) # filepath=data.split()[1] # dir=('/').join(filepath.split('/')[:-1]) if data.split()[0]=="put": global dir dir,filename=os.path.split(data.split()[1]) self.recvfile(filename) elif data.split()[0]=="get": dir,filename=os.path.split(data.split()[1]) self.sendfile(filename) else: self.runcmd(data) except IndexError: print "exit", self.client_address break def recvfile(self,filename): print "\033[32;1mstart receive %s...\033[0m" %filename self.request.sendall("Has ready") os.chdir(dir) f=open(filename,'wb') while 1: data=self.request.recv(4096) if not data:break if data=="completed": print "%s have received complete" %filename break f.write(data) f.close() def sendfile(self,filename): print "\033[32;1mstart send %s...\033[0m" %filename os.chdir(dir) f=open(filename,'rb') self.request.sendall("Has ready") time.sleep(0.5) while 1: f_data=f.read(8192) if not f_data:break self.request.sendall(f_data) f.close() time.sleep(0.5) self.request.sendall("completed") print "send %s completed" %filename if __name__=="__main__": h,p='',12346 server=SocketServer.ThreadingTCPServer((h,p),myserver) server.serve_forever() server.shutdown()
運行截圖: