Java程序設(shè)計Java網(wǎng)絡(luò)編程_第1頁
Java程序設(shè)計Java網(wǎng)絡(luò)編程_第2頁
Java程序設(shè)計Java網(wǎng)絡(luò)編程_第3頁
Java程序設(shè)計Java網(wǎng)絡(luò)編程_第4頁
Java程序設(shè)計Java網(wǎng)絡(luò)編程_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Java高級程序設(shè)計第7章Java網(wǎng)絡(luò)編程7.1應(yīng)用場景 7.2有關(guān)知識

7.3實施過程 7.4拓展知識

7.5拓展訓練 7.6課后小結(jié)

7.7課后習題 7.8上機實訓7.1應(yīng)用場景網(wǎng)絡(luò)編程就是在兩個或兩個以上地設(shè)備(例如計算機)之間傳輸數(shù)據(jù)。網(wǎng)絡(luò)編程技術(shù)是當前一種主流地編程技術(shù),隨著互聯(lián)網(wǎng)地逐步增強以及網(wǎng)絡(luò)應(yīng)用程序地大量出現(xiàn),所以在實際地開發(fā)網(wǎng)絡(luò)編程技術(shù)獲得了大量地使用。1.當我們得到一個URL對象后,就可以通過它讀取指定地資源。通過URL地方法openStream(),我們只能從網(wǎng)絡(luò)上讀取數(shù)據(jù),通過URLConnection可向服務(wù)器端地CGI程序發(fā)送一些數(shù)據(jù)。,FTP等標準化地網(wǎng)絡(luò)服務(wù)都是基于TCP協(xié)議地,所以本質(zhì)上講URL編程也是基于TCP地一種應(yīng)用2.客戶端上傳本地一個文本文件到服務(wù)器端,服務(wù)器端將客戶端上傳地文本保存在另一個文本文件,保存完成后對客戶端發(fā)送一個"完成保存"地地通知,客戶端顯示服務(wù)器返回地信息并斷開與服務(wù)器地連接,至此整個通信結(jié)束。QQ,MSN都使用了Socket有關(guān)地技術(shù)。3.在網(wǎng)絡(luò)質(zhì)量令不十分滿意地環(huán)境下,UDP協(xié)議數(shù)據(jù)包丟失會比較嚴重。但是由于UDP地特性:它不屬于連接型協(xié)議,因而具有資源消耗小,處理速度快地優(yōu)點,所以通常音頻,視頻與普通數(shù)據(jù)在傳送時使用UDP較多,因為它們即使偶爾丟失一兩個數(shù)據(jù)包,也不會對接收結(jié)果產(chǎn)生太大影響。比如聊天用地ICQ與OICQ就是使用地UDP協(xié)議。Java所提供地網(wǎng)絡(luò)功能可大致分為以下三大類。(1)URL與URLConnectio。這是三大類功能最高級地一種。通過URL網(wǎng)絡(luò)資源表達方式,可以確定了網(wǎng)絡(luò)上數(shù)據(jù)地位置。利用URL表示與建立,Java程序可以直接讀入網(wǎng)絡(luò)上地數(shù)據(jù),或把自己地數(shù)據(jù)傳送到網(wǎng)絡(luò)地另一端。(2)Socket與ServerSocket。又稱套接字,用于描述IP地址與端口。在客戶/服務(wù)器,當客戶機運行地應(yīng)用程序(如瀏覽器)需要訪問網(wǎng)絡(luò)地服務(wù)器時,客戶機會被臨時分配一個Socket,然后它會通過服務(wù)器地Socket向服務(wù)器發(fā)出請求。換句話講,網(wǎng)絡(luò)地數(shù)據(jù)發(fā)送與接收都是通過Socket來完成地,Socket就像一個文件句柄(讀寫文件時地一個唯一地順序號),用戶可以通過讀寫Socket來完成客戶機/服務(wù)器直接地通信。(3)DatagramSocket與DatagramPacket。Datagram是這些功能最低級地一種。其它網(wǎng)絡(luò)數(shù)據(jù)傳送方式都假想在程序執(zhí)行時建立一條安全穩(wěn)定地通道,但是Datagram方式傳送數(shù)據(jù)時,只是把數(shù)據(jù)地目地地記錄在數(shù)據(jù)包,然后就直接放在網(wǎng)絡(luò)上進行傳輸,系統(tǒng)不保證數(shù)據(jù)一定能夠安全送到,也不能確定什么時候可以送到。也就是說,Datagram不能保證傳送質(zhì)量。Java有關(guān)網(wǎng)絡(luò)編程方面地功能都定義在java.包。程序員所作地事情就是把數(shù)據(jù)發(fā)送到指定地位置,或者接收到指定地數(shù)據(jù),這個就是狹義地網(wǎng)絡(luò)編程范疇。在發(fā)送與接收數(shù)據(jù)時,大部分地程序設(shè)計語言都設(shè)計了專門地API實現(xiàn)這些功能,程序員只需要調(diào)用即可。7.2有關(guān)知識 7.2.1網(wǎng)絡(luò)編程有關(guān)知識 7.2.2網(wǎng)絡(luò)通訊方式 7.3.3有關(guān)包與類7.2.1網(wǎng)絡(luò)編程有關(guān)知識網(wǎng)絡(luò)編程地目地就是指直接或間接地通過網(wǎng)絡(luò)協(xié)議與其它計算機進行通訊。網(wǎng)絡(luò)編程有兩個主要地問題,一個是如何準確地定位網(wǎng)絡(luò)上一臺或多臺主機,另一個就是找到主機后如何可靠高效地進行數(shù)據(jù)傳輸。在TCP/IP協(xié)議IP層主要負責網(wǎng)絡(luò)主機地定位,數(shù)據(jù)傳輸?shù)芈酚?由IP地址可以唯一地確定Inter上地一臺主機。而TCP層則提供面向應(yīng)用地可靠地或非可靠地數(shù)據(jù)傳輸機制,這是網(wǎng)絡(luò)編程地主要對象,一般不需要關(guān)心IP層是如何處理數(shù)據(jù)地。目前較為流行地網(wǎng)絡(luò)編程模型是客戶機/服務(wù)器(Client/Server結(jié)構(gòu),簡稱C/S)結(jié)構(gòu)。即通信雙方一方作為服務(wù)器等待客戶提出請求并予以響應(yīng)??蛻魟t在需要服務(wù)時向服務(wù)器提出申請。服務(wù)器一般作為守護進程始終運行,監(jiān)聽網(wǎng)絡(luò)端口,一旦有客戶請求,就會啟動一個服務(wù)進程來響應(yīng)該客戶,同時自己繼續(xù)監(jiān)聽服務(wù)端口,使后來地客戶也能及時得到服務(wù)。例如QQ程序,每個QQ用戶安裝地都是QQ客戶端程序,而QQ服務(wù)器端程序則運行在騰訊公司地機房,為大量地QQ用戶提供服務(wù)。

其實在運行很多程序時,沒有必要使用專用地客戶端,而需要使用通用地客戶端,例如瀏覽器,使用瀏覽器作為客戶端地結(jié)構(gòu)被稱作瀏覽器/服務(wù)器(Browser/Server結(jié)構(gòu),簡稱為B/S)結(jié)構(gòu)。使用B/S結(jié)構(gòu)地程序,在開發(fā)時只需要開發(fā)服務(wù)器端即可,這種結(jié)構(gòu)地優(yōu)勢在于開發(fā)地壓力比較小,不需要維護客戶端。但是這種結(jié)構(gòu)也存在著很多不足,例如瀏覽器地限制比較大,表現(xiàn)力不強,無法進行系統(tǒng)級操作等。

總之C/S結(jié)構(gòu)與B/S結(jié)構(gòu)是現(xiàn)在網(wǎng)絡(luò)編程常見地兩種結(jié)構(gòu),B/S結(jié)構(gòu)其實也就是一種特殊地C/S結(jié)構(gòu)。

另外簡單地介紹一下P2P(PointtoPoint)程序,常見地如BT,電驢等。P2P程序是一種特殊地程序,應(yīng)該一個P2P程序既包含客戶端程序,也包含服務(wù)器端程序,例如BT,使用客戶端程序部分連接其它地種子(服務(wù)器端),而使用服務(wù)器端向其它地BT客戶端傳輸數(shù)據(jù)。如果這個還不是很清楚,其實P2P程序與手機是一樣地,當手機撥打電話時就是使用客戶端地作用,而手機處于待機狀態(tài)時,可以接收到其它用戶撥打地電話則起地就是服務(wù)器端地功能,只是一般地手機不能同時使用撥打電話與接聽電話地功能,而P2P程序?qū)崿F(xiàn)了該功能。7.2.2網(wǎng)絡(luò)通訊方式在現(xiàn)有地網(wǎng)絡(luò),網(wǎng)絡(luò)通訊地方式主要有兩種:1,TCP(TransferControlProtocol,傳輸控制協(xié)議)方式2,UDP(UserDatagramProtocol,用戶數(shù)據(jù)報協(xié)議)方式TCP是一種面向連接,可靠地傳輸?shù)貐f(xié)議。通過TCP協(xié)議傳輸,得到地是一個順序地無差錯地數(shù)據(jù)流。發(fā)送方與接收方地成對地兩個socket之間需要建立連接,以便在TCP協(xié)議地基礎(chǔ)上進行通信,當一個socket(通常都是serversocket)等待建立連接時,另一個socket可以要求進行連接,一旦這兩個socket連接起來,它們就可以進行雙向數(shù)據(jù)傳輸,雙方都可以進行發(fā)送或接收操作。UDP是一種無連接地,不可靠地協(xié)議。每個數(shù)據(jù)報都是一個獨立地信息,包括完整地源地址或目地地址,它在網(wǎng)絡(luò)上以任何可能地路徑傳往目地地,因此能否到達目地地,到達目地地地時間以及內(nèi)容地正確性都是不能被保證地。在網(wǎng)絡(luò)通訊,TCP方式就類似于撥打電話,使用該種方式進行網(wǎng)絡(luò)通訊時,需要建立專門地虛擬連接,然后進行可靠地數(shù)據(jù)傳輸,如果數(shù)據(jù)發(fā)送失敗,則客戶端會自動重發(fā)該數(shù)據(jù)。而UDP方式就類似于發(fā)送短信,使用這種方式進行網(wǎng)絡(luò)通訊時,不需要建立專門地虛擬連接,傳輸也不是很可靠,如果發(fā)送失敗則客戶端無法獲得。這兩種傳輸方式都是實際地網(wǎng)絡(luò)編程進行使用,重要地數(shù)據(jù)一般使用TCP方式進行數(shù)據(jù)傳輸,而大量地非核心數(shù)據(jù)則都通過UDP方式進行傳遞,在一些程序甚至結(jié)合使用這兩種方式進行數(shù)據(jù)地傳遞。由于TCP需要建立專用地虛擬連接以及確認傳輸是否正確,所以使用TCP方式地速度稍微慢一些,而且傳輸時產(chǎn)生地數(shù)據(jù)量要比UDP稍微大一些。7.3.3有關(guān)包與類與網(wǎng)絡(luò)編程有關(guān)地基本API位于java.包,該包包含了基本地網(wǎng)絡(luò)編程實現(xiàn),該包是網(wǎng)絡(luò)編程地基礎(chǔ)。該包既包含基礎(chǔ)地網(wǎng)絡(luò)編程類,也包含封裝后地專門處理WEB有關(guān)地處理類。如圖7-1所示 7.3實施過程7.3.1基于URL編程7.3.2基于TCP編程7.3.3基于UDP編程7.3.1基于URL編程 1.URL一致資源定位器URL(UniformResourceLocator)是一致資源定位器地簡稱,它表示Inter上某一資源地地址。通過URL我們可以訪問Inter上地各種網(wǎng)絡(luò)資源,比如最常見地,FTP站點。瀏覽器通過解析給定地URL可以在網(wǎng)絡(luò)上查找相應(yīng)地文件或其它資源。2.URL地組成protocol://resourceName協(xié)議名(protocol)指明獲取資源所使用地傳輸協(xié)議,如http,ftp,gopher,file等,資源名(resourceName)則應(yīng)該是資源地完整地址,包括主機名,端口號,文件名或文件內(nèi)部地一個引用。例如:http://.sun./協(xié)議名://主機名http://home.scape./home/wele.html協(xié)議名://機器名+文件名http://.gamelan.:80/Gamelan/work.html#BOTTOM協(xié)議名://機器名+端口號+文件名+內(nèi)部引用。3.URL類java.實現(xiàn)了類URL。(1)publicURL(Stringspec);通過一個表示URL地址地字符串可以構(gòu)造一個URL對象。URLurlBase=newURL("http://.263./")

(2)publicURL(URLcontext,Stringspec);通過基URL與相對URL構(gòu)造一個URL對象。URL263=newURL("http://.263./");URLindex263=newURL(263,"index.html")(3)publicURL(Stringprotocol,Stringhost,Stringfile);newURL("http",".gamelan.","/pages/Gamelan..html");(4)publicURL(Stringprotocol,Stringhost,intport,Stringfile);URLgamelan=newURL("http",".gamelan.",80,"Pages/Gamelan.work.html");注意:類URL地構(gòu)造方法都聲明拋棄非運行時例外(MalformedURLException),因此生成URL對象時,我們需要要對這一例外進行處理,通常是用try-catch語句進行捕獲。格式如下: 7.3.1基于TCP編程1.Socket通訊網(wǎng)絡(luò)上地兩個程序通過一個雙向地通訊連接實現(xiàn)數(shù)據(jù)地交換,這個雙向鏈路地一端稱為一個Socket。Socket通常用來實現(xiàn)客戶機與服務(wù)器地連接。Socket是TCP/IP協(xié)議地一個十分流行地編程界面,一個Socket由一個IP地址與一個端口號唯一確定。在傳統(tǒng)地UNIX環(huán)境下可以操作TCP/IP協(xié)議地接口不止Socket一個,Socket所支持地協(xié)議種類也不光TCP/IP一種,因此兩者之間是沒有必然聯(lián)系地。在Java環(huán)境下,Socket編程主要是指基于TCP/IP協(xié)議地網(wǎng)絡(luò)編程。2.有關(guān)類(1)Socket類Socket(套接字):代表一個IP與port組合,也就是兩個程序地連接。Socket地作用:獲取輸入輸出流類地作用:用于向服務(wù)端發(fā)送請求,通過ip與port請求建立連接構(gòu)造方法 通過IP與port請求與B程序建立連接通過IP地址(字符串)與端口構(gòu)造 7.3.3基于UDP編程1.UDP協(xié)議 UDP方式地網(wǎng)絡(luò)編程也在Java語言獲得了良好地支持,由于其在傳輸數(shù)據(jù)地過程不需要建立專用地連接等特點,所以在JavaAPI設(shè)計地實現(xiàn)結(jié)構(gòu)與TCP方式不太一樣。UDP是無連接地,不可靠地,無序地,速度快。進行數(shù)據(jù)傳輸時,首先將要傳輸?shù)財?shù)據(jù)定義成數(shù)據(jù)報(Datagram),大小限制在64k,在數(shù)據(jù)報指明數(shù)據(jù)索要達到地Socket(主機地址與端口號),然后再將數(shù)據(jù)報發(fā)送出去。7.4拓展知識為了一步一步地掌握網(wǎng)絡(luò)編程,下面再研究網(wǎng)絡(luò)編程地兩個基本問題,通過解決這兩個問題將對網(wǎng)絡(luò)編程地認識深入一層。1,如何復用Socket連接?在前面地示例,客戶端建立了一次連接,只發(fā)送一次數(shù)據(jù)就關(guān)閉了,這就相當于撥打電話時,電話打通了只對話一次就關(guān)閉了,其實更加常用地應(yīng)該是撥通一次電話以后多次對話,這就是復用客戶端連接。那么如何實現(xiàn)建立一次連接,進行多次數(shù)據(jù)交換呢?其實很簡單,建立連接以后,將數(shù)據(jù)交換地邏輯寫到一個循環(huán)就可以了。這樣只要循環(huán)不結(jié)束則連接就不會被關(guān)閉。按照這種思路,可以改造一下上面地代碼,讓該程序可以在建立連接一次以后,發(fā)送三次數(shù)據(jù),當然這里地次數(shù)也可以是多次,示例代碼如下:7.5拓展訓練任務(wù)四完成UDP多播傳輸MultiSender.java

package.longation;importjava..*;importjava.util.Scanner;publicclassMultiSender{ publicstaticvoidmain(String[]args){ try{ //1.載入信息,從鍵盤輸入 Scannersc=newScanner(System.in); System.out.println("請輸入要發(fā)送地信息:"); Stringmsg=sc.nextLine(); //2.創(chuàng)建數(shù)據(jù)報 IAddressaddress=IAddress.getByName(""); byte[]bs=msg.getBytes(); DatagramPacketdp=newDatagramPacket(bs,bs.length,address,8989); //3.通過MultiSocket發(fā)送數(shù)據(jù)報 MulticastSocketms=newMulticastSocket(); ms.joinGroup(address); ms.send(dp); }catch(Exceptione){ e.printStackTrace(); } }}7.6課后小結(jié)1.URL傳輸。URL(UniformResoureLocator:統(tǒng)一資源定位器)是頁地地址,它從左到右由下述部分組成:Inter資源類型(scheme):指出客戶程序用來操作地工具。如"http://"表示服務(wù)器,"ftp://"表示FTP服務(wù)器,"gopher://"表示Gopher服務(wù)器,而"new:"表示Newgroup新聞組。服務(wù)器地址(host):指出頁所在地服務(wù)器域名。端口(port):有時(并非總是這樣),對某些資源地訪問來說,需給出相應(yīng)地服務(wù)器提供端口號。路徑(path):指明服務(wù)器上某資源地位置(其格式與DOS系統(tǒng)地格式一樣,通常有目錄/子目錄/文件名這樣結(jié)構(gòu)組成)。與端口一樣,路徑并非總是需要地。URL地址格式排列為:scheme://host:port/path,例如http://.sohu2.TCP傳輸。兩個端點地建立連接后會有一個傳輸數(shù)據(jù)地通道,這通道稱為流,而且是建立在網(wǎng)絡(luò)基礎(chǔ)上地流,稱之為socket流。該流既有

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論