伺服器實現 FTP伺服器的實現(C語言)

2021-10-14 16:50:21 字數 1779 閱讀 6137

我們在之前的文章中,曾經對ftp檔案傳輸協議做過詳細的介紹。本章,我們對如何用c語言實現ftp伺服器做乙個簡單的介紹。

概述

ftp檔案傳輸協議,是網際網路上使用得最廣泛的檔案傳輸協議。ftp提供互動式的訪問,允許客戶指明檔案的格式與型別,並允許檔案具有儲存許可權。ftp遮蔽了不同作業系統之前的細節,因此適合在異構網路中任意計算機之間傳送檔案。

ftp的基本工作原理

ftp使用c/s方式,乙個ftp伺服器可以為多個客戶程序提供服務,ftp伺服器程序由兩大部分組成:乙個主程序,負責接收新的請求;另外有若干個從屬程序,負責處理單個請求。

主程序的工作步驟如下:

開啟埠號(一般為21),使客戶端能通過此埠號訪問;

等待客戶端發出連線請求;

啟動從屬程序來處理客戶程序發來的請求。從屬程序對客戶程序的請求處理完後即終止,從屬程序在執行期間可能會根據需要另外建立其他一些程序。

回到等待狀態,繼續等待其他客戶程序發來的連線請求。主程序和從屬程序是併發進行的。

在進行檔案傳輸時,ftp的客戶和伺服器之間要建立兩個並行的tcp連線:「控制連線」和「資料連線」。控制連線在整個會話期間一直保持開啟,ftp客戶所發出的傳送請求,通過控制連線傳送給伺服器端的控制程序,但是控制連線並不會用於傳輸資料。實際傳輸檔案的是「資料連線」。伺服器端的控制程序在接收到ftp客戶傳送來的檔案傳輸請求後,就會建立「資料傳送程序」「資料連線」,用來連線客戶端和伺服器端的資料傳送程序。由於ftp使用了乙個分離的控制連線,因此ftp的控制資訊是帶外控制的。

當客戶程序向伺服器程序發出建立連線請求時,通過伺服器端口號21請求連線,同時會告訴伺服器程序自己用於建立資料傳送連線的另乙個埠號。伺服器一般使用埠號20同客戶程序建立資料連線,由於ftp使用兩個不同的埠號,所以資料連線和控制連線不會發生混亂。

綜上所述,我們可以畫出基本的演算法流程圖

**實現:

控制埠的定義

/* define ftp control port */#define controlport 21
主函式
/**  * sets up server and handles incoming connections * @param port server port */int main()        if(pid==0)              memset(buffer,0,bsize);              memset(cmd,0,sizeof(cmd));            } else         }         printf("client disconnected.");         exit(0);    }else  }}

python實現FTP伺服器

使用python的pyftpdlib庫可以建立乙個簡單的ftp服務,首先需要安裝這個庫。安裝很簡單,開啟命令列用pip直接安裝就可以 pip install pyftpdlib 或者 python m pip install pyftpdlib ftp分為被動模式和主動模式,這裡不細說了,下面的例子...

用Java實現FTP伺服器

ftp 命令 ftp 的主要操作都是基於各種命令基礎之上的。常用的命令有 設定傳輸模式,它包括asc 文字 和binary 二進位制模式 目錄操作,改變或顯示遠端計算機的當前目錄 cd dir ls 命令 連線操作,open命令用於建立同遠端計算機的連線 close命令用於關閉連線 傳送操作,put...

用Java實現FTP伺服器

ftp 命令 ftp 的主要操作都是基於各種命令基礎之上的。常用的命令有 設定傳輸模式,它包括asc 文字 和binary 二進位制模式 目錄操作,改變或顯示遠端計算機的當前目錄 cd dir ls 命令 連線操作,open命令用於建立同遠端計算機的連線 close命令用於關閉連線 傳送操作,put...