章曉敏 陳浩松
(寧波大紅鷹學院,浙江 寧波 315175)
“Linux網(wǎng)絡(luò)傳輸系統(tǒng)”是本課程的課程項目,通過項目導學,指引學生了解要開發(fā)該項目,必須掌握Linux基本命令、shell編程、Linux下文件I/O操作、進程控制、進程通信、線程、網(wǎng)絡(luò)編程等相關(guān)知識,同時,還必須熟悉一些常用的算法,理解簡單的編程思想。為了便于理解和掌握Linux C程序設(shè)計知識,將項目所需的全部知識按照循序漸進的學習規(guī)律,劃分為6個不同的階段。每一階段輔以單元項目進行訓練,將知識轉(zhuǎn)化為解決問題的技能,為綜合項目的完成打下堅實的基礎(chǔ)[1-2]。
在第 1 階段,通過項目“SSH終端及登錄”,學生應(yīng)掌握Linux基本命令的使用。
在第 2 階段,通過項目“Linux下的學生成績統(tǒng)計”,學生應(yīng)掌握Linux編程工具的使用:vi,gcc,gdb,make,Makefile。
在第 3 階段,通過項目“Shell程序設(shè)計”,命令行參數(shù)、環(huán)境變量設(shè)置和shell語法。
在第 4 階段,通過項目“文件操作”,學生應(yīng)掌握Linux文件系統(tǒng)、文件結(jié)構(gòu)和文件I/O。
在第 5 階段,通過項目“進程控制和進程通信”,學生應(yīng)掌握進程的創(chuàng)建、進程的通信方式以及編程方式
在第 6 階段,通過項目“基于網(wǎng)絡(luò)的進程間通信”,學生應(yīng)掌握網(wǎng)絡(luò)命令、網(wǎng)絡(luò)協(xié)議、基于TCP和UDP協(xié)議網(wǎng)絡(luò)通信實現(xiàn)服務(wù)器端和客戶端一對一的通信過程。
因此,課程結(jié)束后,水到渠成地即可開發(fā)出“Linux網(wǎng)絡(luò)傳輸系統(tǒng)”課程項目。
項目構(gòu)思(C):
我們經(jīng)常會接觸到一些網(wǎng)絡(luò)應(yīng)用程序,例如網(wǎng)絡(luò)聊天程序等等。這里我們要開發(fā)一個類似的系統(tǒng),該系統(tǒng)運行于網(wǎng)絡(luò)環(huán)境中,通信雙方可以互相傳輸數(shù)據(jù),并可以將接收到的數(shù)據(jù)保存在文件中。
需求分析:
服務(wù)器:通過多線程/多進程(應(yīng)更側(cè)重于多線程)并發(fā)服務(wù)器方式與客戶端通信,接受客戶端連接后,顯示客戶端IP,接收客戶端發(fā)來的數(shù)據(jù)并顯示在屏幕上,然后將該數(shù)據(jù)反轉(zhuǎn)后發(fā)給客戶端。如果客戶端發(fā)來bye,給客戶端返回信息后斷開與客戶端的連接。
客戶端:與服務(wù)器建立連接后,從鍵盤獲得數(shù)據(jù)并發(fā)給服務(wù)器,然后接收服務(wù)器發(fā)力愛的信息并顯示到屏幕上。如果鍵盤輸入bye,則斷開與服務(wù)器的連接。將建立連接、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、斷開連接過程的時間及相關(guān)信息寫入日志文件,日志文件名在連接成功后根據(jù)系統(tǒng)時間命名。
客戶端與客戶端通信:兩個客戶端都與服務(wù)器建立連接,他們通過服務(wù)器互相傳輸數(shù)據(jù),即一個客戶端將數(shù)據(jù)先傳輸給服務(wù)器,服務(wù)器再將數(shù)據(jù)轉(zhuǎn)發(fā)給另一個客戶端。
項目名稱:Linux網(wǎng)絡(luò)傳輸系統(tǒng)
項目設(shè)計(D):
(一)程序結(jié)構(gòu)設(shè)計
在數(shù)據(jù)傳輸過程中為保證數(shù)據(jù)傳輸?shù)目煽啃?,采用TCP套接字,繪制TCP套接字傳輸流程。
由于服務(wù)器可能要處理多個用戶的請求,采用多進程或多線程方式處理客戶端問題。
(二)程序數(shù)據(jù)設(shè)計
服務(wù)器端:
根據(jù)套接字編程過程,需要定義以下數(shù)據(jù):監(jiān)聽套接字描述符、后者為連接套接字描述符、服務(wù)器端地址結(jié)構(gòu)、客戶端地址結(jié)構(gòu)。
多進程編程,需要定義以下數(shù)據(jù):進程ID。
與客戶端進行數(shù)據(jù)傳輸,需要定義以下數(shù)據(jù):接收緩沖區(qū)、發(fā)送緩沖區(qū)、客戶端名字。
客戶端:
根據(jù)套接字編程過程,需要定義以下數(shù)據(jù):套接字描述符、服務(wù)器端地址結(jié)構(gòu)。
與服務(wù)器進行數(shù)據(jù)傳輸,需要定義以下數(shù)據(jù):發(fā)送緩沖區(qū)、接收緩沖區(qū)、用戶緩沖區(qū)。
保存日志文件,需要定義以下數(shù)據(jù):寫入文件緩沖區(qū)、當前時間、文件描述符、當前時間的結(jié)構(gòu)體。
(三)根據(jù)系統(tǒng)總體架構(gòu)圖,設(shè)計程序基本流程
服務(wù)器端流程
客戶端流程
(四)將總體架構(gòu)圖中的各個功能模塊分別進行設(shè)計,畫出 N-S 圖
項目構(gòu)思和項目設(shè)計一起,形成一個簡單易懂的項目開發(fā)說明文檔。
項目實施(I):
根據(jù)項目設(shè)計部分得出的 N-S 圖,利用已掌握的 Linux C 語言知識及編程思想,完成各個功能模塊的函數(shù)編碼。
項目運行(O):
服務(wù)器端運行命令:
./server
客戶端運行命令:
./client 127.0.0.1
測試客戶端運行結(jié)果、服務(wù)器端運行結(jié)果和客戶端日志文件。
根據(jù)課堂講解和項目開發(fā)說明文檔,實現(xiàn)基于TCP或UDP和文件的“Linux網(wǎng)絡(luò)傳輸系統(tǒng)”,提交系統(tǒng)的全部代碼,要求系統(tǒng)要通過測試運行,并提供較清晰的注釋。