python ftp檔案傳輸服務端

2021-08-28 04:05:05 字數 2629 閱讀 3929

from socket import *

import os,sys

import signal,time

host=」

port=8888

addr=(host,port)

self.c.send(file.encode())

def getfilename(self):

l=os.listdir('.')

l1=for i in l:

if os.path.isfile(i) and i[0]!='.':

else:

continue

file='#'.join(l1)

return file

def getfile(self):

file=self.getfilename()

self.c.send(file.encode())

x=self.c.recv(1024)#收到檔案名字序列號

print(x.decode())

y=file.split('#')[int(x.decode())]

f=open(y,'rb')

while true:

data=f.read(1024)

if not data:

time.sleep(0.1)

self.c.send('q'.encode())

f.close()

print('完成')

break

self.c.send(data)

def upfile(self):

filename=self.c.recv(1024).decode()

print(filename)

f=open(filename,'wb')

print('等待接收')

while true:

data=self.c.recv(1024)

print('接收成功')

print(data.decode())

if data.decode()=='q':

f.close()

print('完成')

break

f.write(data)

#處理客戶端請求

def client_handler(self):

print('處理子程序的請求',self.c.getpeername())

try:

while true:

data =self.c.recv(1024)

print(data.decode())

if not data.decode():

sys.exit('客戶退出')

self.c.close()

elif data.decode()=='c':

print('收到命令')

self.cfile()

elif data.decode()=='d':

print('收到命令')

self.getfile()

elif data.decode()=='u':

print('收到命令')

self.upfile()

elif data.decode()=='q':

break

else:

self.c.send('錯誤'.encode())

except (keyboardinterrupt,syntaxerror):

sys.exit('客戶退出')

except exception as e:

print(e)

self.c.close()

sys.exit()

def main():

s=socket()

s.setsockopt(sol_socket,so_reuseaddr,1)

s.bind(addr)

s.listen(3)

print(『等待連線%s』%os.getpid())

# 在父程序中忽略子程序狀態 子程序退出自動由系統處理避免殭屍程序

signal.signal(signal.sigchld,signal.sig_ign)

while true:

try:

c,addr=s.accept()

except keyboardinterrupt:

sys.exit(『伺服器退出』)

except exception as e:

print(『error』,e)

continue

else:

print(『已經連線客戶端』)

# 為客戶端建立新的程序處理請求

pid=os.fork()

if pid==0:

s.close()

f=fs(c)

f.client_handler()

# 無論是父程序還是失敗都繼續等待下個客戶連線

else:

c.close()

continue

ifname==」main「:

main()

Python FTP檔案傳輸實現

ftp一般流程 ftp對應pasv和port兩種訪問方式,分別為被動和主動,是針對ftp伺服器端進行區分的,正常傳輸過程中21號埠用於指令傳輸,資料傳輸埠使用其他埠。pasv 由客戶端發起資料傳輸請求,伺服器端返回並攜帶資料埠,並且伺服器端開始監聽此埠等待資料,為被動模式 port 客戶端監聽埠並向...

ftp檔案傳輸服務

ftp包括兩種傳輸模式,主動和被動方式 主動方式 在第1步中,客戶端的命令埠與ftp伺服器的命令埠建立連線,並傳送命令 port 1027 然後在第2步中,ftp伺服器給客戶端的命令埠返回乙個 ack 在第3步中,ftp伺服器發起乙個從它自己的資料埠 20 到客戶端先前指定的資料埠 1027 的連線...

ftp檔案傳輸服務

先關閉防火牆 關閉防火牆 root i service iptables stop 檢視防火牆狀態 root i service iptables status關閉selinux root i setenforce 01.背景 ftp主要用於機器與機器之前遠端拉取檔案 2.安裝 centos為例 r...