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