命令列版本的FTP客戶端展示(實現細節和遇到的問題在github倉庫中,因為有很多內容)
1.FTP相關知識介紹(宣告一下我是Win10版本):
FTP協議是一個檔案傳輸的協議,它是客戶端伺服器的架構,它可以做兩臺PC之間傳輸任意大小的檔案。
2.使用的可行性:
如果想自己使用(Filezilla比我這強)或是測試我這個程式,您需要在網路上先搭建一個FTP伺服器站點(https://www.cnblogs.com/popfisher/p/7992036.html這個帖子的建站方法實測過可行),這步的目的是在網路裡公開你的IP(或是域名),方便FTP客戶端的連線;或者您知道一個已經建立好的FTP伺服器的IP(或是域名->IP)。
根據那個帖子搭建的站點是非匿名登入的。而我很懶也是沒
3.關於FTP伺服器站點:
裡面其實有很多東西,FTP站點的目的之前說了,但是它的搭建在Win系統裡是可以按那個帖子的步驟做好,也可以是寫個程式來實現,但是它涉及到了FTP伺服器和客戶端連線的內容,比如兩種連線模式“主動”“被動”等。
還有它的許可權的限制的設定,也是搭建的一個重點,可以像帖子裡的那種非匿名,也可以完全開放的匿名(這是FTP最早應用的目的:以匿名方式去下載公共檔案)
它的搭建結果是把你本地PC的一個資料夾路徑給到公開的網路。那個路徑作為這個伺服器的根路徑。客戶端可以遍歷它底下的子路徑。
4.我的程式碼:
https://github.com/z472/Cwarehouse/blob/master/因特網客戶端基於底層協議程式設計/ftpclient1.py
裡面每個函式開頭都有一行註釋,關鍵或是出錯過的行也有註釋。
因為github倉庫下面也提交了我遇到和解決的問題的文件,加上比較充足的註釋,故以下部分將不重點談實現的細節。
(1)使用時的問題:
程式碼網址如上所示,如果想自己使用的話還要把裡面的全域性變數r_path(它是你本地下載檔案的儲存時的路徑)請您手動更改下。
程式碼裡面還有一個用來上傳檔案的預設路徑,在上傳檔案給伺服器的時候,你可以每次都輸入一個本地路徑,或是摁回車跳過使用您自己設定的預設路徑。
程式碼如果停止操作幾分鐘,再輸入指令會報錯,告訴你連線中斷,重做就可以。
(2)指令:
Instructions:-D(download) -Q(quit) -U(Uploading) -R(Reset path)
-D:輸入之後可以得到,伺服器的當前路徑所有檔案資訊,然後下載可以輸入檔案的字尾來批量下載,或是回車預設把全部東西下載下來。
圖片展示的是下載exe字尾的檔案。
-Q:好像沒什麼用,關閉退出的功能 -R:定位伺服器根目錄中的子路徑,之後的下載都從這裡進行
-U:上傳檔案,按提示先把你要上傳檔案的上級路徑給出,或是回車使用預設路徑,然後按提示把要上傳的檔案字尾輸入
圖片展示的是前幾行是上傳功能,下面的-D是顯示下目錄中新上傳好的2個多GB的電影檔案。
對上傳的說明:因為可能有人會上傳病毒檔案給伺服器,該功能不常使用,下面也沒有詳細地實現它的顯示進度和它的歷史記錄儲存功能。
當輸入錯誤格式的字元時會要求重來一遍。
(3)特別的功能:
下載時檔案進度顯示:它顯示的是已經下載的位元組數。每0.05s顯示一次。實測發現對於30MB的檔案有一點顯示。
對於幾百MB(圖上的pycharm的exe是790MB顯示了11行),但2~3GB的檔案會顯示非常多行。
歷史記錄儲存:該程式記錄每次下載的檔案的記錄。
圖片顯示:它儲存了下載的檔名,檔案接收的路徑和時間。
(4)需改進的地方:
介面部分:
GUI版本,正是因為很多地方要適應GUI,要改一些輸出語句,才寫的這個隨筆來記錄命令列版本。
登入部分:
要增加錄的匿名部分
增加一個上次登入的書籤(儲存上次使用的賬戶名和密碼),由於要注意資訊的安全性,所以一直沒搞出來。
進一步地減少耦合。