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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

socket网络编程ftp

發布時間:2024/8/23 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 socket网络编程ftp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#!/usr/bin/env python #-*-coding:utf-8-*- #ftp客戶端 import os import socket import threading import socketserver#下載文件 def get_file(host,port,filepath):s=socket.socket()s.connect((host,port))filepath=os.path.join('.','bakc','filepath')f=open(filepath,'wb')data=Truewhile data:data=s.recv(1024)if data:f.write(data)s.close()f.close()#上傳文件 def put_file(host,port,filepath):s=socket.socket()s.connect((host,port))f=open(filepath,'rb')while True:data=f.read(1024)if data:s.sendall(data)else:breaks.close()f.close()class FtpClient:def __init__(self,host='localhost',port=21):self.host=hostself.port=portself.cmds=('QUIT','USER','NOOP','TYPE','PASV','PORT','RETR','STOR')self.linesep='\n'self.data_port=Noneself.loged=Falseself.sock=Noneself.pasv_mode=Noneself.pasv_host=Noneself.pasv_port=Nonedef cmd_connect(self):self.sock=socket.socket()self.sock.connect((self.host,self.port))self.data_port=self.sock.getsockname()[0]def start(self):print('支持的命令: ',self.cmds)self.cmd_connect()self.login()while True:cmd=input('請輸入FTP命令: ')if not cmd:print('FTP命令不能為空')continuecmd,args=self.split_args(cmd)if not self.send_cmd(cmd,args):continueres=self.readline(self.sock)print(res)if cmd.startswith('PASV') and res.startswith('227'):self.pasv_mode=Trueservinfo=res[res.index('(')+1:res.index(')')]self.pasv_host='.'.join(servinfo.split(',')[:4])servinfo=servinfo.split(',')[-2:]self.pasv_port=256*int(servinfo[0])+int(servinfo[1])if cmd.startswith('RETR'):if self.pasv_mode:threading.Thread(target=get_file,args=(self.pasv_host,self.pasv_port,args)).start()if cmd.startswitch('STOR'):if self.pasv_mode:threading.Thread(target=put_file,args=(self.pasv_host,self.pasv_port,args)).start()if cmd.startswitch('QUIT'):breakself.sock.close()self.sock=Nonedef login(self):if self.sock:self.send_cmd('USER')res=self.readline(self.sock)if res.startswitch('230'):print('登錄成功!')self.loged=Truedef readline(self,sock):data=''while not data.endswith(self.linesep):d=sock.recv(1)data+=d.decode('utf-8')return datadef split_args(self,cmds):if ' ' in cmds:cmdlsts=cmds.split(' ')cmd=cmdlsts[0]args=' '.join(cmdlists[1:])else:cmd=cmdsargs=''return cmd.upper(),argsdef send_cmd(self,cmd,args=''):if self.sock:if args:cmd=' '.join((cmd,args))if cmd.startswith('RETR') or cmd.startswith('STOR'):if self.pasv_mode is None:print('Please appoint port or stor mode.')return Falseif not args:return Falseif cmd.startswith('STOR'):if args:if not os.path.exists(args):print('File is not exists')return Falsecmd+=self.linesepsself.sock.sendall(cmd.encode('utf-8'))return Trueif __name__=='__main__':fc=FtpClient()fc.start()#!/usr/bin/env python #-*-coding:utf-8-*- #ftp服務器的定義 import socket import socketserver import time import threading import osclass FTPHdl(socketserver.StreamRequestHandler):def __init__(self,request=None,client_address=None,server=None):#實例屬性,所有命令self.coms_keys=('QUIT','USER','NOOP','TYPE','PASV','PORT','RETR','STOR')#命令與方法映射self.coms={}self.init_coms()self.server=server#命令端口self.cmd_port=21#數據端口self.data_port=20self.pasv_data_ip=Noneself.pasv_data_port=None#參數self.args=None#是否登入self.loged=False#主動模式,被動模式self.pasv_mode=Nonesuper().__init__(request,client_address,server)#初始話所有命令def init_coms(self):for k in self.coms_keys:self.coms[k]=getattr(self,'exe_'+k.lower())#客戶端處理def handle(self):while True:#獲得命令cmds=self.rfile.readline()if not cmds:continuecmds=cmds.decode('utf-8')#命令分析cmd=self.deal_args(cmds)#命令動詞if cmd in self.coms_keys:self.coms.get(cmd)()#不在定義的命令之內else:self.send(500,'Invaild command.')if cmd=='QUIT':break#處理命令行def deal_args(self,cmds):#命令動詞,命令參數分割if ' ' in cmds:cmd,args=cmds.aplit(' ')args=args.strip('\n').strip()#只有命令動詞else:cmd=cmds.strip('\n')args=''#參數為空if args:self.args=args#返回命令動詞return cmd.upper()#用戶退出def exe_quit(self):self.send(221,'bye')#用戶登入def exe_user(self):user=self.args#用戶名為空或默認if user in ('','anonymous'):user='anonymous'self.loged=True#登入已經self.send(230,'identified!')#沒有登入,匿名else:self.send(530,'Only use anonymous')#被動模式def exe_pasv(self):if not self.loged:#要求登入self.send(332,'Please login.')return #已經進入被動模式if self.pasv_mode:#發送用戶信息。IP端口號發送客戶端info='entering passive mode (%s)' % self.make_pasv_info()self.send(227,info)returntry:#進入被動模式self.enter_pasv()info='entering passive mode (%s)' % self.make_pasv_info()self.pasv_mode=Trueself.send(227,info)except Exception as e:print(e)self.send(500,'Failure change to passive mode.')#被動模式下數據連接服務器的地址和端口def make_pasv_info(self):ip_info=self.pasv_data_ip.split('.')ip_info=','.join(ip_info)porta=str(self.pasv_data_port // 256)portb=str(self.pasv_data_port % 256)return ','.join((ip_info,porta,portb))#進入被動模式def enter_pasv(self):if self.server.data_server is None:self.pasv_data_ip,self.pasv_data_port=self.server.create_data_server()#進入主動模式def exe_port(self):self.send(500,'Do not offer port mode.')def exe_noop(self):self.send(200,'ok')def exe_type(self):self.send(200,'ok')#下載文件def exe_retr(self):if not os.path.exists(self.args):self.send(550,'File is not exists.')returnclient_addr=self.request.getpeername()[0]#獲得ip地址self.add_opr_file(client_addr,('RETR',self.args))self.send(150,'ok.')#上傳文件def exe_stor(self):client_addr=self.request.getpeername()[0]self.add_opr_file(client_addr,('STOR',self.args))self.send(150,'ok.')def add_opr_file(self,client_addr,item):if client_addr in DataHdl.client_opr:DataHdl.client_opr[client_addr].append(item)else:DataHdl.client_opr[client_addr]=[item,]def send(self,code,info):infos='%d %s\n' % (code,info)self.request.sendall(infos.encode('utf-8'))class MyThrTCPServ(socketserver.ThreadingTCPServer):def __init__(self,addr,Hdl):self.data_server=Nonesuper().__init__(addr,Hdl)def shutdown(self):if self.data_server:threading.Thread(target=self.data_server.shutdown).start()super().shutdown()def create_data_server(self):self.data_server=socketserver.ThreadingTCPServer(('127.0.0.1',0),DataHdl)pasv_data_ip,pasv_data_port=self.data_server.server_addressthreading.Thread(target=self.data_server.serve_forever).start()return pasv_data_ip,pasv_data_portclass DataHdl(socketserver.StreamRequestHandler):client_opr={}def handle(self):peerip=self.request.getpeername()[0]opr=self.get_opr_args(peerip)if opr:if opr[0]=='RETR':#下載文件self.retr_file(opr[1])elif opr[0]=='STOR':#上傳文件self.stor_file(opr[1])def get_opr_args(self,peerip):if peerip in self.client_opr:opr=self.client_opr[peerip]if not self.client_opr[peerip]:self.client_opr.pop(peerip)return opr#發送文件def retr_file(self,filepath):f=open(filepath,'rb')while True:data=f.read(1024)if data:self.request.sendall(data)else:breakf.close()#接受文件def stor_file(self,filepath):f=open(os.path.join('.','bakt',filepath),'wb')while True:data=self.request.recv(1024)if data:f.write(data)else:breakf.close()if __name__=='__main__':server=MyThrTCPServ(('127.0.0.1',21),FTPHdl)threading.Thread(target=server.serve_forever).start()print('FTP start...')time.sleep(30)server.shutdown()

總結

以上是生活随笔為你收集整理的socket网络编程ftp的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 经典杯子蛋糕日剧在线观看免费 | 日本亚洲精品 | 亚洲国产精品成人va在线观看 | 亚洲精品乱码久久久久久蜜桃不卡 | 日韩淫 | 亚色综合| 天天爽一爽 | 男生插女生视频在线观看 | 亚洲熟妇一区二区 | 91福利视频在线观看 | 91av导航| 久久国产精品视频 | 国产一区二区精华 | 97人妻一区二区精品免费视频 | 免费的一级黄色片 | 国产特级视频 | 悠悠色综合 | 免费在线看黄色 | 亚洲第一色站 | 国产做爰xxxⅹ高潮视频12p | 久久久久黄色 | 色婷婷av一区二区三区之红樱桃 | 99热导航| 亚洲影视一区二区 | 久久久久久久国产精品视频 | 人人干人人草 | 亚洲一线在线观看 | 久久久精品网站 | 在线观看免费视频一区二区 | a免费视频 | 色偷偷资源 | 午夜黄色 | 国产成人精品无码免费看在线 | 欧美一级黄色片网站 | 日韩午夜网站 | 午夜精品久久久久久久久久 | 女人高潮潮呻吟喷水 | 疯狂做爰高潮videossex | 国产a级片免费看 | 亚洲大胆视频 | 狼人精品一区二区三区在线 | 日日狠狠久久偷偷四色综合免费 | 91精品国产综合久久国产大片 | va在线视频| 成人tiktok黄短视频 | 日本做受| 日韩操比 | 久久久久免费观看 | av香港经典三级级 在线 | 激情第一页 | 999国产精品 | 91精品国产综合久久久久久久 | 最新国产网站 | 欧美资源站 | 成人美女毛片 | 日韩视频精品 | 天堂综合网久久 | 亚洲免费黄网 | 免费看片网站91 | 天天狠天天操 | 日日操日日摸 | 成人宗合 | 日本在线视频观看 | 爱插美女网 | 久久精品这里只有精品 | 亚洲精品国产一区 | 欧美日韩中文字幕在线播放 | 久久精品福利视频 | 日本福利片在线观看 | 尤物视频在线观看国产 | 国产免费激情视频 | 国产又大又粗又爽 | 亚洲国产精品成人综合在线 | 污视频免费网站 | 五月激情天 | 国产伦精品一区二区三区视频痴汉 | 日韩激情国产 | 老熟女一区二区三区 | 国产精品理论片在线观看 | 久久久精品免费看 | 97国产视频 | 男人天堂网av | 成年男女免费视频网站 | 中文字幕在线观看免费视频 | 91操人| 蜜桃网av | 亚洲天堂一区二区三区四区 | 国产欧美一区二区三区视频在线观看 | 欧美另类色 | 国产亚洲精品女人久久久久久 | 亚洲午夜av久久乱码 | 黄视频在线播放 | 3d动漫精品啪啪一区二区免费 | 男生草女生视频 | 黄床大片 | 色老汉视频 | 国产8区 | 天天夜夜人人 | 欧美日韩1|