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...