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
# 定義全局列表用來存儲(chǔ)子文件夾
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)
# 固定端口號(hào)
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)文章
python中列表和元組的用法以及區(qū)別超詳細(xì)講解
這篇文章主要介紹了Python中的列表和元組,包括它們的定義、特點(diǎn)、常見操作以及與列表的區(qū)別,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
python獲取響應(yīng)某個(gè)字段值的3種實(shí)現(xiàn)方法
這篇文章主要介紹了python獲取響應(yīng)某個(gè)字段值的3種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
python實(shí)現(xiàn)AHP算法的方法實(shí)例(層次分析法)
這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)AHP算法(層次分析法)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Python使用中文正則表達(dá)式匹配指定中文字符串的方法示例
這篇文章主要介紹了Python使用中文正則表達(dá)式匹配指定中文字符串的方法,結(jié)合實(shí)例形式分析了Python正則匹配及字符編碼相關(guān)操作技巧,需要的朋友可以參考下2017-01-01
基于python3.7利用Motor來異步讀寫Mongodb提高效率(推薦)
Motor是一個(gè)異步mongodb driver,支持異步讀寫mongodb。它通常用在基于Tornado的異步web服務(wù)器中。這篇文章主要介紹了基于python3.7利用Motor來異步讀寫Mongodb提高效率,需要的朋友可以參考下2020-04-04

