日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python socket Ftp get put 简单实现

發布時間:2024/4/14 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()


服務端


#!/usr/bin/python #?-*-?coding:?utf-8?-*-__author__?=?'gaogd'import??os import?SocketServer class?MyTCPHandler(SocketServer.BaseRequestHandler):"""The?RequestHandler?class?for?our?server. It?is?instantiated?once?per?connection?to?the?server, and?must?override?the?handle()?method?to?implement?communication to?the?client."""def?handle(self):while?True:data?=?self.request.recv(1024).strip()data?=?data.split("|")print?dataif?hasattr(self,data[0]):func?=?getattr(self,data[0])func(data[1:])def?file_transter(self,msg):#?print?msg[0]if?msg[0]?==?'get':print?'going?to?send?file:%s?to?client'?%?msg[1]filename?=?msg[1]if?os.path.isfile(filename):file_size?=?os.path.getsize(filename)ack_msg?=?"file_transter1|get|ready|%s"?%?file_sizeself.request.send(ack_msg)client_ack?=?self.request.recv(1024)#print?'---->client_acl:?',?client_ackif?client_ack.startswith("file_transfer|get|recv|ready"):f?=?file(filename,'rb')for?line?in?f:self.request.send(line)else:print?'--file?%s?send?done'%?filenamef.close()else:ack_msg=?"file_transfer|get|file?doesn't?exist"self.request.send(ack_msg) ##############################################################################if?msg[0]?==?'put':?????##接收客戶端上傳過來的文件print?'put::?',?msg[1]if?len(msg[1])?>?0?:?????????????###判斷?get?后面是否接文件名,如果不存在,那就是命令有問題remote_filename?=?msg[1]cmd_msg?=?"file_transfer|put|recv|%s"?%?remote_filenameprint?'cmd_msg>>>>',cmd_msgself.request.send(cmd_msg)????##?告訴客戶端已經準備好接收了feedback?=?self.request.recv(1024)print?'---feedback',?feedbackif?feedback.startswith("file_transfer|put|recv"):file_size?=?int(feedback.split('|')[-1])ack_msg?=?"file_transfer|put|recv|ready"self.request.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.request.recv(1024)f.write(data)recv_size?+=?len(data)else:data?=?self.request.recv(file_size?-?recv_size)recv_size?+=?file_size?-?recv_sizef.write(data)#print?'--->',file_size,recv_sizeelse:f.close()print?feedbackelse:print?'put?filename?is?not?'if?__name__?==?"__main__":#HOST,?PORT?=?"localhost",?9999HOST,?PORT?=?"localhost",?50018#?Create?the?server,?binding?to?localhost?on?port?9999server?=?SocketServer.ThreadingTCPServer((HOST,?PORT),?MyTCPHandler)#?Activate?the?server;?this?will?keep?running?until?you#?interrupt?the?program?with?Ctrl-Cserver.serve_forever()


轉載于:https://blog.51cto.com/lvnian/1847532

總結

以上是生活随笔為你收集整理的Python socket Ftp get put 简单实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。