Python socket Ftp get put 简单实现
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Python socket Ftp get put 简单实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                客戶端
#!/usr/bin/python #?-*-?coding:?utf-8?-*- import?os__author__?=?'gaogd'import?socketclass?FTP(object):def?__init__(self,host,port):self.host?=?hostself.port?=?portdef?put(self,msg):????###上傳文件到服務端print?'going?to?send?file:%s?to?client'?%?msg[0]filename?=?msg[0]if?os.path.isfile(filename):file_size?=?os.path.getsize(filename)ack_msg?=?"file_transter|put|%s"?%?(filename)print?"ack_msg?>>>>>>",ack_msgself.sock.send(ack_msg)client_file?=?self.sock.recv(1024)if?client_file.startswith("file_transfer|put|recv|%s"?%filename):ack_msg_size?=?"file_transfer|put|recv|%s|%s"?%(filename,file_size)self.sock.send(ack_msg_size)print?"ack_msg_size>>>",ack_msg_sizeelse:print?'server?not?ready?recv'return?False#?print?'---->client_acl:?',?client_ackclient_ack?=?self.sock.recv(1024)if?client_ack.startswith("file_transfer|put|recv|ready"):?????##?如果服務器通過這個,那就是說明服務端已經做好接收的準備了f?=?file(filename,?'rb')for?line?in?f:self.sock.send(line)????##發文件else:print?'--file?%s?send?done'?%?filenamef.close()else:ack_msg?=?"file_transfer|get|file?doesn't?exist"self.sock.send(ack_msg)def?get(self,msg):?????##從服務端中下載內容print?'get::?',msgif?len(msg)?>?0:???????##判斷?get?后面是否接文件名remote_filename?=?msg[0]cmd_msg="file_transter|get|%s"?%?remote_filenameself.sock.send(cmd_msg)#print?cmd_msgfeedback?=?self.sock.recv(1024)print?'---feedback',feedbackif?feedback.startswith("file_transter1|get|ready"):file_size?=?int(feedback.split('|')[-1])ack_msg?=?"file_transfer|get|recv|ready"self.sock.send(ack_msg)f?=?file('recv/%s'?%?remote_filename,'wb')recv_size?=?0while?not?file_size?==?recv_size:if?file_size?-?recv_size?>?1024:data?=?self.sock.recv(1024)f.write(data)recv_size?+=len(data)else:data?=?self.sock.recv(file_size?-?recv_size)recv_size?+=?file_size?-?recv_sizef.write(data)#print?'--->',file_size,recv_sizeelse:f.close()print?feedbackelse:print?'test'def?list_file(self):passdef?interactive(self):while?True:user_input?=?raw_input('ftp_client::').strip()if?len(user_input)?==?0:continuecmd?=?user_input.split()if?hasattr(self,cmd[0]):func?=?getattr(self,cmd[0])??##?put?|get?|list_filefunc(cmd[1:])else:print?"\033[31;1m?Wrong?cmd?usage?!\033[0m"def?connect(self):self.sock?=?socket.socket(socket.AF_INET,socket.SOCK_STREAM)self.sock.connect((self.host,self.port?))self.interactive()if?__name__?==?'__main__':ftp?=?FTP('127.0.0.1',50018)ftp.connect()服務端
轉載于:https://blog.51cto.com/lvnian/1847532
總結
以上是生活随笔為你收集整理的Python socket Ftp get put 简单实现的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: struts2默认配置文件 struts
- 下一篇: 德哥:从Oracle DBA到Postg
