国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

計(jì)算機(jī)網(wǎng)絡(luò)課程中網(wǎng)絡(luò)編程的教學(xué)及實(shí)驗(yàn)設(shè)計(jì)

2015-03-27 03:03琚生根王相國(guó)
關(guān)鍵詞:服務(wù)器端代碼編程

陳 黎,琚生根,王相國(guó),周 剛

(四川大學(xué) 計(jì)算機(jī)學(xué)院,四川 成都 610065)

計(jì)算機(jī)網(wǎng)絡(luò)課程中網(wǎng)絡(luò)編程的教學(xué)及實(shí)驗(yàn)設(shè)計(jì)

陳 黎,琚生根,王相國(guó),周 剛

(四川大學(xué) 計(jì)算機(jī)學(xué)院,四川 成都 610065)

《計(jì)算機(jī)網(wǎng)絡(luò)》中網(wǎng)絡(luò)編程部分的內(nèi)容一直被理論教學(xué)忽視,而網(wǎng)絡(luò)編程部分對(duì)于學(xué)生理解應(yīng)用層協(xié)議及傳輸層的服務(wù)有著非常重要的促進(jìn)作用,同時(shí)也可以為后續(xù)開設(shè)的“計(jì)算機(jī)網(wǎng)絡(luò)編程”課程提供鋪墊。在分析了目前的教學(xué)現(xiàn)狀情況下,結(jié)合自身的特點(diǎn)對(duì)“計(jì)算機(jī)網(wǎng)絡(luò)”課程的網(wǎng)絡(luò)編程部分的教學(xué)和實(shí)驗(yàn)設(shè)計(jì)進(jìn)行了探討,通過對(duì)這部分的加強(qiáng),能夠顯著提高課堂的教學(xué)質(zhì)量,提高學(xué)生的動(dòng)手能力。

socket; 網(wǎng)絡(luò)編程; TCP; UDP

我國(guó)高校的計(jì)算機(jī)專業(yè)都開設(shè)了“計(jì)算機(jī)網(wǎng)絡(luò)”課程,但是目前的教學(xué)主要針對(duì)各種網(wǎng)絡(luò)的理論知識(shí),書中的網(wǎng)絡(luò)編程部分往往被忽略。雖然有很多高校后續(xù)會(huì)開設(shè)“網(wǎng)絡(luò)編程”課程[1-4],但是學(xué)生在學(xué)習(xí)應(yīng)用層和傳輸層相關(guān)內(nèi)容的時(shí)候會(huì)存在一些障礙,例如無法理解基于TCP的傳輸和UDP傳輸具體的差異。而通過網(wǎng)絡(luò)編程部分的簡(jiǎn)單學(xué)習(xí)以及相應(yīng)的課程設(shè)計(jì)實(shí)驗(yàn),可以幫助學(xué)生更好地理解理論知識(shí),同時(shí)為后續(xù)“網(wǎng)絡(luò)編程”課程提供扎實(shí)的鋪墊[5-6]。

1 網(wǎng)絡(luò)編程教學(xué)設(shè)計(jì)

四川大學(xué)計(jì)算機(jī)學(xué)院使用James F. Kurose的《計(jì)算機(jī)網(wǎng)絡(luò)——自頂向下方法》[7]第4版作為理論課教材,書中在第二章應(yīng)用層部分介紹了基于java的UDP和TCP網(wǎng)絡(luò)編程實(shí)例。我們以書中的實(shí)例為例介紹在網(wǎng)絡(luò)編程教學(xué)過程中的教學(xué)方法。

1.1 教學(xué)內(nèi)容

書中用了一個(gè)非常簡(jiǎn)單的實(shí)例,介紹了在基于TCP和UDP不同情況下的編程方法。在以該例作為網(wǎng)絡(luò)編程的教學(xué)過程中,不能只局限在介紹書中的代碼,更重要的是要讓學(xué)生理解到TCP和UDP的網(wǎng)絡(luò)編程存在的差異,從而有效地了解TCP和UDP的工作原理。實(shí)例的協(xié)議工作步驟如下[8]:

(1)客戶端從標(biāo)準(zhǔn)輸入(鍵盤)輸入一行字符信息。

(2)將這行字符信息通過客戶端Socket發(fā)送到服務(wù)器。

(3)服務(wù)器通過Socket接收字符信息,將所有的字符轉(zhuǎn)換成大寫字母。

(4)服務(wù)器把轉(zhuǎn)換后的大寫字符通過Socket發(fā)送到服務(wù)器。

(5)客戶端收到服務(wù)器的信息后,將其在標(biāo)準(zhǔn)輸出(顯示器)上顯示出來。

1.2 基于TCP的網(wǎng)絡(luò)編程教學(xué)

在分析代碼之前,需要先讓學(xué)生了解TCP的基本特點(diǎn):

(1)TCP在發(fā)送之前要求服務(wù)器必須先處于監(jiān)聽的狀態(tài)。

(2)TCP在建立TCP連接時(shí),必須指定服務(wù)器的地址和端口號(hào)。

(3)TCP提供可靠的、有序的字節(jié)流進(jìn)行傳輸。

(4)TCP的傳輸連接是由四元組組成(源IP,源端口,目的IP,目的端口)。

學(xué)生了解TCP基本特性以后,以類比的方法進(jìn)行講解。將管道類比為TCP連接,水流類比為數(shù)據(jù)流,水桶類比為緩沖區(qū)。讓學(xué)生理解,水流的傳輸不僅需要管道,還需要有水桶儲(chǔ)存水,同時(shí)水流是有方向的,有流入的水,也有流出的水。管道建立好以后,水能夠沿著管道自動(dòng)流向目的地。因此水在流動(dòng)的過程中是不需要關(guān)心目的地在什么地方的[9],只需要向?qū)?yīng)管道里面發(fā)送,水會(huì)根據(jù)預(yù)先鋪設(shè)的管道來決定其目的地。所以,管道在建立的時(shí)候必須要清楚知道目的地,然后發(fā)送數(shù)據(jù)流的時(shí)候只需要送到輸出管道,而接收水流的時(shí)候只需要到水桶(緩沖區(qū))中提取即可。

1.2.1 基于TCP客戶端編程教學(xué)內(nèi)容設(shè)計(jì)

在黑板上或幻燈片中分別繪制出客戶端數(shù)據(jù)流向的過程,如圖1所示。

圖1 基于TCP客戶端數(shù)據(jù)流向圖

在圖1中,系統(tǒng)的第一個(gè)數(shù)據(jù)流(System.in())將產(chǎn)生系統(tǒng)的第一個(gè)管道,將管道流出的數(shù)據(jù)信息放入到緩沖區(qū)InFromUser中存放。對(duì)應(yīng)的代碼為:

·BufferedReaderinFromUser=newBufferedReader(newInputStreamReader(System.in)).

客戶端和服務(wù)器進(jìn)行通信,創(chuàng)建socket,就好像為客戶端數(shù)據(jù)傳輸打開通信大門,對(duì)應(yīng)代碼為:SocketclientSocket=newSocket(“hostname”,6789); 客戶端創(chuàng)建socket的時(shí)候開始進(jìn)行TCP的3次握手,如果3次握手成功創(chuàng)建連接,則代碼繼續(xù)執(zhí)行后續(xù)操作;如果對(duì)方服務(wù)器未打開服務(wù),則3次握手創(chuàng)建失敗,java將拋出異常,終止后續(xù)代碼的執(zhí)行。

接下來定義客戶端的輸入輸出流,即客戶端為輸入輸出信息架設(shè)各種管道。由于服務(wù)器發(fā)送的數(shù)據(jù)流從輸入管道進(jìn)入客戶端,先放入緩沖區(qū)緩存,再進(jìn)行相應(yīng)處理。對(duì)應(yīng)的代碼為:

·DataOutputStream outToServer = new DataOutputStream ( clientSocket.getOutputStream()); //創(chuàng)建輸出流 ·BufferedReader inFromServer = new BufferedReader(new InputStreamReader ( clientSocket.getInputStream())); //創(chuàng)建輸入流并把輸入流信息放入緩沖區(qū)緩存

最后根據(jù)協(xié)議需求定義客戶端動(dòng)作,代碼如下:

·sentence = inFromUser.readLine(); ·outToServer.writeBytes(sentence + ′ ′); ·modifiedSentence = inFromServer.readLine(); ·System.out.println(″FROM SERVER:″ + modifiedSentence); ·clientSocket.close();

1.2.2 基于TCP服務(wù)器端編程教學(xué)內(nèi)容設(shè)計(jì)

在黑板上或幻燈片中分別繪制出服務(wù)器端數(shù)據(jù)流向的過程,如圖2所示。

圖2 基于TCP服務(wù)器端數(shù)據(jù)流向圖

首先服務(wù)器必須打開服務(wù)端口6789,而服務(wù)器的監(jiān)聽端口只負(fù)責(zé)請(qǐng)求的監(jiān)聽,因此創(chuàng)建的socket類型和客戶端是不同的。

·ServerSocket welcomeSocket = new ServerSocket(6789);

當(dāng)請(qǐng)求到來的時(shí)候,服務(wù)器的welcomeSocket需要接收請(qǐng)求交由connectionsocket負(fù)責(zé)處理。代碼如下:

Socket connectionSocket = welcomeSocket.accept();

連接建立完成以后,結(jié)合圖2講解服務(wù)器端的數(shù)據(jù)的流向。服務(wù)器端的數(shù)據(jù)首先從輸入流流入到服務(wù)器。從輸入流接收的數(shù)據(jù)必須流入到緩存區(qū)InFromClient中緩存起來。代碼如下:

·BufferedReader inFromClient =new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));

當(dāng)服務(wù)器處理完成數(shù)據(jù)以后需要送到輸出流,因此在socket上面加入一個(gè)輸入流管道outToClient,代碼如下:

·DataOutputStream outToClient =new DataOutputStream(connectionSocket.getOutputStream());

完成數(shù)據(jù)流向的路徑定義以后,根據(jù)協(xié)議的需求完成服務(wù)器端的動(dòng)作代碼定義。

·client Sentence = inFromClient.readLine(); ·capitalizedSentence = clientSentence.toUpperCase()+ ′ ′; ·outToClie nt.writeBytes(capitalizedSentence); ·connectionSocket.close();

1.2.3 教學(xué)小節(jié)

代碼教學(xué)完成以后,教師應(yīng)該對(duì)該段代碼分析進(jìn)行總結(jié)和拓展,并以HTTP為例介紹如何拓展到其他的應(yīng)用層協(xié)議。

如果將該段代碼改成Web服務(wù),只需要改動(dòng)服務(wù)器和客戶端的動(dòng)作代碼,客戶端在發(fā)送信息的時(shí)候必須將字符信息按照HTTP協(xié)議格式的規(guī)定進(jìn)行封裝,而服務(wù)器端需要根據(jù)HTTP協(xié)議的規(guī)范對(duì)收到的請(qǐng)求報(bào)文進(jìn)行解析,根據(jù)要求完成動(dòng)作以后,將客戶端需要的實(shí)體信息發(fā)送到outToClient的輸出流中。

1.3 基于UDP的網(wǎng)絡(luò)編程教學(xué)

首先需要學(xué)生了解UDP的特點(diǎn):

(1)UDP是無連接的傳輸層服務(wù)。

(2)UDP是以字節(jié)組(datagram)為單位進(jìn)行傳輸。

(3)UDP根據(jù)目的IP和目的端口號(hào)進(jìn)行發(fā)送。

由于UDP的特點(diǎn)決定了它和TCP的傳輸存在很大的差異。根據(jù)如圖3所示的內(nèi)容給學(xué)生一個(gè)總體的印象,了解UDP的數(shù)據(jù)發(fā)送是如何完成的。

該研究顯示,接受宮腹腔鏡子宮肌瘤剔除術(shù)治療的實(shí)驗(yàn)組糖尿病子宮肌瘤伴不孕患者,其手術(shù)用時(shí)、手術(shù)出血量、住院時(shí)間均明顯低于開腹子宮肌瘤剔除術(shù)治療的對(duì)照組;實(shí)驗(yàn)組并發(fā)癥幾率(5.00%)較對(duì)照組并發(fā)癥幾率(30.00%)低;實(shí)驗(yàn)組血糖穩(wěn)定性明顯優(yōu)于對(duì)照組。同時(shí),實(shí)驗(yàn)組子宮幾率殘留率以及子宮肌瘤復(fù)發(fā)率均明顯低于對(duì)照組,其成功妊娠率明顯高于對(duì)照組。

圖3 基于UDP的packet發(fā)送接收流程圖

1.3.1 基于UDP的客戶端編程

客戶端創(chuàng)建客戶端Socket,為發(fā)送打開大門,代碼如下:

·DatagramSocket clientSocket = new DatagramSocket();

UDP客戶端的Socket和TCP的Socket是完全不同的類型,提供的服務(wù)也不相同。由于創(chuàng)建Socket時(shí)和服務(wù)器端無任何聯(lián)系,因此,服務(wù)器端口是否打開不影響clientSocket的創(chuàng)建,這個(gè)和TCP不相同,也體現(xiàn)了其無連接的特性。

UDP的特點(diǎn)是封裝發(fā)送和接收的Packet,首先客戶端先發(fā)送Packet,因此先構(gòu)造發(fā)送的數(shù)據(jù)報(bào)。

·InetAddress IPAddress=InetAddress.getByName(″hostname"); ·byte;]sendData=new byte;1024]; ·byte;]receiveData=new byte;1024]; ·String sentence=inFromUser.readLine(); ·sendData=sentence.getBytes(); ·DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,IPAddress,9876);

然后通過send()方法即可發(fā)送sendPacket。

·clientSocket.send(sendPacket);

當(dāng)UDP客戶端從Socket中通過receive()方法接收數(shù)據(jù)的時(shí)候,需要構(gòu)造接收的Packet。

·DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length); ·clientSocket.receive(receivePacket);

然后再根據(jù)協(xié)議的要求,將獲取的Packet通過getData()方法獲取應(yīng)用層數(shù)據(jù)內(nèi)容,并在顯示器顯示修改結(jié)果。

·String modifiedSentence = new String(receivePacket.getData()); ·System.out.println("FROM SERVER:" + modifiedSentence);

clientSocket.close();

1.3.2 基于UDP的服務(wù)器端編程

UDP服務(wù)器端的編程和客戶端的編程方法幾乎是相同的。UDP服務(wù)器首先需要打開UDP9876端口提供服務(wù)。

·DatagramSocket serverSocket = new DatagramSocket(9876);

UDP服務(wù)器端和客戶端的操作是相反的,先接收Packet然后再發(fā)生Packet,因此,先定義接收的Packet。

·DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length); ·serverSocket.receive(receivePacket);

接下來服務(wù)器需要讀取receivePacket中的應(yīng)用層數(shù)據(jù)信息,并根據(jù)協(xié)議需要完成字母轉(zhuǎn)換成大寫的功能。

·String sentence = new String(receivePacket.getData()); ·String capitalizedSentence = sentence.toUpperCase();

獲取待發(fā)送數(shù)據(jù)以后,需要進(jìn)行封裝,由于UDP服務(wù)器只能通過接收的receivePacket中獲取客戶端的地址信息,為此,服務(wù)器需要從receivePacket中獲取發(fā)送方的IP地址及端口號(hào)。代碼如下:

·InetAddress IPAddress = receivePacket.getAddress(); ·int port = receivePacket.getPort();

接下來封裝sendPacket,然后通過和客戶端相同的方法send()方法發(fā)送packet。

·sendData = capitalizedSentence.getBytes(); ·DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,IPAddress,port); ·serverSocket.send(sendPacket);

1.4 課后思考

教科書提供了一道課后思考題可以作為這個(gè)代碼完成以后的思考練習(xí),幫助學(xué)生進(jìn)一步理解TCP下的網(wǎng)絡(luò)編程和UDP下的網(wǎng)絡(luò)編程的差異。

思考題:安裝編譯java的TCPClient和UDPClient在一臺(tái)主機(jī),然后將TCPServer和UDPServer安裝在另外一臺(tái)主機(jī),回答下面的問題:

(1)假設(shè)你在TCPServer之前運(yùn)行TCPClient,會(huì)發(fā)生什么事情?

(2)假設(shè)你在UDPServer之前運(yùn)行UDPClient,會(huì)發(fā)生什么事情?

這2個(gè)問題可以讓學(xué)生思考答案以后再到機(jī)器上將課堂上講解的代碼編譯執(zhí)行一遍,查看最后的結(jié)果和自己思考的結(jié)果是否相同。

2 網(wǎng)絡(luò)編程實(shí)驗(yàn)設(shè)計(jì)

代碼的講解結(jié)束以后,學(xué)生不一定能真正有效地掌握基于java的網(wǎng)絡(luò)編程實(shí)驗(yàn),因此可以給學(xué)生設(shè)計(jì)相應(yīng)的課程設(shè)計(jì)。

我們采用的教學(xué)方式為,以2~3人為一組,采用組長(zhǎng)負(fù)責(zé)制,完成一個(gè)網(wǎng)絡(luò)編程的實(shí)驗(yàn)項(xiàng)目[10-11]。以組為單位的目的是希望鍛煉學(xué)生的團(tuán)隊(duì)合作能力以及組織能力。完成以后要求小組的組員講解該項(xiàng)目的設(shè)計(jì)過程,從而鍛煉學(xué)生的表達(dá)能力。

設(shè)計(jì)的主要的網(wǎng)絡(luò)編程實(shí)驗(yàn)內(nèi)容見表1[1,12]。

表1 網(wǎng)絡(luò)編程實(shí)驗(yàn)的設(shè)計(jì)

3 結(jié)束語

本文針對(duì)“計(jì)算機(jī)網(wǎng)絡(luò)”課程理論教學(xué)中忽略網(wǎng)絡(luò)編程部分教學(xué)的問題,提出了相應(yīng)的強(qiáng)化教學(xué)方案以及實(shí)驗(yàn)設(shè)計(jì)。在實(shí)際的教學(xué)過程中取得了較好的效果,能夠有效地幫助學(xué)生理解應(yīng)用層協(xié)議及傳輸層的工作原理。

References)

[1] 張愛科.面向TCP/IP網(wǎng)絡(luò)編程實(shí)驗(yàn)平臺(tái)的設(shè)計(jì)[J].通信技術(shù),2012,45(11):61-63.

[2] 劉琰,常斌.面向能力培養(yǎng)的網(wǎng)絡(luò)編程技術(shù)課程教學(xué)方法探討[J].計(jì)算機(jī)教育,2010(18):52-55.

[3] 李鵬.網(wǎng)絡(luò)編程技術(shù)課程的教學(xué)改革思路[J].西安郵電學(xué)院學(xué)報(bào),2010,15(2):166-168.

[4] 任浩,朱培棟,徐明.網(wǎng)絡(luò)編程實(shí)踐課程的探索[J].計(jì)算機(jī)教育,2010(23):97-100.

[5] 成衛(wèi)青,楊哲睿.網(wǎng)絡(luò)編程實(shí)驗(yàn)設(shè)計(jì)與教學(xué)研究[J].2010,8(2):99-101.

[6] 向渝,張駿,劉杰彥.《計(jì)算機(jī)網(wǎng)絡(luò)編程》實(shí)驗(yàn)教學(xué)的探索[J].實(shí)驗(yàn)科學(xué)與技術(shù),2012,10(6):250-252.

[7] James F Kurose,Keith W Ross. 計(jì)算機(jī)網(wǎng)絡(luò):自頂向下方法[M].北京:高等教育出版社,2009.

[8] 曹麗.基于案例驅(qū)動(dòng)教學(xué)法的“計(jì)算機(jī)網(wǎng)絡(luò)編程技術(shù)”教學(xué)改革研究[J].計(jì)算機(jī)教學(xué),2013(1):166.

[9] Y.Daniel Liang. Java語言程序設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2014.

[10] 朱金秀,陳小剛,朱昌平,等.項(xiàng)目式實(shí)驗(yàn)教學(xué)的探索與實(shí)踐[J].實(shí)驗(yàn)室研究與探索,2008,27(11):93-95.

[11] 楊瀟瀟,李光文.任務(wù)驅(qū)動(dòng)教學(xué)法在計(jì)算機(jī)基礎(chǔ)教學(xué)中的應(yīng)用[J].中國(guó)信息技術(shù)教育,2010(12):14-15.

[12] 吳雪麗,李建春.網(wǎng)絡(luò)編程課程體系構(gòu)建與優(yōu)化[J].中國(guó)電力教育,2012(10):56-57.

Teaching and experimental design of network programming in Computer Network course

Chen Li,Ju Shenggen,Wang Xiangguo,Zhou Gang

(School of Computer Science,Sichuan University,Chengdu 610065,China)

Network programming of Computer Network is always neglected in theoretical teaching. However, it is very important for students to realize application-layer protocols and transport-layer service which can provide the theory foreshadowing for the subsequent course of Computer Network Programming. Therefore,with the analysis of current education,exploring and reinforcing the teaching and experimental design on Computer Network based on their own characteristics could improve the teaching effect and the students’ operating abilities dramatically.

socket; network programming; TCP,UDP

2014- 06- 10 修改日期:2014- 06- 30

四川大學(xué)實(shí)驗(yàn)技術(shù)立項(xiàng)資助項(xiàng)目(2013-79);四川大學(xué)教改立項(xiàng)(SCUY101);四川大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)技術(shù)立項(xiàng)資助項(xiàng)目

陳黎(1977—),女,四川成都,博士,講師,研究方向?yàn)橹悄苄畔⑻幚?/p>

琚生根(1970—),男,四川成都,博士,副教授,研究方向?yàn)橹悄苄畔⑻幚?、高校?shí)驗(yàn)室建設(shè)及實(shí)驗(yàn)教學(xué)研究.

E-mail:cl@scu.edu.cn

TP393;G642.423

A

1002-4956(2015)5- 0217- 04

猜你喜歡
服務(wù)器端代碼編程
編程,是一種態(tài)度
元征X-431實(shí)測(cè):奔馳發(fā)動(dòng)機(jī)編程
Linux環(huán)境下基于Socket的數(shù)據(jù)傳輸軟件設(shè)計(jì)
編程小能手
紡織機(jī)上誕生的編程
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用