python3利用tcp實(shí)現(xiàn)文件夾遠(yuǎn)程傳輸
本文實(shí)例為大家分享了python實(shí)現(xiàn)文件夾遠(yuǎn)程傳輸?shù)木唧w代碼,供大家參考,具體內(nèi)容如下
實(shí)現(xiàn)功能:
通過tcp協(xié)議模擬文件夾的下載,注意是文件夾,不是文件。
下面讓我們實(shí)現(xiàn)以下:
其中有部分功能還未實(shí)現(xiàn)有興趣的可以將代碼自行補(bǔ)全
服務(wù)器端代碼:
import os import socket import time # 定義全局列表用來存儲子文件夾 list1 = [] def deal_file(files,dir_name,dir_socket): # 如果打開文件時(shí)報(bào)錯(cuò)即files為文件夾 try: old_file = open(os.path.join(dir_name.decode(),files),"rb") except: # 講導(dǎo)致報(bào)錯(cuò)的文件夾放入全局列表等待處理 global list1 list1.append(files) else: # 沒有報(bào)錯(cuò)則執(zhí)行讀取發(fā)送關(guān)閉文件 file_data = old_file.read() print("發(fā)送內(nèi)容") dir_socket.send(file_data) old_file.close() def deal_dir(): # 待完善用于處理子文件夾,需要利用遞歸完成 pass def main(): # 創(chuàng)建套接字 tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 固定端口號 tcp_socket.bind(("",9992)) # 被動(dòng)套接字轉(zhuǎn)換為主動(dòng)套接字 tcp_socket.listen(128) # 將隊(duì)列中的客戶端取出 dir_socket,client_ip = tcp_socket.accept() # 接受客戶端消息 dir_name = dir_socket.recv(1024) # 顯示文件列表 file_list = os.listdir(dir_name.decode()) # 將文件列表發(fā)送至客戶端 dir_socket.send(str(file_list).encode()) # 阻塞0.5s等待發(fā)送成功 time.sleep(0.5) # 便利每個(gè)文件發(fā)送文件內(nèi)容 for files in file_list: deal_file(files, dir_name, dir_socket) global list1 # 如果全局列表內(nèi)有文件則 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(): # 創(chuàng)建套接字 tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 連接服務(wù)器 tcp_socket.connect(("192.168.11.128", 9992)) # 向服務(wù)器發(fā)送要拷貝的文件夾 dir_name = input("請輸入要拷貝的文件夾") tcp_socket.send(dir_name.encode()) # 新建文件夾 os.mkdir(dir_name+"新") # 接受文件列表,循環(huán)打開文件寫入 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()
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python使用tcp實(shí)現(xiàn)局域網(wǎng)內(nèi)文件傳輸
- python3.5基于TCP實(shí)現(xiàn)文件傳輸
- python3基于TCP實(shí)現(xiàn)CS架構(gòu)文件傳輸
- python使用socket實(shí)現(xiàn)的傳輸demo示例【基于TCP協(xié)議】
- 對python中基于tcp協(xié)議的通信(數(shù)據(jù)傳輸)實(shí)例講解
- Python3使用TCP編寫一個(gè)簡易的文件下載器功能
- python基于socket實(shí)現(xiàn)的UDP及TCP通訊功能示例
- Python 網(wǎng)絡(luò)編程之TCP客戶端/服務(wù)端功能示例【基于socket套接字】
- Python網(wǎng)絡(luò)編程之使用TCP方式傳輸文件操作示例
相關(guān)文章
如何將你的應(yīng)用遷移到Python3的三個(gè)步驟
這篇文章主要介紹了如何將你的應(yīng)用遷移到Python3的三個(gè)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Python docx庫刪除復(fù)制paragraph及行高設(shè)置圖片插入示例
這篇文章主要為大家介紹了Python docx庫刪除復(fù)制paragraph及行高設(shè)置圖片插入操作實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07利用python開發(fā)app實(shí)戰(zhàn)的方法
這篇文章主要介紹了利用python開發(fā)app實(shí)戰(zhàn)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Python使用os模塊實(shí)現(xiàn)更高效地讀寫文件
os是python標(biāo)準(zhǔn)庫,包含幾百個(gè)函數(shù)常用路徑操作、進(jìn)程管理、環(huán)境參數(shù)等好多類。本文將使用os模塊實(shí)現(xiàn)更高效地讀寫文件,感興趣的可以學(xué)習(xí)一下2022-07-07以一個(gè)投票程序的實(shí)例來講解Python的Django框架使用
這篇文章主要介紹了以一個(gè)投票程序的實(shí)例來講解Python的Django框架使用,Django是Python世界中人氣最高的MVC框架,需要的朋友可以參考下2016-02-02