socketserver、struct子產品練習,簡易的FTP
server端:centos 7 python-3.6.2
用戶端:Windows 7 python-3.6.2 pycharm-2018
程式目的:1、學習使用socketserver實作并發處理多個用戶端。
2、了解使用struct解決TCP粘包。
(本人菜鳥一枚,對于開發規範,接口設計完全不懂,完全是随心所欲,自娛自樂。寫部落客要是記錄自己學習的點點滴滴,如有不足之處還請見諒。)
1.1 目錄結構如下:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLi0zaHRGcWdUYuVzVa9GczoVdG1mWfVGc5RHLwkzX39GZhh2csATMflHLwEzX4xSZz91ZsADMx8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL2EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PnVGcq5COlNDZlFDN5QzNxMzM5EzN1YGMjBDNhdjMhZDNzYWMk9CXyAzLclDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL3M3Lc9CX6MHc0RHaiojIsJye.jpeg)
1.2 目錄簡介:
FTP_SERVER:程式主目錄
app:程式主邏輯目錄,目錄下有四個子產品:
FTPserver.py:FTP Server端啟動入口。
login.py:認證注冊子產品,用于處理使用者注冊,登入認證。
dataAnalysis.py:指令解析子產品,負責解析,執行用戶端指令。
FileOpertion.py:負責檔案讀,寫。資料發送,資料接收。
db:存放user_pwd.db檔案,用于存放使用者資訊(使用者名,密碼,FTP目錄總空間,已使用空間等)
lib:存放公共資料。
1.3 子產品中類的繼承關系
1.4 執行流程
1.4.1 程式啟動檔案FTPserver.py,程式啟動後進入監聽狀态。核心代碼如下:
1.4.2 服務端進入監聽狀态後,用戶端發起連接配接請求,服務端接收連接配接請求後會等待客戶單發來狀态碼,1表示請求登入FTP伺服器,2表示用戶端要注冊使用者,注冊使用者需要服務端手動回報狀态碼1才可注冊。處理使用者登入,注冊子產品login.py核心代碼如下:
1.4.3 用戶端登入成功後,服務端會等待接收用戶端發來的指令,指令的解析,執行由dataAnalysis.py子產品執行,核心代碼如下:
執行用戶端指令後,繼續等待接收用戶端發來的指令,如此循環...。
2.1 目錄結構如下:
2.2 目錄簡介:
client:程式主目錄。
bin:程式入口,程式啟動檔案main.py用于建立socket連接配接,然後調用FTPclient.py子產品下的run_ftp_client方法運作程式。
app:程式主邏輯,目錄下有四個子產品如下:
FTPclient.py:FTP用戶端,根據使用者選項,執行使用者指令。
dataAnalysis.py:指令解析子產品,解析使用者輸入的指令,發給服務端擷取結果。
FileOpertion.py:負責檔案讀,寫。
lib:存放公共資料,有兩個檔案:
commom.py:主要存放的是公共變量。
help.txt:存放的是幫助文檔,當使用者執行help指令時會調用該檔案。
2.3 子產品中類的繼承關系
2.4 執行流程
2.4.1 程式入口main.py,啟動後會與FTP服務端建立連接配接,與服務端連接配接成功後會調用FTPclient.py子產品下的run_ftp_client方法,執行使用者功能。核心代碼如下:
2.4.2 FTPclient.py子產品下的run_ftp_client方法會列印菜單,并等待使用者輸入選項,執行相應功能,核心代碼如下:
2.4.3 login.py子產品主要用于處理注冊和登入的功能,核心代碼如下:
2.4.4 使用者登入成功後,會等待接收使用者輸入指令,由dataAnalysis.py子產品負責解析使用者輸入的指令,并将指令發給FTP伺服器,然後接收伺服器的回報。核心代碼如下:
測試環境:FTP伺服器:虛拟機 centos 7 192.168.10.10
FTP用戶端:本機 Windows 7 192.168.1.103
FTP用戶端:虛拟機 Windows 7 192.168.10.102
使用者被鎖定在FTP家目錄(/home/FTP_HOME/使用者名)中,無法檢視其它使用者的檔案。
檔案傳輸是經過MD5加密的,傳輸完成後用戶端和服務端需要對MD5進行效驗。傳輸完成後可以使用free檢視使用者空間。
将上面下載下傳好的2.exe更名為3.exe。一會和斷點續傳的2.exe對比大小,兩個檔案大小一緻才對。