freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

畢業(yè)論文基于linux的ftp服務器的研究與實現(編輯修改稿)

2024-12-13 20:55 本頁面
 

【文章內容簡介】 導入配件 創(chuàng)建守護進程 創(chuàng)建共享內存并且進行初始化 創(chuàng)建數據進程并進入相應的函數進行處理 創(chuàng)建套接字并監(jiān)聽 接收客戶端連接創(chuàng)建新的套接字 是否接受該用戶的連接 創(chuàng)建子進程并處理該用戶 開始 結束 基于 Linux的 FTP 服務器 9 進程的啟動 在 Linux環(huán)境下編程可以利用一個很好的工具,這個工具就是功能非常強大的 SHELL,在 Linux 中 SHELL 是“ Bash”。 Bash 的優(yōu)點是命令補全功能,命令歷史(就是正常退出登錄時會自動保存歷史文件),而且重點是可以在前臺或者 后臺執(zhí)行。為了節(jié)省系統資源,我用腳本的形式寫的進程啟動可以再后臺默默的執(zhí)行而不打擾其它進程的執(zhí)行。而所謂的SHELL 是一個交互式命令解釋器和一種命令編程語言,采用的語法和 C 編程語言及其相似,只是寫的字母順序相反,是交互式地從終端鍵盤或者是從一個文件來執(zhí)行命令的。因此 SHELL 不僅可以用來執(zhí)行命令,還可以用來編寫程序,并且它使用的是解釋型語言,對其調度相對 C 語言來說比較容易 [9]。不僅如此,使用 SHELL 進行程序編程可以簡單的完成一些小任務,同時就算是最古老的版本的 Linux 也會在安裝中提供一個 SHELL,所以用 SHELL 編寫出來的腳本易于移植。以下是本課題 FTP 服務器項目中所寫的啟動,停止,重起服務器的 SHELL 腳本。 !/bin/bash //為本腳本解析使用哪種 shell 來解釋一下的代碼 Source function library.//源程序的庫函數 . /etc/ Source working configuration.//網絡狀態(tài) . /etc/sysconfig/work Check that working is up.//檢查網絡是否連接 ${NETWORKING}是一個數組 [ ${NETWORKING} = no ] amp。amp。 exit 0//0 表示正常退出 1 表示異常退出 [ x /usr/local/bin/hfftpd ] || exit 0 RETVAL=0//一個標志位 prog=hfftpd//進程名字 start(){ echo $Starting $prog... /usr/local/bin/hfftpd /etc/hfftpd/amp。 daemon true//這句 daemon true 是指要用 service hfftpd start 這種方式啟動腳本,注意腳本要拷貝到 /etc/,并且沒有 .sh 后綴 RETVAL=$? echo return $RETVAL } stop(){ echo $Shuting down $prog... killproc $prog 3 //這句是為了刪除共享內存而設置的,如果不刪除就會消耗系統資源。 福州大學陽光學院本科生畢業(yè)設計(論文) 10 RETVAL=$? echo return $RETVAL } case $1 in start) start 。 stop) stop 。 restart) stop echo $prog starting... sleep 1。 start RETVAL=$? 。 *) echo $Using as: $0 start|stop|restart exit 1 Esac exit $RETVAL 其中 是注釋的意思。系統通過 case 程序中的 $1 的參數只能允許為 start,stop,restart,來判斷得到哪一個參數而做其所對應的工作。如果是“ start”的時候,系統會根據 RETVAL的值判斷是不是第一次啟動,如果 RETVAL 是 0那么就是還未被啟動,因此系統允許啟動服務器,如果不是就提示服務器已經啟動的字眼。當參數如果是“ stop”命令時,就先把所有 main 進程關閉并向每個主函數進程發(fā)送 SIGQUIT,和 SIGKILL 信號( SIGQUIT 是退出信號, SIGKILL 是殺進程的信號), SIGQUIT 信號在 main 進程中都對它們進行了安裝 ,處理函數中有對它們的進行處理,如果是 restart 命令時要先關閉進 程再啟動 main 進程也就是重啟。 基于 Linux的 FTP 服務器 11 守護進程的實現 Linux 系統在啟動過程中會開啟很多后臺服務和進程,而其中運用的一個重要技術就是守護進程。 守護進程是生存期很長的一種進程,它會自動轉到后臺運行而且脫離與終端的聯系不受終端的控制, 為了能夠等待解決一些事件的發(fā)生,它執(zhí)行任務的時候是用周期性重復的執(zhí)行方式 , 因此為了避免掛起,我在 FTP 也創(chuàng)建了一個守護進程來守護本 FTP服務器。創(chuàng)建守護進程的關鍵步驟如下 : ( 1) 在后臺實現 要實現守護進程在后臺實現,就必須讓守護進程不被掛起,采用的方法是調用 fork()函 數讓父進程結束,這樣守護進程就會作為子進程在后臺運行。 ( 2) 脫離控制終端,登錄會話和進程組 雖然守護可以在后臺運行,但是調用 fork()函數后產生的子進程的所擁有的資源是繼承父進程,包括其進程組、登錄會話、控制終端等,而這些是可以被系統收回的。為了能夠讓守護進程獨立出來,不受控制就可以調用 setsid()函數, setsid()函數的主要功能就是使進程成為新的進程組長和會話組長,這樣就能夠從父進程那邊繼承下來的登錄會話和進程組真正脫離。 ( 3) 禁止進程重新打開控制終端 通過上面的設置進程就可以脫離控制終端限 制,但是它仍然可以向系統申請一個新的控制終端,這樣有了控制終端又會受到控制,為了避免這種情況,就要使進程不能成為會話組長。 ( 4) 關閉打開的文件描述符 因為在 fork()一個子進程的同時,子進程會創(chuàng)建它的父進程那里復制一份文件描述符。而守護進程是一直在后臺默默的運行的,只要不殺死它就不會停止運行。 關閉文件描述符不僅可以避免系統資源浪費,并且可以防止進程所在的文件系統因文件描述符一直存在而無法卸下導致的問題發(fā)生。 ( 5) 改變當前工作目錄 Linux 規(guī)定進程的工作目錄在其運行的時候是不允許被卸下的,如果把進程的 工作目錄放到自定義的目錄的話,可能會出現被關閉而卸下的情況。因此,最好把進程的工作目錄改到系統的特定目錄下,這樣就不會被常規(guī)操作卸下。 ( 6) 重設文件創(chuàng)建掩模 因為子進程的資源是從父進程那邊繼承下來的,它會繼承文件創(chuàng)建掩模使守護進程所創(chuàng)建的文件存取位被修改。 因此要把這個文件創(chuàng)建掩模清除,自己再重新創(chuàng)建一個掩模。 ( 7) 處理 SIGCHLD 信號 進程結束的時候,系統會發(fā)出 SIGCHLD 信號。 服務器進程 在請求到來生成子進程處理請求時, 子進程可能會成為僵尸進程導致系統資源消耗,因為父進程可能先于子進程結福州大學陽光學院本科生畢業(yè)設計(論文) 12 束 [10]。 所以在這里要對這個信號進行一定的處理。 具體代碼在附件中。 工作模式的實現 FTP 的過模式主要主動模式 (port)好被動模式 (pasv),兩種模式的模型如圖 43 所示。 (1)我打開了 N 端口,你來連接我吧 (1)我打開了 N 端口你來連接吧 (2)我主動來連接你的 N 端口 (2)我來連接你 圖 43 potr(左 )pasv(右 )的模型 由圖可知, FTP 的主動模式主要是首先客戶端發(fā)送了連接請求,然后服務端接收到請求后由服務端主動連接客戶端的一種工作模式。而被動模式的模型和主動正好相反,是先客戶端發(fā)送了連接請求,然后服務端把自己的 IP 和端口號發(fā)給客戶端,由客戶端來連接服務端的一種工作模式?;谝陨系墓ぷ髂J奖緦崿F方法是:首先,先寫一個測試函數通過data_conn_sock 的返回值量來判斷, data_conn_sock 的返回值是通過客戶端那邊發(fā)送過來的命令被服務端截取之后和“ port”與“ pasv”比得出結果的。然后,如果是主動連接的時候,就把從客戶端得到的 IP 和端口號放入到哈希表里面,用于以后的 IP 連接數控制。如果測試到被動連接的時候要客戶端的 IP 和端口號從配置文件中獲取出來當然也可以通過自己寫的一個功能函數 get_host_ip()功能是獲取 IP,并且通過系統函數 getsocketname 在還沒調用 bind 之前綁定 0 端口得到系統內存分配的一個還沒被使用的端口號 ,然后把點分十進制的 IP 和后面的端口號以“ ,”的形式組裝出來給一個臨時變量發(fā)送給客戶端,所以當客戶端接收到 例如 PORT 192,168,203,5,9,91 它表示客戶端的 IP 地址是 ,端口是9*256+91[11]。 然后創(chuàng)建一個新的套接字,并設置 IP 和端口地址重用,用來綁定和監(jiān)聽客戶端是否連接進來。最后進入數據連接進程里面進行處理。測試函數的流程圖 44 如下: FTP 服務端 FTP 客戶端 FTP 服務端 FTP 服務端 基于 Linux的 FTP 服務器 13 否 是 否 否 是 圖 44 測試函數流程圖 監(jiān)控模塊的實現 本系統的監(jiān)控模塊主要設計了以下內容,其中第一和第二兩點是重點內容,第三點基本的 FTP 服務器都有。限制上傳,下載速度;限制 每 IP 連接最大數及總 IP 連接數;統計上傳下載的文件個數及大小。在監(jiān)控模塊中我用到的知識點主要有信號量的使用,共享內存的使用和哈希表的 使用。首先信號量在這里相當于一個標志,就是 IP 是否已連接的標志,而共享內存中存放的是 IP 的總連接數,即總共有幾臺主機連到了服務端。而哈希表在這里的主要作用是通過一個進程號找到 IP 地址,再通過 IP 地址找到目前為單 IP 的連接數。 限制上傳,下載速度的實現 在配置文件中我設置了一個文件上傳和下載的最大速度,這個主要是為了防止用戶上傳下載出現異常的情況。上傳下載速度的限制的主要思想是用一個變量保存當前下載或是上傳多少個字節(jié)了,當達到配置中限制的最大速度(單位字節(jié)每秒)時讓其睡眠一秒鐘。這樣就達到了上 傳下載的速度限制。那么如何計算當前的上傳和下載的字節(jié)數呢?這就是判斷是否為port 接受上傳的命令 創(chuàng)建套接字 SOCKK 創(chuàng)建套接字接收客戶端的連接 返回值 data_conn_sock 為創(chuàng)建的新連接返回的套接字 綁 定 是否成功 監(jiān)聽 返回值創(chuàng)建的新連接返回的套接字 開始 結束 福州大學陽光學院本科生畢業(yè)設計(論文) 14 我下面要講的重點內容。首先打開文件,驗證是否斷點續(xù)傳,然后安裝時鐘信號處理函數,之后每隔一秒發(fā)送一次時鐘信號,接著進行數據的傳輸,在此記下傳輸總字節(jié)數的大小,然后通過信號函數處理計算出此時的速度,與配置文件里面的相比,如果偏大了就休眠一秒,以此達到速度的限制。最后結束的時候是對共享內存的空間進行操作。信號處理函數計算實時速度的代碼在附件中,這里不做詳細描述。 單 IP 連接數和總連接數的控制實現 對單 IP 連
點擊復制文檔內容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1