1. 程式人生 > 實用技巧 >命令列版本的FTP客戶端展示(實現細節和遇到的問題在github倉庫中,因為有很多內容)

命令列版本的FTP客戶端展示(實現細節和遇到的問題在github倉庫中,因為有很多內容)

1.FTP相關知識介紹(宣告一下我是Win10版本):

  FTP協議是一個檔案傳輸的協議,它是客戶端伺服器的架構,它可以做兩臺PC之間傳輸任意大小的檔案。

2.使用的可行性:

  如果想自己使用(Filezilla比我這強)或是測試我這個程式,您需要在網路上先搭建一個FTP伺服器站點(https://www.cnblogs.com/popfisher/p/7992036.html這個帖子的建站方法實測過可行),這步的目的是在網路裡公開你的IP(或是域名),方便FTP客戶端的連線;或者您知道一個已經建立好的FTP伺服器的IP(或是域名->IP)。

  根據那個帖子搭建的站點是非匿名登入的。而我很也是

寫匿名登入的內容,該版本的客戶端只限用註冊好的FTP賬戶名和密碼登入(該賬戶就是Win系統裡就是你開機時的使用者名稱和密碼)的情況。後續的GUI會改進這裡。

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,要改一些輸出語句,才寫的這個隨筆來記錄命令列版本。
  登入部分:
    要增加錄的匿名部分
    增加一個上次登入的書籤(儲存上次使用的賬戶名和密碼),由於要注意資訊的安全性,所以一直沒搞出來。
  進一步地減少耦合。