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