您好,登錄后才能下訂單哦!
怎么在python3中使用tcp實現文件夾遠程傳輸?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
服務器端代碼:
import os import socket import time # 定義全局列表用來存儲子文件夾 list1 = [] def deal_file(files,dir_name,dir_socket): # 如果打開文件時報錯即files為文件夾 try: old_file = open(os.path.join(dir_name.decode(),files),"rb") except: # 講導致報錯的文件夾放入全局列表等待處理 global list1 list1.append(files) else: # 沒有報錯則執行讀取發送關閉文件 file_data = old_file.read() print("發送內容") dir_socket.send(file_data) old_file.close() def deal_dir(): # 待完善用于處理子文件夾,需要利用遞歸完成 pass def main(): # 創建套接字 tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 固定端口號 tcp_socket.bind(("",9992)) # 被動套接字轉換為主動套接字 tcp_socket.listen(128) # 將隊列中的客戶端取出 dir_socket,client_ip = tcp_socket.accept() # 接受客戶端消息 dir_name = dir_socket.recv(1024) # 顯示文件列表 file_list = os.listdir(dir_name.decode()) # 將文件列表發送至客戶端 dir_socket.send(str(file_list).encode()) # 阻塞0.5s等待發送成功 time.sleep(0.5) # 便利每個文件發送文件內容 for files in file_list: deal_file(files, dir_name, dir_socket) global list1 # 如果全局列表內有文件則 if list1: # 帶完善 pass else: dir_socket.close() print("文件全部傳輸完成") tcp_socket.close() if __name__ == '__main__': main()
客戶端源碼:
import socket import os import threading import time def recv_data(files,dir_name,tcp_socket): file_data = tcp_socket.recv(1024) new_file = open(os.path.join(dir_name+"新", files),"wb") new_file.write(file_data) new_file.close() print("文件%s下載完成" % files) def main(): # 創建套接字 tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 連接服務器 tcp_socket.connect(("192.168.11.128", 9992)) # 向服務器發送要拷貝的文件夾 dir_name = input("請輸入要拷貝的文件夾") tcp_socket.send(dir_name.encode()) # 新建文件夾 os.mkdir(dir_name+"新") # 接受文件列表,循環打開文件寫入 file_list = tcp_socket.recv(1024) a = eval(file_list) print(a) for files in eval(file_list.decode()): recv_data(files,dir_name,tcp_socket) if __name__ == '__main__': main()
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。