針對此開源專案的說明,結構分析。
服務端整體框架:
1. 從命令列輸入得到服務端繫結埠號
2. 設定套介面選項,建立監聽套接字。
3. 用while迴圈 + fork實現子程序與客戶端的交流。
4. 父程序的交流套接字關閉,子程序的監聽套接字關閉。
在子程序與客戶端的交流中:
1. 傳送220歡迎應答碼。
2. 接收客戶端傳來的使用者名稱、密碼資訊,與檔案的內容相比對,如果有,則認證成功,傳送230應答碼;失敗傳送430應答碼,並退出。
3. 迴圈處理使用者的請求,接收客戶端傳來的命令,此專案提供如下命令的解析。接收到user,pass,list,retr則傳送應答碼200,收到quit傳送應答碼221(),其他命令視為無效命令。
4. 如果應答碼為200,繼續處理。採用被動模式,客戶端建立監聽套接字等待服務端主動連線,建立資料連線,之前建立的是控制連線。
5. 如果接收到list命令,將當前目錄重定向到檔案中,在資料連線中傳送檔案中的內容,傳送成功後,在控制連線中傳送應答碼226,關閉資料連線;
如果接收到retr命令,則開啟檔案,在資料連線中傳送檔案,傳送成功後,在控制連線中傳送應答碼226,關閉資料連線。
客戶端整體框架:
1. 從命令列輸入得到伺服器主機名和埠號。
2. 通過getaddrinfo得到期望的返回型別資訊的暗示,實現主機名和伺服器名轉換成套介面位址結構的功能,與服務端進行連線。
3. 輸入使用者名稱、密碼進行驗證。
4. 傳送命令到伺服器,接收伺服器返回應答碼,如接收到221,則退出;接收到502,則顯示不合法的輸入;接收到200,處理命令。
接收到200,開啟資料連線,客戶端建立監聽套接字,在之前的控制連線上傳送乙個ack確認,接收伺服器的連線,關掉監聽套接字。如果是list命令,先通過控制連線接收伺服器傳來的訊息,在通過資料連線列印出目錄,最後接收伺服器傳來完成的訊息,關閉資料連線。如果是retr命令,開啟檔案失敗返回錯誤碼550,關閉資料連線進行下乙個迴圈;檔案存在則通過資料連線寫入檔案,關閉資料連線。
MapReduce技術的開源C語言實現
一 stanford大學的phoenix系統 單機多核的應用 1 phoenix是在共享記憶體的體系結構上的mapreduce實現。它的目標是在多核平台上,使程式執行得更高效,而且使程式設計師不必關心併發的管理。事實上併發管理,儘管是經驗豐富的程式設計師,也難免在這上面出錯。2 phoenix由一組...
MapReduce技術的開源C語言實現
一 stanford大學的phoenix系統 單機多核的應用 1 phoenix是在共享記憶體的體系結構上的mapreduce實現。它的目標是在多核平台上,使程式執行得更高效,而且使程式設計師不必關心併發的管理。事實上併發管理,儘管是經驗豐富的程式設計師,也難免在這上面出錯。2 phoenix由一組...
關於ceiling 的C語言實現
設計乙個函式實現 假設變數x和n是兩個正整數,我們知道x n這個表示式的結果要取floor,例如x是17,n是4,則結果是4。如果希望結果取ceiling應該怎麼寫表示式呢?例如x是17,n是4,則結果是5 x是16,n是4,則結果是4。網上的答案和解析 把問題乘除拆為整數乘和加餘數分析,我覺得有點...