摘要:本文根據(jù)“網(wǎng)絡編程”教學課題組多年的實際教學經(jīng)驗,分別對理論、實踐、考核教學環(huán)節(jié)中的教學方法進行了總結(jié),強調(diào)以學生為主體,結(jié)合案例教學,采用啟發(fā)式、互動式、目標式多種教學方法,在實際教學中取得了較好的效果。
關(guān)鍵詞:網(wǎng)絡編程;教學方法;理論教學;實踐教學
1課程介紹
網(wǎng)絡編程通常包括3類編程[1]:基于TCP/IP協(xié)議簇的網(wǎng)絡編程、基于WWW應用的網(wǎng)絡編程、Web Service網(wǎng)絡編程。“網(wǎng)絡編程”課程主要是指基于TCP/IP協(xié)議簇的編程方式,作為“計算機網(wǎng)絡”的后續(xù)課程,在計算機類專業(yè)課程體系中占有十分重要的位置,是網(wǎng)絡工程專業(yè)的必修課。本課程要求學生在理解計算機網(wǎng)絡的基本理論的基礎上,運用高級語言進行編程開發(fā),注重實踐環(huán)節(jié)。因此我們在大四上學期開設本課程,總學時為54(34+20)學時。
2教學方法設計
2.1理論教學
(1) 以人為本,學生自選編程語言。現(xiàn)有的網(wǎng)絡編程語言主要有MFC C++/C#.NET/Java[1-3],后兩種語言是目前的主流選擇。早期的網(wǎng)絡編程大都是基于UNIX或Windows的套接字API,采用C或C++作為編程語言。此后由于Java鮮明的網(wǎng)絡特色和跨平臺特性,J2EE技術(shù)的推廣普及,使用Java進行網(wǎng)絡編程比較普及;而微軟推出的.NET開發(fā)平臺,由于其與Windows操作系統(tǒng)的無縫集成,開發(fā)工具的便捷、高效性,使得以C#.NET進行網(wǎng)絡編程也逐漸流行。
“網(wǎng)絡編程”課程強調(diào)基于網(wǎng)絡基本理論的編程實踐,雖然不與具體的編程語言有必然的聯(lián)系,但是編程語言在教學環(huán)節(jié)中又非常重要。就學生來說,學習網(wǎng)絡編程時正是高年級階段,必修課程學過高級程序設計(C或C++)、面向?qū)ο蟪绦蛟O計(Java)、.NET開發(fā)(C#.net),任選其中的一種語言似乎都可行。但據(jù)開課前我們對學生的調(diào)查顯示,92%的學生愿意選擇Java或C#中的一種,其中部分同學首選Java(有部分同學未修C#課程),另有部分同學強烈希望使用C#進行編程。因此,課程教學課題組決定,學生可以根據(jù)個人的實際或興趣任選其中一種編程語言,教師上課側(cè)重網(wǎng)絡基本理論的講解,編程實踐以C#和Java為主,并給出兩種示例代碼。
(2) 結(jié)合案例,強調(diào)基本概念的理解與實踐相融合。網(wǎng)絡編程作為應用型課程,其理論基礎部分已在計算機網(wǎng)絡課程中學習過,但偏重理論介紹,學習偏于單調(diào)枯燥,不排除學生死記硬背的可能。上課時結(jié)合實踐中的具體案例進行講解,如網(wǎng)絡游戲、即時通信工具(如QQ)的實現(xiàn)原理,無疑會提高學習興趣,真正做到理論與實踐相融合。但是如果不能真正理解基礎概念,進行網(wǎng)絡編程實踐則相當困難,因此,在網(wǎng)絡編程學習中需要強調(diào)基本概念的理解與實踐。下面舉例說明。
套接字(Socket):是對網(wǎng)絡中不同主機上應用進程之間進行雙向通信的端點的抽象,如圖1所示,一個套接字就是網(wǎng)絡上進程通信的一端,兩個應用進程只要分別連接到自己的套接字,就能方便地通過計算機網(wǎng)絡進行通信。套接字是一個復雜的軟件機構(gòu),由操作系統(tǒng)內(nèi)核管理。套接字生成后用一個整數(shù)(套接字描述符)來代表,使用時要與計算機上的特定IP地址和傳輸層端口號相關(guān)聯(lián),這個過程稱為綁定。
② 對比分析建立連接的3次握手過程。為確保連接的建立和終止都是可靠的,TCP使用3次握手(3-way handshake)的方式來建立連接。圖2示范了“計算機網(wǎng)絡”課程中建立連接的典型示意圖,圖3示范了流式套接字建立連接的過程,通過對比分析,學生可以一目了然的理解連接是如何建立的。
圖2TCP的3次握手過程
③ 多線程的使用。在網(wǎng)絡應用進程通信時,普遍采用客戶機/服務器交互模式(Client-Server paradigm of interaction),簡稱C/S模式。如圖4所示,作為服務器的一方,如果需要同時與多個客戶端進行通信,服務端應用程序的設計就必然使用多線程編程。因此,熟練操作線程是實現(xiàn)網(wǎng)絡應用程序的關(guān)鍵。
在Socket的C#程序設計中,服務器端監(jiān)聽線程創(chuàng)建多個線程與客戶端進行通信的過程示例代碼為:
圖3流式套接字編程的基本步驟
圖4服務器創(chuàng)建多個線程與多個客戶通信
IPEndPoint ipep = new IPEndPoint(IPAddress.Any,6001);
Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
serverSocket.Bind(ipep);
serverSocket.Listen(10);
while (true)
{//循環(huán)監(jiān)聽
try
{
//在套接字上接收接入的連接
clientSocket = serverSocket.Accept();
clientThread = new Thread(new ThreadStart(ReceiveData));
clientThread.Start();
}
catch (Exception ex)
{ MessageBox.Show(\"監(jiān)聽錯誤:\" + ex.Message); }
}
客戶端與服務器建立連接代碼片斷:
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(\"127.0.0.1\"),6001);
Socket clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
clientSocket.Connect(ipep);//阻塞模式,連接服務器(本機)
(3) 啟發(fā)興趣、加強互動,豐富教學資源。興趣是學習的動力,在教學過程中提供豐富的教學資源和多種教學形式是提高學生學習興趣,促進其主動學習的關(guān)鍵。
① 公布電子課件、示例源代碼,學生可自由下載,并鼓勵在課前進行預習。對于完成效果較好、有創(chuàng)新點的學生實驗作品,提出嘉獎并在網(wǎng)上公開。
② 加強教與學的互動,切實做好答疑環(huán)節(jié)。學生可以方便地通過郵件、短信、QQ等形式與課題組所有老師聯(lián)系或提出疑問,而教師也會及時進行回復。
③ 結(jié)合課程特點和互聯(lián)網(wǎng)應用的實際情況,設計受歡迎的實驗題目。目前流行的互聯(lián)網(wǎng)應用系統(tǒng),如網(wǎng)絡游戲、即時通信系統(tǒng)等,學生自己獨立完成都成為可能。
④ 介紹Linux及Unix操作系統(tǒng)下網(wǎng)絡編程的實現(xiàn)。目前的編程環(huán)境以Windows操作系統(tǒng)為主,而了解其他的開發(fā)環(huán)境和實現(xiàn)方式也會提高學習的興趣。
2.2實踐教學
如表1所示,將8個實驗總學時數(shù)定為20,分為選做實驗和必做實驗,兩種實驗都必須按要求完成。選做實驗主要是指驗證性實驗,上機調(diào)試通過即可;必做實驗為教師重點檢查實驗,要求提交實驗報告,上機運行并根據(jù)實驗的完成效果由教師現(xiàn)場給出成績。綜合性實驗是必做實驗,可以單人完成,也可小組(2~3人)合作實現(xiàn)。
表1 實驗課程安排
實驗名稱學時說明
Socket2必做,驗證性實驗
TCP2選做,驗證性實驗
UDP2選做,驗證性實驗
TCP/UDP綜合4必做,綜合性實驗
FTP2選做,驗證性實驗;
3個實驗任選一個
SMTP/POP32
HTTP2
綜合設計實驗4必做,綜合性設計性試驗
在所有實驗當中,綜合設計實驗一般是在學期末布置,綜合運用本課程所學知識進行設計相對較大型、有一定難度的實驗。但是如果在學期末才布置實驗內(nèi)容,會因為學生時間緊張、實驗時間短的問題而影響實驗效果。因此我們實行“目標式”教學方法:從學期開始就要求學生根據(jù)自己的興趣愛好,從綜合性設計性實驗題目中選取一個(或多個)作為實驗目標,讓學生較早了解實驗內(nèi)容和要求,在平時學習中有針對性地準備,到學期末完成實驗目標就水到渠成。實踐表明,這種目標教學法既可以提高學習動力,同時實驗完成效果也較為理想。
3考核方式
期末成績?yōu)榫C合成績,分為期末考試成績和平時成績,其中綜合成績=期末考試成績(70%)+平時成績(30%,包括實驗成績、考勤情況等)。期末考試為閉卷考試(120分鐘),重點考核基本理論的理解及其實現(xiàn);平時成績主要針對學生上課的出勤率、上課表現(xiàn)等情況,按比例折算實驗成績(實驗成績?yōu)閹讉€必做實驗的綜合平均)。例如:如果出勤率較高、上課表現(xiàn)積極,則平時成績就是實驗成績的100%。由于實驗成績由教師根據(jù)實驗效果現(xiàn)場給出,分數(shù)的高低也鼓勵學生認真完成實驗要求并力求創(chuàng)新,從而促進了學習的積極性。
4結(jié)語
在課題組教師的共同努力下,通過幾個學期來對網(wǎng)絡編程教學方法的探索和實踐,本課程已經(jīng)建立起較完善的教學體系和教學方法。從教學效果來看,提高了學生的積極性和主動性,增強了學生的創(chuàng)新能力、分析解決實際問題的工作能力。今后,我們?nèi)孕璨粩嗟匮芯浚粩嗟乜偨Y(jié)教學經(jīng)驗,使整個教學環(huán)節(jié)更加完善合理。
參考文獻:
[1] 葉樹華,高志紅. 網(wǎng)絡編程實用教程[M]. 北京:人民郵電出版社,2006.
[2] 汪曉平,賈敬習,李功. 精通Java網(wǎng)絡編程[M]. 2版. 北京:清華大學出版社,2009.
[3] 梅曉冬,顏華青. Visual C#網(wǎng)絡編程技術(shù)與實踐[M]. 北京:清華大學出版社,2008.
Teaching Method Discussion of “Network Programming”
LIU Han-xing, LIU Cai-xing, KUANG Ying-jie, TIAN Xu-hong
(College of Informatics, South China Agriculture University, Guangzhou 510642, China)
Abstract: Based on practical teaching experience of Network Programming teaching team, the methods are summarized of theory, practice and examine teaching. Student-centered is emphasized, cases are combined in teaching, several teaching methods are used, such as heuristics, interactive and target methods, and good effect is acquired in our teaching practice.
Key word: Network Programming; teaching method; theory teaching; practice teaching (編輯:白杰)