日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 查找文件夹_用python打造一个基于socket的文件(夹)传输系统

發布時間:2023/12/15 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 查找文件夹_用python打造一个基于socket的文件(夹)传输系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這段時間在學習python,接觸到了網絡編程中的socket這塊,加上自己在用的Linux服務器都是原生支持python的,于是乎有了個做文件傳輸功能程序的想法。

畢竟python語言中,有下載功能的框架一抓一大把,但是主機與主機間快速搭建文件(夾)傳輸通道的程序似乎不常見,因為我剛接觸python不久,但是我不知道也不奇怪,總得來說,自己做一個練手,成就感滿滿。

項目地址

https://github.com/Ccapton/python-stuff/tree/master/filetransporter

實操預覽

本地主機發送文件到遠端服務器主機。

思維導圖

文件傳輸系統

以上思維導圖僅供參考,畢竟表達能力有限,具體功能要追究到代碼處才能分析其原理。

原理

基于socket的通信,相信會編程的朋友都不陌生,而通過socket來傳輸文件也是很常見的,但是這僅僅是對于單個文件來說很容易實現。

如果是多文件呢?

我在實現本系統之前嘗試了幾次,用單一socket通道來傳輸多文件不切實際,因為調用socket.recv()方法的時候,返回的數據格式是原始數據str類型,要分割不同文件的數據有很大難度。

因為涉及到接收、發送方兩端文件數據接收和發送進度的統一性,就要用另外的指令來控制傳輸工作不亂套,于是我想到多開一個socket作為傳輸指令的通道,這樣指令和數據就分離了,也就容易控制傳輸工作了!所以有了指令線程和數據線程之分。

要實現傳輸整個文件夾,首先要遍歷這個文件夾,把在其內的所有文件結構準確無誤的還原出來;因為是通過一個socket通過傳輸數據,所以傳輸文件只能一個接一個來,這樣,文件的遍歷工作只能等前一個文件傳輸完畢后才能繼續進行,于是又要對遍歷工作設計一番。

經過改造,我在文件查找(遍歷)器內加入了while循環體和供外界繼承的回調類,這樣就能達到我想要的文件通過socket按順序傳輸的效果了。

文件查找器FileFinder(阻塞型)源碼:

import os,time# 文件、文件夾尋找類 (阻塞型)# 阻塞的設計:為了等待調用者的耗時操作【否則很快就完成了文件的遍歷任務,調用者達不到順序操作文件(夾)的意圖】class FileFinder: def __init__(self,finderCallback): self.finderCallback = finderCallback # 文件(夾)路徑下所有文件的總大小 self.sum_size = 0 # 調用者控制的參數,若為False,則遍歷工作繼續進行,若為True,則阻塞任務,等待調用者完成它的其他耗時操作后在考慮是否改變此值 self.recycle = True # 調用者控制的參數,若為False,則正常工作,若為True,則當recycle為False時遍歷工作不阻塞快速完成,recycle為True時遍歷工作阻塞 self.off = False # 文件(夾)找到時的回調類 class FinderCallback: # 找到文件夾 def onFindDir(self,dir_path): pass # 找到文件 def onFindFile(self,file_path,size): pass # 預留的刷新函數 def onRefresh(self): pass # 查找文件(夾)方法 def list_flie(self,root_dir): if os.path.isfile(root_dir): while self.recycle: time.sleep(0.05) if self.finderCallback: self.finderCallback.onFindFile(root_dir,os.path.getsize(root_dir)) self.finderCallback.onRefresh() if not self.off: self.recycle = True else: dirlist = os.listdir(root_dir) # 列出文件夾下所有的目錄與文件 for dir in dirlist: path = os.path.join(root_dir, dir) if os.path.isfile(path): while self.recycle: time.sleep(0.05) if self.finderCallback: self.finderCallback.onFindFile(path,os.path.getsize(path)) self.finderCallback.onRefresh() if not self.off: self.recycle = True else: while self.recycle: time.sleep(0.05) if self.finderCallback: self.finderCallback.onFindDir(path) self.finderCallback.onRefresh() if not self.off: self.recycle = True # 遞歸調用(當遍歷到文件夾時,繼續遍歷,直到當前文件夾下沒有文件夾為止) self.list_flie(path)通過繼承FileFinder的回調類FinderCallback,重寫其 onFindDir(self,dir_path) 和onFindFile(self,file_path,size)方法,在這兩個方法里面發送相關指令到接收端。但最難的就是兩端的指令線程內的socket指令信息的處理,這需要深入代碼去具體研究,本人能力有限,也就不細說了。需要研究一番的朋友,請移步該項目地址 https://github.com/Ccapton/python-stuff/tree/master/filetransporter

注意

運行接收端程序,需要一個能訪問的地址,也即是說最好是局域網內進行文件傳輸工作,因為局域網本地ip都是可以直接訪問的,若是在公共網絡傳輸文件,必須知道接收方主機的公網ip和內網ip。例如我現在用到接收方主機是騰訊云的主機,內網ip是10.135.xxx.xxx,公網ip是111.120.xxx.xxx。該主機內,運行接收(服務)端程序python3 ftserver.py -i 10.135.xxx.xxx -d /home/ubuntu/downloads而在你的主機運行發送(客戶)端程序發送文件夾bilibilipython3 ftclient.py -i 111.120.xxx.xxx -f /Users/capton/desktop/bilibili因為騰訊云、阿里云等國內虛擬主機供應商是采用NAT地址轉換對云主機進行地址分配的,所以按照我上面的步驟來運行兩端程序才能連通。

- END -

原文鏈接:

https://www.jianshu.com/p/07ff2a7d22f4

文源網絡,僅供學習之用,如有侵權,聯系刪除。

往期精彩

◆ ?50款開源工具你都用過嗎?

◆ ?python+C、C++混合編程的應用

◆ ?python網絡爬蟲的基本原理詳解

總結

以上是生活随笔為你收集整理的linux 查找文件夹_用python打造一个基于socket的文件(夹)传输系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色呦呦在线播放 | 亚洲天堂2015 | 成年人午夜免费视频 | 中国女人av | 三区在线观看 | 无码精品国产一区二区三区 | 欧美精品自拍视频 | 久热超碰 | 欧美精品成人一区二区三区四区 | www.看毛片| 人妻精品久久久久中文字幕 | jjzz国产| 91羞羞网站| 丝袜五月天 | 97精品人妻一区二区三区蜜桃 | 青青草在线视频免费观看 | av片在线观看网站 | 日本ww色| 国产一区二区三区观看 | 欧美精品一区二区视频 | 亚洲综合欧美日韩 | 在线播放av网站 | 国产一区第一页 | 成人小视频在线免费观看 | 国产一区二区三区网站 | 日本午夜免费福利视频 | 高清一区二区三区四区五区 | 狠狠干in | 亚洲欧美在线一区二区 | 天堂av在线免费 | 精品国产一区二区三区性色 | 自拍视频啪| 中文字幕在线观看高清 | 九九操| 精品日韩制服无码久久久久久 | 国产精品美女www爽爽爽视频 | 91人人爱 | 久久久久国产精品熟女影院 | 蜜乳av一区二区 | 亚洲88av | 色av性av丰满av | 姑娘第5集高清在线观看 | 美女的诞生免费观看在线高清 | 欧美一区二区三区久久成人精品 | 精品国产乱码久久久久久婷婷 | 干操网 | 久久久精品人妻一区二区三区 | 人人射| 欧洲影院 | 国产精品一区无码 | av免费在线观看不卡 | 国产免费视频一区二区三区 | 性――交――性――乱a | 日韩性生活视频 | 欧美裸体xxxx极品少妇 | 精品欧美一区二区三区在线观看 | 国产又粗又猛又黄又爽 | 人妻丝袜一区 | 亚洲午夜无码久久久久 | fc2ppv色の美マンに中出し | 国产艳俗歌舞表演hd | 九九久久综合 | 亚洲视频在线一区二区 | 99精品久久久久久久 | 欧美性猛交xxxx乱大交 | а√在线中文网新版地址在线 | 日本视频在线播放 | 麻豆69| 91一区二区三区在线观看 | 岛国精品资源网站 | 亚洲色成人一区二区三区小说 | 久久久久久久久久一区二区 | 久久久国产成人 | 久久性生活 | 亚洲第一伊人 | 日韩乱码一区二区三区 | 国产一区h | 经典毛片 | 欧洲成人在线观看 | 国产午夜精品无码 | 久久免费视频一区 | 美女在线观看www | 粗了大了 整进去好爽视频 日本女优中文字幕 | 国产精品久久91 | 精品人妻在线播放 | 国产亚洲精品久久久 | 无套暴操 | 天天操天天干天天插 | 蜜桃中文字幕 | 国产片高清在线观看 | 少妇一级淫片免费放 | 风间由美在线观看 | 91一区二区三区 | 日韩大片免费 | 操人小视频 | 亚洲在线日韩 | 久久人人爽天天玩人人妻精品 | 娇妻被老王脔到高潮失禁视频 | 日本丰满熟妇videossex一 |