我試圖用Python語言編寫的程序可以在文件夾中通過套接字傳輸多個文件,我有以下的代碼到目前爲止的Python在TCP多個文件傳輸插座
客戶:
def uploadFiles(folder,dcip,PORT,filetype):
os.chdir(folder)
dirList = os.listdir(folder)
print dirList
ms = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print PORT
ms.connect((dcip, int(PORT)))
for fname in dirList:
if fname.endswith(str(filetype)):
cmd = 'get\n%s\n' % (fname)
ms.sendall(cmd)
f = open(fname,'rb')
data = f.read()
f.close()
print data
r = ms.recv(2)
ms.sendall(data)
ms.sendall('done\n%s\n' %(fname))
ms.sendall('end\n\n')
ms.close()
服務器:
import socket,os
listener_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listener_socket.bind(('',33234))
filename = ''
while 1:
listener_socket.listen(100)
connection,address_client = listener_socket.accept()
if not os.path.exists(str(address_client[0])):
os.makedirs(str(address_client[0]))
currdir = os.getcwd()
os.chdir('./'+str(address_client[0]))
while(1):
data = connection.recv(4096)
cmd = data[:data.find('\n')]
if cmd == 'get':
x,filename,x = data.split('\n',2)
connection.sendall('ok')
f = open(filename,'wb')
if cmd == 'done':
continue
f.write(data)
if cmd == 'end':
connection.close()
break
os.chdir(currdir)
上面的代碼進入一個無限循環,這點我明白,這是因爲在if cmd == 'done'
部分continue語句的,我不知道爲什麼它是做日在?我的意思是它從來沒有從客戶端得到完成的消息,任何人都可以請幫我修復代碼?
你的循環將終止在「結束」消息,而不是「完成」的消息。 –
傳送所有文件後,我正在發送結束消息。而且,它不會像原樣複製文件,它會爲第一個文件本身保留一個循環。 – hld619
由於讀取是以塊的形式完成的,因此只有第一個命令將在塊的開始處。其他命令(get,done,end)將位於同一塊或下一塊內。應該更聰明地分析收到的數據。 – Ante