整體歸納來講就是設計一個Web服務器的流程,將執行流程分爲簡單的步驟,每一個步驟做爲一個模塊來實現。服務器
一、總體設計併發
服務器程序發送文件給客戶端或者從客戶端接收文件,每次通訊只能作一次文件傳輸,傳輸完畢後準備處理下一次通訊。客戶端程序,接收或者發送一個文件後就能夠退出。所以,服務器短程序是一個死循環,處理一次以後不退出,繼續監聽。客戶端程序處理一個鏈接就能夠了。spa
二、客戶端程序設計設計
客戶端程序主要任務有3個,ci
(1)分析用戶輸入的命令字符串
(2)根據命令向服務器端發出請求get
(3)等待服務器返回請求的結果table
第一個任務是分析命令,本FTP程序客戶端給用戶提供8種命令,以下表所示:程序設計
用戶輸入的命令服務器端 |
命令含義 |
get |
從服務器獲得文件 |
put |
向服務器傳輸文件 |
cd |
進入客戶端的目錄 |
!cd |
進入服務器端的目錄 |
ls |
列出客戶端當前目錄的內容 |
!ls |
列出服務器端當前目錄的內容 |
connect |
鏈接服務器 |
bye |
退出程序 |
客戶端經過標準輸入獲得一個字符串,分析字符串獲得命令和參數,所以須要固定字符串的輸入。固定好輸入格式以後,客戶端將字符串進行拆分判斷來完成對應的功能。用戶輸入的每個命令,都會經過客戶端給服務器發送一個請求碼,服務器端經過識別這個請求碼來判斷客戶端的請求,從而進行處理。下面是用戶輸入的命令與對應請求的表:
用戶輸入的命令 |
對應的請求 |
get |
GET |
put |
PUT |
cd |
不須要與服務器通訊,無請求 |
!cd |
CD |
ls |
不須要與服務器通訊,無請求 |
!ls |
LS |
connect |
發出鏈接請求,不須要服務器端額外處理,因此沒有請求碼 |
bye |
BYE |
三、服務器端程序設計
服務器程序與客戶端程序相似,也是有3個任務。
(1)分析請求代碼
(2)根據請求代碼作出相應的處理
(3)等待返回結果或者應答信息
根據上邊客戶端的設計咱們知道在服務器端對應須要處理的請求碼只有5種,以下表所示:
請求代碼 |
對應的處理 |
GET |
向客戶端傳輸文件 |
PUT |
接受客戶端的文件 |
CD |
進入目錄 |
LS |
將當前目錄內用傳輸給客戶端 |
BYE |
斷開鏈接 |
分清楚任務以後,有兩個主要環節須要明確,就是通訊協議和服務器模型,本程序的通訊協議分爲兩種。一種是get命令、put命令和!ls命令須要傳輸文件內容的命令,採用「四次握手」的通訊協議;一種是!cd命令這種不須要傳輸文件內容的命令採用「兩次握手」的通訊協議。
服務器端使用併發服務器的模型,若是客戶端發生阻塞,服務器依然能處理其餘鏈接。