Java網絡編程_第1頁
Java網絡編程_第2頁
Java網絡編程_第3頁
Java網絡編程_第4頁
Java網絡編程_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第11章章 網絡編程網絡編程教學目的要求1.了解網絡編程的基本知識;了解網絡編程的基本知識; 2.掌握使用掌握使用URL獲取網絡資源的方法;獲取網絡資源的方法;3.熟練掌握基于熟練掌握基于TCP的網絡通信技術。的網絡通信技術。11.1 網絡編程的基本概念網絡編程的基本概念 Java作為一種與平臺無關的語言,從一作為一種與平臺無關的語言,從一出現就與網絡有關極其密切的關系,因出現就與網絡有關極其密切的關系,因為為Java寫的程序可以在網絡上直接運行,寫的程序可以在網絡上直接運行,使用使用Java,只需編寫簡單的代碼就能實,只需編寫簡單的代碼就能實現強大的網絡功能。下面將介紹幾個與現強大的網絡功

2、能。下面將介紹幾個與Java網絡編程有關的概念。網絡編程有關的概念。TCP/IP協議概述協議概述 在編寫網絡通信的在編寫網絡通信的Java程序時,是在應用層編程序時,是在應用層編寫程序的,所以根本不必關心寫程序的,所以根本不必關心TCP/IP的層次,的層次,只要用只要用包中的類即可,這些類提供了包中的類即可,這些類提供了系統(tǒng)無關的網絡通信服務。但是即使如此,也系統(tǒng)無關的網絡通信服務。但是即使如此,也需了解一下需了解一下TCP/IP協議。協議。 確切地說,確切地說,TCP/IP協議是一組包括協議是一組包括TCP協議和協議和IP協議、協議、UDP(User Datagram Protocol)協)

3、協議、議、ICMP(Internet Control Message Protocol)協議和其他一些協議的協議族。)協議和其他一些協議的協議族。TCP/IP通信協議采用了通信協議采用了4層的層級結構,每一層的層級結構,每一層都使用它的下一層所提供的網絡來完成自己層都使用它的下一層所提供的網絡來完成自己的需求。這的需求。這4層分別為:層分別為: 應用層:應用程序間溝通的層,如簡單電子郵應用層:應用程序間溝通的層,如簡單電子郵件傳輸(件傳輸(SMTP)、文件傳輸協議()、文件傳輸協議(FTP)、)、網絡遠程訪問協議(網絡遠程訪問協議(Telnet)等。)等。 傳輸層:在此層中,它提供了節(jié)點間的數

4、據傳傳輸層:在此層中,它提供了節(jié)點間的數據傳送服務,如傳輸控制協議(送服務,如傳輸控制協議(TCP)、用戶數據)、用戶數據報協議(報協議(UDP)等,)等,TCP和和UDP給數據包加入給數據包加入傳輸數據并把它傳輸到下一層中,這一層負責傳輸數據并把它傳輸到下一層中,這一層負責傳送數據,并且確定數據已被送達并接收。傳送數據,并且確定數據已被送達并接收。 互連網絡層:負責提供基本的數據封包傳送功互連網絡層:負責提供基本的數據封包傳送功能,讓每一塊數據包都能夠到達目的主機(但能,讓每一塊數據包都能夠到達目的主機(但不檢查是否被正確接收),如網際協議(不檢查是否被正確接收),如網際協議(IP)。)。

5、網絡接口層:對實際的網絡媒體的管理,定義網絡接口層:對實際的網絡媒體的管理,定義如何使用實際網絡(如如何使用實際網絡(如Ethernet、Serial Line等)等)來傳送數據。來傳送數據。下面簡單介紹下面簡單介紹TCP/IP中的幾個主要協議的功能。中的幾個主要協議的功能。1.IP協議協議 網際協議網際協議IP是是TCP/IP的心臟,也是網絡層中最的心臟,也是網絡層中最重要的協議。重要的協議。 IP層接收由更低層(網絡接口層例如以太網設層接收由更低層(網絡接口層例如以太網設備驅動程序)發(fā)來的數據包,并把該數據包發(fā)備驅動程序)發(fā)來的數據包,并把該數據包發(fā)送到更高層送到更高層TCP或或UDP層;

6、相反,層;相反,IP層也層也把從把從TCP或或UDP層接收來的數據包傳送到更低層接收來的數據包傳送到更低層。層。IP數據包是不可靠的,因為數據包是不可靠的,因為IP并沒有做任并沒有做任何事情來確認數據包是按順序發(fā)送的或者沒有何事情來確認數據包是按順序發(fā)送的或者沒有被破壞。被破壞。IP數據包中含有發(fā)送它的主機的地址數據包中含有發(fā)送它的主機的地址(源地址)和接收它的主機的地址(目的地(源地址)和接收它的主機的地址(目的地址)。址)。2.TCP協議協議 TCP是是Tranfer Control Protocol的簡稱,的簡稱,是一種面向連接的保證可靠傳輸的協議。是一種面向連接的保證可靠傳輸的協議。通

7、過通過TCP協議傳輸,得到的是一個順序協議傳輸,得到的是一個順序的無差錯的數據流。的無差錯的數據流。 如果如果IP數據包中有已經封好的數據包中有已經封好的TCP數據數據包,那么包,那么IP將把它們向將把它們向“上上”傳送到傳送到TCP層。層。TCP將包排序并進行錯誤檢查,將包排序并進行錯誤檢查,同時實現虛電路間的連接。同時實現虛電路間的連接。TCP數據包數據包中包括序號和確認,所以未按照順序收中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被到的包可以被排序,而損壞的包可以被重傳。重傳。 TCP是可靠的、面向連接的、連續(xù)的、流的協是可靠的、面向連接的、連續(xù)的、流的協議。當應用

8、程序需要一個可靠的、點對點的連議。當應用程序需要一個可靠的、點對點的連接進行通信時,就用接進行通信時,就用TCP協議。像協議。像HTTP、FTP、Telnet等應用程序都需要一個可靠的通等應用程序都需要一個可靠的通信媒介。數據在網絡上發(fā)送和接收的次序對于信媒介。數據在網絡上發(fā)送和接收的次序對于能否成功的應用能否成功的應用HTTP讀取讀取URL資源是很重要資源是很重要的,數據的接收次序與發(fā)送的次序必須一樣,的,數據的接收次序與發(fā)送的次序必須一樣,否則就會收到一些錯誤的信息。否則就會收到一些錯誤的信息。 對于許多應用程序來說,這種可靠性的保證是對于許多應用程序來說,這種可靠性的保證是能否成功傳輸信

9、息的關鍵。然而,這種可靠的能否成功傳輸信息的關鍵。然而,這種可靠的傳輸方式并非對所有的應用程序都適合。事實傳輸方式并非對所有的應用程序都適合。事實上,上,TCP需要花費大量的時間和帶寬來保證可需要花費大量的時間和帶寬來保證可靠傳輸,有一些場合可靠傳輸并不是必須的??總鬏?,有一些場合可靠傳輸并不是必須的。3.UDP協議協議 UDP是是User Datagram Protocol(用戶數據報(用戶數據報協議)的簡稱,是一種無連接的、不可靠的協協議)的簡稱,是一種無連接的、不可靠的協議,每個數據報都是一個獨立的信息,包括完議,每個數據報都是一個獨立的信息,包括完整的源地址或目的地址,它在網絡上以任何

10、可整的源地址或目的地址,它在網絡上以任何可能的路徑傳往目的地,因此能否到達目的地,能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內容的正確性都是不能到達目的地的時間以及內容的正確性都是不能被保證的。但是這個協議的速度卻比較快,所被保證的。但是這個協議的速度卻比較快,所以在現在網絡基礎設施越來越好的情況下,使以在現在網絡基礎設施越來越好的情況下,使用用UDP協議的應用程序也越來越多了。協議的應用程序也越來越多了。 在在 J a v a 的的 j a v a . n e t 類 庫 中 ,類 庫 中 , U R L 、URLConnection、Socket、SocketServer

11、類都類都是 利 用是 利 用 T C P 在 網 絡 上 通 信 的 ; 而在 網 絡 上 通 信 的 ; 而DatagramPacket和和DatagramServer類是使用類是使用UDP的。本章將主要講述利用的。本章將主要講述利用TCP協議進行通協議進行通信的各個類。信的各個類。Socket套接字套接字 網絡上的兩個程序通過一個雙向的通信連接實現數據網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個雙向鏈路的一端稱為一個的交換,這個雙向鏈路的一端稱為一個Socket,即,即Socket是面向客戶是面向客戶/服務器模型設計的,通常用服務器模型設計的,通常用Socket來實現客戶方和

12、服務方的連接??蛻舫绦蚩梢韵騺韺崿F客戶方和服務方的連接。客戶程序可以向Socket寫請求,服務器將處理此請求,然后通過寫請求,服務器將處理此請求,然后通過Socket將結果返回給用戶。將結果返回給用戶。 Socket通信機制提供了兩種通信方式:有連接和無連通信機制提供了兩種通信方式:有連接和無連接方式,分別面向不同的應用需求。使用有連接方式接方式,分別面向不同的應用需求。使用有連接方式時,通信鏈路提供了可靠的,全雙工的字節(jié)流服務。時,通信鏈路提供了可靠的,全雙工的字節(jié)流服務。在該方式下,通信雙方必須創(chuàng)建一個連接過程并建立在該方式下,通信雙方必須創(chuàng)建一個連接過程并建立一條通信鏈路,以后的網絡通信

13、操作完全在這一對進一條通信鏈路,以后的網絡通信操作完全在這一對進程之間進行,通信完畢則關閉此連接過程。使用無連程之間進行,通信完畢則關閉此連接過程。使用無連接方式時其系統(tǒng)開銷比有連接方式小,但通信鏈路提接方式時其系統(tǒng)開銷比有連接方式小,但通信鏈路提供了不可靠的數據報服務,不能保證信源所傳輸的數供了不可靠的數據報服務,不能保證信源所傳輸的數據一定能夠到達信宿。在該方式下,通信雙方不必創(chuàng)據一定能夠到達信宿。在該方式下,通信雙方不必創(chuàng)建一個連接過程和建立一條通信鏈路,網絡通信操作建一個連接過程和建立一條通信鏈路,網絡通信操作在不同的主機和進程之間轉發(fā)進行。在不同的主機和進程之間轉發(fā)進行。端口端口 計

14、算機與網絡一般只有一個單獨的物理連接,計算機與網絡一般只有一個單獨的物理連接,所有的數據最終都要通過連接到達一個指定的所有的數據最終都要通過連接到達一個指定的計算機。然而,數據是傳向運行在計算機上的計算機。然而,數據是傳向運行在計算機上的不同應用程序的,計算機需要知道數據傳向哪不同應用程序的,計算機需要知道數據傳向哪個應用程序,這就要用到端口。個應用程序,這就要用到端口。 數據在網絡上傳送是與地址信息的傳送一起進數據在網絡上傳送是與地址信息的傳送一起進行的,地址信息表明了數據要傳向的計算機和行的,地址信息表明了數據要傳向的計算機和端口。計算機是一個端口。計算機是一個32位的位的IP地址標識,地

15、址標識,IP用用來把數據傳送到網絡上的目的計算機上。端口來把數據傳送到網絡上的目的計算機上。端口是用一個是用一個16位的數來表示,位的數來表示,TCP和和UDP都是通都是通過這個端口來指明數據要發(fā)往的應用程序。過這個端口來指明數據要發(fā)往的應用程序。 在面向連接的通信中,一個應用程序與另一個在面向連接的通信中,一個應用程序與另一個應用程序的連接的建立是通過把一個端口號綁應用程序的連接的建立是通過把一個端口號綁定在套接字上實現的。這樣就把應用程序注冊定在套接字上實現的。這樣就把應用程序注冊在操作系統(tǒng)中,從指定的端口接收所有的數據。在操作系統(tǒng)中,從指定的端口接收所有的數據。運行在同一臺計算機上的兩個

16、應用程序不可能運行在同一臺計算機上的兩個應用程序不可能綁定在同一個端口上,如果應用程序試圖綁定綁定在同一個端口上,如果應用程序試圖綁定在一個已經在使用中的端口上將導致失敗。在在一個已經在使用中的端口上將導致失敗。在面向消息的通信中,數據報包含了目的地的端面向消息的通信中,數據報包含了目的地的端口號??谔?。TCP和和UDP協議是利用端口把流入的數協議是利用端口把流入的數據映射到運行的計算機上的特定進程。據映射到運行的計算機上的特定進程。 端口號是從端口號是從0到到65535(因為端口是用(因為端口是用16位二進位二進制數表示),其中制數表示),其中01023的端口號被系統(tǒng)保的端口號被系統(tǒng)保留,它

17、們被許多知名的服務占據,如留,它們被許多知名的服務占據,如HTTP、FTP和其他的系統(tǒng)服務,應用程序不能綁定這和其他的系統(tǒng)服務,應用程序不能綁定這些端口。些端口。URL URL(Uniform Resource Locator)是統(tǒng)一資源定位符)是統(tǒng)一資源定位符的簡稱,它表明了的簡稱,它表明了Internet上某一資源的地址。通過上某一資源的地址。通過URL,可以訪問,可以訪問Internet和和WWW。瀏覽器通過解析給。瀏覽器通過解析給定的定的URL可以在網絡上查找相應的文件或網絡資源??梢栽诰W絡上查找相應的文件或網絡資源。IP地址定位了在互連網上的一臺計算機,端口定義了地址定位了在互連網上

18、的一臺計算機,端口定義了為這臺計算機上提供的服務。一個為這臺計算機上提供的服務。一個URL的語法格式如的語法格式如下:下: :/dir/filename protocol定義了傳輸協議,如定義了傳輸協議,如http、ftp、gopher、file等等;等等;hostname為主機域名或為主機域名或IP地址;地址;port為服務端為服務端口號;口號;dir和和filename分別為服務器上的目錄和文件名。分別為服務器上的目錄和文件名。URL具有強大的功能,它提供了統(tǒng)一的方法來存儲與具有強大的功能,它提供了統(tǒng)一的方法來存儲與單個類中的一個特定資源進行通信所需的全部信息;單個類中的一個特定資源進行通

19、信所需的全部信息;完成所有完成所有socket的創(chuàng)建、握手協議以及通過的創(chuàng)建、握手協議以及通過HTTP檢索檢索資源所需的解釋程序。資源所需的解釋程序。Java語言提供了類語言提供了類.URL來實現利用來實現利用URL進行網進行網絡編程。該類具有絡編程。該類具有4個構造器及其相應的方法。利用構造個構造器及其相應的方法。利用構造器創(chuàng)建了器創(chuàng)建了URL對象后,對象后,Java提供了提供了2種方式來讀取網絡數種方式來讀取網絡數據,一種是通過據,一種是通過URL對象及相關方法直接得到相關的網對象及相關方法直接得到相關的網絡信息,首先創(chuàng)建一個絡信息,首先創(chuàng)建一個URL對象,然后使用對象,然后使用URL的方

20、法的方法openStream()與指定的與指定的URL建立連接并得到一個輸入流建立連接并得到一個輸入流InputStream類的對象,在此基礎上可進一步生成其它的類的對象,在此基礎上可進一步生成其它的輸入流對象實例,進而對信息進行操作;這種方法簡單輸入流對象實例,進而對信息進行操作;這種方法簡單直接,但缺乏靈活性,并且只能夠讀信息,因為許多直接,但缺乏靈活性,并且只能夠讀信息,因為許多Web提供了雙向對話的功能,因而就限制了這種方法的提供了雙向對話的功能,因而就限制了這種方法的應用。另一種是通過方法應用。另一種是通過方法openConnection()生成相應的生成相應的URLConnecti

21、on對象,從而得到對象,從而得到InputStream輸入流或輸入流或InputStream對象,進而對其進行讀寫操作。這種方法應對象,進而對其進行讀寫操作。這種方法應用相當廣泛,如向服務器的用相當廣泛,如向服務器的CGI程序發(fā)送一些數據,首程序發(fā)送一些數據,首先必須與先必須與URL建立連接,然后對其進行讀寫操作,利用建立連接,然后對其進行讀寫操作,利用URLConnection類提供的公用方法除了可以簡單地訪問類提供的公用方法除了可以簡單地訪問網絡資源外,還可以訪問某些協議提供的有關資源,如網絡資源外,還可以訪問某些協議提供的有關資源,如資源的資源的MIME類型(類型(Multimedia

22、Internet Mail Extensions,多用途,多用途Internet郵件擴展)、資源的更改時郵件擴展)、資源的更改時間等。間等。11.2 使用使用URL獲取網絡資源獲取網絡資源 URL類類 在在Java的的包中,包含一些用于網絡編包中,包含一些用于網絡編程的類,其中程的類,其中URL類可以很方便地利用類可以很方便地利用URL地地址在址在Internet上進行網絡通信并獲取網絡資源。上進行網絡通信并獲取網絡資源。 URL對象是只寫一次的對象,一旦創(chuàng)建了一個對象是只寫一次的對象,一旦創(chuàng)建了一個URL對象,就不能再改變它的任何屬性(協議、對象,就不能再改變它的任何屬性(協議、主機名、文件

23、名和端口號)。為了表示主機名、文件名和端口號)。為了表示URL,中實現了類中實現了類URL??梢酝ㄟ^下面的構??梢酝ㄟ^下面的構造方法來初始化一個造方法來初始化一個URL對象:對象:構造方法一:構造方法一:public URL (String spec); 該構造方法通過一個表示該構造方法通過一個表示URL地址的字符串可以構造地址的字符串可以構造一個一個URL對象。例如:對象。例如: URL urlBase=new URL(http:/ ;構造方法二:構造方法二:public URL(URL context, String spec); 該構造方法通過絕對該構造方法通過絕對URL和相對和相對UR

24、L構造一個構造一個URL對對象。例如:象。例如: URL com163 = new URL (http:/ URL index163 = new URL(com163, index.html);構造方法三:構造方法三:public URL(String protocol, String host, String file);例如:例如: URL com163 = new URL(http, , /pages/net. html);構造方法四:構造方法四:public URL(String protocol, String host, int port, String file); 例如:例如:

25、 URL gamelan = new URL(http, , 80, Pages/net.html);注意:類注意:類URL的構造方法都聲明拋棄非運行時異的構造方法都聲明拋棄非運行時異常(常(MalformedURLException),因此生成),因此生成URL對象時,必須要對這一異常進行處理,通對象時,必須要對這一異常進行處理,通常是用常是用try-catch語句進行捕獲。格式如下:語句進行捕獲。格式如下:tryURL myURL= new URL()catch (MalformedURLException e) URL類提供了多個方法進行類提供了多個方法進行URL對象的查詢,可以使對象的

26、查詢,可以使用這些方法來獲取用這些方法來獲取URL的屬性信息,其中常用的方法的屬性信息,其中常用的方法有:有:getProtocol():返回:返回URL的協議標識部分;的協議標識部分;getHost():返回:返回URL的主機名部分;的主機名部分;getPort():將端口號作為整數返回,如沒有設置則返回:將端口號作為整數返回,如沒有設置則返回-1;getPath():返回該:返回該URL的路徑;的路徑;getFile():返回:返回URL的文件名部分;的文件名部分;getRef():返回:返回URL的引用部分。的引用部分。 當然,并不是所有的當然,并不是所有的URL地址都包括這些組成部分。

27、地址都包括這些組成部分。URL類提供這些方法是因為類提供這些方法是因為HTTP的的URL包括這些部包括這些部分,而分,而HTTP的的URL差不多是最通用的差不多是最通用的URL。從某種。從某種程序上講,程序上講,URL類是以類是以HTTP為中心的。無論使用什為中心的。無論使用什么構造函數來創(chuàng)建么構造函數來創(chuàng)建URL對象,都可以使用這些方法來對象,都可以使用這些方法來獲取該獲取該URL對象的信息。例對象的信息。例11.1描述了描述了URL類的基本類的基本用法。用法。例例 URL類的基本用法舉例。類的基本用法舉例。import .URL; /引入引入URL類類import .MalformedUR

28、LException; /引入引入包中的異常類包中的異常類class URLDemo public static void main(String args) URL sampleURL = null; try sampleURL = new URL(http:/:80/index.html#down); /創(chuàng)建創(chuàng)建URL對象對象 catch(MalformedURLException e) /異常處理異常處理 e.printStackTrace(); /顯示顯示sampleURL對象的各屬性值對象的各屬性值 System.out.println(協議:協議: +sampleURL.getPr

29、otocol(); System.out.println(主機名:主機名:+sampleURL.getHost(); System.out.println(端口號:端口號:+sampleURL.getPort(); System.out.println(文件名:文件名:+sampleURL.getFile(); System.out.println(錨點:錨點: +sampleURL.getRef(); 這是一個這是一個Java應用程序。運行結果輸出應用程序。運行結果輸出URL地址的各地址的各屬性值,因為屬性值,因為URL沒有參考點,輸出為沒有參考點,輸出為null。運行結。運行結果為:果為:

30、協議:協議: http主機名:主機名:端口號:端口號:80文件名:文件名:/index.html錨點:錨點: down獲取圖像獲取圖像 Java Applet可以直接從網絡上結點獲取圖像并可以直接從網絡上結點獲取圖像并顯示出來。顯示出來。 為了了解其編程方法和從本地顯示為了了解其編程方法和從本地顯示圖像的編程有何不同,先不考慮網絡功能,來圖像的編程有何不同,先不考慮網絡功能,來看一個以前學習過的簡單的圖像顯示的例子:看一個以前學習過的簡單的圖像顯示的例子: 例例11.2 獲取并顯示圖像舉例。獲取并顯示圖像舉例。import java.applet.*;import java.awt.*;pub

31、lic class Li11_02 extends Applet Image image; public void init() image=getImage(getDocumentBase(),swan.gif); public void paint(Graphics g) g.drawImage(image, 0, 0,this); 這是一個獲取并顯示圖像的簡單例子,在該例這是一個獲取并顯示圖像的簡單例子,在該例中,先用中,先用getImage()方法從方法從HTML文檔所在位文檔所在位置調用圖像置調用圖像swan.gif,并由此生成一個,并由此生成一個Image類類型的對象型的對象ima

32、ge,然后用,然后用drawImage(image,0,0,this)在屏幕上將圖像顯在屏幕上將圖像顯示出來。示出來。 如果想從網絡上其他結點獲取圖像,關鍵是創(chuàng)如果想從網絡上其他結點獲取圖像,關鍵是創(chuàng)建對應于網絡上其他結點的建對應于網絡上其他結點的Image類型的對象,類型的對象,一旦獲得一旦獲得Image類型的對象,便可以對其進行類型的對象,便可以對其進行任何可能的圖像操作。任何可能的圖像操作。Java提供了提供了getImage(new URL(字符串字符串)方法可以創(chuàng)建對應方法可以創(chuàng)建對應于其他結點的圖像于其他結點的圖像,其使用格式可有兩種:其使用格式可有兩種: String url =

33、 結點結點URL; Image image; try image = getImage(new URL(url); catch(Exception e)System.out.println(不能打開這個不能打開這個URL地址地址 ); 或或URL imgur = null;Image image;try imgur = new URL(結點結點URL ); catch (MalformedURLException e) System.out.println(不能打開這個不能打開這個URL地址地址 ); image=getImage(imgur); 前一種格式用前一種格式用“new URL(ur

34、l)”生成生成URL對象,并直對象,并直接作為接作為getImage的參數,后一種格式先用的參數,后一種格式先用“new URL(url)”生成一個生成一個 URL對象,再傳給對象,再傳給getImage。兩。兩種格式本質上是一樣的。兩種格式中,生成種格式本質上是一樣的。兩種格式中,生成URL對象對象的部分都包含在的部分都包含在try/獲取獲取URL對象對象 catch (MalformedURLException e) /出錯提示出錯提示 之中。之中。 例如要調用例如要調用/java/automain.jpg結點結點的圖像,第一種格式的完整實現見例的圖像

35、,第一種格式的完整實現見例11.3源程序。第源程序。第二種格式的完整實現見例二種格式的完整實現見例11.4的源代碼。說明:例的源代碼。說明:例11.3至至11.8編譯后需要把編譯后需要把.class文件和相應的文件和相應的.htm文件放入文件放入站點中的相應虛擬目錄才可顯示出效果。對于沒有服站點中的相應虛擬目錄才可顯示出效果。對于沒有服務器或不能上網的讀者,也可以在自己的計算機上通務器或不能上網的讀者,也可以在自己的計算機上通過安裝微軟的過安裝微軟的IIS或或PWS(Windows98用戶)建立一臺用戶)建立一臺WEB服務器進行測試,服務器建立后,把上面的程序服務器進行測試,服務器建立后,把上

36、面的程序放入放入WEB服務器相應目錄中,然后把例題中的域名換服務器相應目錄中,然后把例題中的域名換成成即可。即可。 例例11.3 顯示網絡結點上的圖像。顯示網絡結點上的圖像。/Li11_03.javaimport java.applet.*;import .*;import java.awt.*;public class Li11_03 extends Applet Image image; public void init() String url=/java/automain.jpg;/請按請按實際情況更改站點的域名實際情

37、況更改站點的域名 try image = getImage(new URL(url); catch(Exception e) public void paint(Graphics g) g.drawImage(image, 0, 0,this); 例例11.4 顯示網絡結點上的圖像。顯示網絡結點上的圖像。/Li11_04.javaimport java.applet.*;import .*;import java.awt.*;public class Li11_04 extends Applet Image image; URL imgur=null; public void init() t

38、ry imgur=new URL(/java/automain.jpg);/請按實請按實際情況更改站點的域名際情況更改站點的域名 catch (MalformedURLException e) System.out.println(不能打開該不能打開該URL地址。地址。); image=getImage(imgur); public void paint(Graphics g) g.drawImage(image, 0, 0,this); 將上述兩個程序分別以將上述兩個程序分別以Li11_03.java和和Li11_04. java存盤并把存盤并把URL地

39、址更改為自己服務器的圖地址更改為自己服務器的圖像文件的地址,執(zhí)行像文件的地址,執(zhí)行javac Li11_03.java和和javac L i 11 _ 0 4 . j a v a , 將 得 到 編 譯 后 生 成 的, 將 得 到 編 譯 后 生 成 的Li11_03.class和和Li11_04.class,最后創(chuàng)建調用這,最后創(chuàng)建調用這兩個兩個Java Applet的的HTML文檔。文檔。 將將 . c l a s s 和和 . h t m 程 序 放 入程 序 放 入 We b 服 務 器服 務 器()并用并用IE打開,便可以看到打開,便可以看到Java Ap

40、plet 所顯示的從網絡上獲得的圖像了。不過,所顯示的從網絡上獲得的圖像了。不過,在在Applet程序中一般很少采用絕對程序中一般很少采用絕對URL,因為,因為出于安全性的考慮,瀏覽器只允許出于安全性的考慮,瀏覽器只允許Applet訪問訪問與與Applet同一主機的資源。如果采用絕對同一主機的資源。如果采用絕對URL,則當則當Applet放到其他的放到其他的Web服務器上運行時,服務器上運行時,必須修改程序。必須修改程序。獲取聲音獲取聲音 Java從網絡上獲取聲音文件并播放聲音的編程從網絡上獲取聲音文件并播放聲音的編程方法有兩種,第一種是利用方法有兩種,第一種是利用Java提供的提供的play

41、(URL1)及及play(URL1,String1) 直接播放網直接播放網絡 上 的 聲 音 文 件 , 另 一 種 是 通 過絡 上 的 聲 音 文 件 , 另 一 種 是 通 過getAudioClip(URL)或或getAudioClip(URL, String)先從網絡上獲取聲音文件,并生成先從網絡上獲取聲音文件,并生成AudioClip 類型的對象,然后對該對象進行操類型的對象,然后對該對象進行操作。第一種方法實現可以用如下代碼:作。第一種方法實現可以用如下代碼:String Audur = 結點結點URL;try play(new URL(Audur); /或或play(new U

42、RL(Audur),聲聲音文件名音文件名); catch(Exception e) 第二種方法實現可以用如下代碼:第二種方法實現可以用如下代碼:String Audur = 結點結點URL;AudioClip loopClip;try loopClip = getAudioClip(new URL(Audur); /或或loopClip = getAudioClip(new URL(Audur) ,聲音文件名聲音文件名); catch(Exception e)System.out.println(不能打開這個不能打開這個URL地址。地址。); 上面的兩種格式都是將生成上面的兩種格式都是將生成U

43、RL對象部分對象部分“new URL(url)”直接作為直接作為play或或getAudioClip的參數;和前面處理圖像的例子一樣,也可以的參數;和前面處理圖像的例子一樣,也可以先用先用“new URL(url)”獲取一個獲取一個URL對象,再對象,再傳給傳給 play 或或getAudioClip。如對第一種。如對第一種play(URL)的格式,也可采用如下的編程格式:的格式,也可采用如下的編程格式:URL Audur =null;try Audur=new URL(結點結點URL ); catch(Exception e)System.out.println(不能打開該不能打開該URL地

44、址。地址。);play(Audur);獲取文檔獲取文檔 利用利用Java提供的提供的getAppletContext().showDoc ument()方法可以顯示方法可以顯示Web服務器結點的服務器結點的HTML文檔,在調用這個方法之前首先需要指文檔,在調用這個方法之前首先需要指定文檔的網絡資源的定文檔的網絡資源的URL。其兩種格式如下:。其兩種格式如下:void showDocument(URL url);void showDocument(URL url, String target); 第一種格式在當前窗口中打開指定的網頁文件,第一種格式在當前窗口中打開指定的網頁文件,第二種格式在指定

45、的窗口中打開指定的網頁文第二種格式在指定的窗口中打開指定的網頁文件。同前面的顯示網絡上其他結點的資源一樣,件。同前面的顯示網絡上其他結點的資源一樣,獲取文檔也有兩種編程方式,例獲取文檔也有兩種編程方式,例11.7和例和例11.8分別演示了分別演示了showDocument()方法的使用。方法的使用。 例例11.7 獲取并顯示網絡結點上的文檔資源。獲取并顯示網絡結點上的文檔資源。import java.applet.*;import java.awt.*;import .*;public class Li11_07 extends Applet URL docur= null; public v

46、oid paint(Graphics g) try docur=new URL(/java/index.htm); /請根據實際情況更改站點域名請根據實際情況更改站點域名 catch (MalformedURLException e) System.out.println(不能打開該不能打開該URL地址。地址。); if (docur != null) getAppletContext().showDocument(docur); 例例11.8 獲取并顯示網絡結點上的文檔資源。獲取并顯示網絡結點上的文檔資源。import java.applet.*;imp

47、ort java.awt.*;import .*;public class Li11_08 extends Applet URL docur= null; public void paint(Graphics g) try getAppletContext().showDocument(new URL(/java/index.htm); catch (MalformedURLException e) System.out.println(不能打開該不能打開該URL地址。地址。); /paint()上面的兩個程序只是利用上面的兩個程序只是利用showDocm

48、ent()方法方法顯示網上的顯示網上的HTML文檔,但并不能對其內容文檔,但并不能對其內容進行處理。實際上,進行處理。實際上,Java還可以讀取網絡上還可以讀取網絡上文件的內容,并對其內容進行處理。文件的內容,并對其內容進行處理。Java讀取并處理網絡上文件內容的步驟如下:讀取并處理網絡上文件內容的步驟如下:(1)創(chuàng)建一個創(chuàng)建一個URL類型的對象。例如:類型的對象。例如: URL fileurl = new URL(url);(2)利用利用URL類的類的openStream( )方法獲得對應的方法獲得對應的InputStream類的對象。例如:類的對象。例如: InputStream file

49、con = fileurl.openStream( );(3)將將InputStream對象轉化為對象轉化為DataInput Stream類的對象。例如:類的對象。例如: DataInputStream filedata = new DataInputStream(filecon);(4)讀取內容并處理。例如,對上面的讀取內容并處理。例如,對上面的filedata,可用,可用filedata.readLine一行一一行一行讀取內容或用行讀取內容或用filedata.readchar一個一個字符一個字符地讀取,讀取后可使用字符一個字符地讀取,讀取后可使用java語句對其進行處理并輸出。語句對其

50、進行處理并輸出。對于讀取并處理網上對于讀取并處理網上HTML文件內容的文件內容的程序,請讀者根據以上說明步驟,自己程序,請讀者根據以上說明步驟,自己編寫一個小程序。編寫一個小程序。11.3 使用使用TCP協議的協議的Socket編程編程 Socket套接字套接字 對于超出了對于超出了URL類所提供的連網應用程序,類所提供的連網應用程序,Java提供了套接口類(提供了套接口類(Socket)和服務套接口)和服務套接口類(類(ServerSocket)作為標準的)作為標準的TCP套接口編套接口編程技術,通過它們可以實現主機與主機之間的程技術,通過它們可以實現主機與主機之間的對話。對話。 使用使用S

51、ocket進行進行Client/Server程序設計的一般程序設計的一般連接過程是這樣的:連接過程是這樣的:Server端端Listen(監(jiān)聽監(jiān)聽)某個某個端口是否有連接請求,端口是否有連接請求,Client端向端向Server端發(fā)端發(fā)出出Connect(連接連接)請求,請求,Server端向端向Client端發(fā)端發(fā)回回Accept(接受)消息,一個連接就建立起來(接受)消息,一個連接就建立起來了。了。Server端和端和Client端都可以通過套接口類端都可以通過套接口類提供的一些方法與對方通信。提供的一些方法與對方通信。 對于一個功能齊全的對于一個功能齊全的Socket,都要包含,都要包含

52、以下基本結構,其工作過程包含以下四以下基本結構,其工作過程包含以下四個基本的步驟:個基本的步驟:1.創(chuàng)建創(chuàng)建Socket;2.打開連接到打開連接到Socket的輸入的輸入/輸出流;輸出流;3.按照一定的協議對按照一定的協議對Socket進行讀進行讀/寫操作;寫操作;4.關閉關閉Socket。 Java在在包中提供了兩個類包中提供了兩個類Socket和和ServerSocket,分別用來表示雙向連接,分別用來表示雙向連接的客戶端和服務端創(chuàng)建、管理通信。這的客戶端和服務端創(chuàng)建、管理通信。這是兩個封裝得非常好的類,使用很方便。是兩個封裝得非常好的類,使用很方便。其構造方法如下:其構造方法如下: So

53、cket(); Socket(InetAddress address, int port); Socket(InetAddress address, int port, boolean stream); Socket(String host, int prot); Socket(String host, int prot, boolean stream); Socket(SocketImpl impl); Socket(String host, int port, InetAddress localAddr, int localPort); Socket(InetAddress address

54、, int port, InetAddress localAddr, int localPort); ServerSocket(); ServerSocket(int port); ServerSocket(int port, int backlog); ServerSocket(int port, int backlog, InetAddress bindAddr); 其中其中address、host和和port分別是雙向連分別是雙向連接中一方的接中一方的IP地址、主機名和端口號,地址、主機名和端口號,stream指明指明socket是流是流socket還是數據報還是數據報socket,lo

55、calPort表示本地主機的端口號,表示本地主機的端口號,localAddr和和bindAddr是本地機器的地址是本地機器的地址(ServerSocket的主機地址),的主機地址),impl是是s o c k e t 的 父 類 , 既 可 以 用 來 創(chuàng) 建的 父 類 , 既 可 以 用 來 創(chuàng) 建serverSocket又可以用來創(chuàng)建又可以用來創(chuàng)建Socket。例。例如:如:Socket client = new Socket(127.0.01., 8088);ServerSocket server = new ServerSocket(8088); 注意:在選擇端口時,必須小心。每一個端

56、口注意:在選擇端口時,必須小心。每一個端口提供一種特定的服務,只有給出正確的端口,提供一種特定的服務,只有給出正確的端口,才能獲得相應的服務。才能獲得相應的服務。01023的端口號為系統(tǒng)的端口號為系統(tǒng)所保留,例如所保留,例如http服務的端口號為服務的端口號為80,telnet服服務的端口號為務的端口號為21,ftp服務的端口號為服務的端口號為23, 所以在所以在選擇端口號時,最好選擇一個大于選擇端口號時,最好選擇一個大于1023的數以的數以防止發(fā)生沖突。防止發(fā)生沖突。 在創(chuàng)建在創(chuàng)建socket時如果發(fā)生錯誤 , 將 產 生時如果發(fā)生錯誤 , 將 產 生IOException,在程序中必須對之

57、做出處理。,在程序中必須對之做出處理。所以在創(chuàng)建所以在創(chuàng)建Socket或或ServerSocket是必須捕獲是必須捕獲或拋出例外?;驋伋隼?。 在使用在使用Socket和和ServerSocket類構造完對象后,類構造完對象后,就可以使用它們提供的方法來實現端口的套接就可以使用它們提供的方法來實現端口的套接等功能。其中等功能。其中Socket類提供的主要方法有以下類提供的主要方法有以下幾種:幾種: getInputStream():返回此套接口鏈接地址的輸入:返回此套接口鏈接地址的輸入流。流。 getInetAddress():返回此套接口鏈接的地址對象。:返回此套接口鏈接的地址對象。 get

58、LocalAddress():返回套接口本地的地址對象。:返回套接口本地的地址對象。 getLocalPort():返回套接口本地的地址端口。:返回套接口本地的地址端口。 getOutputStream():返回此套接口鏈接地址的輸出:返回此套接口鏈接地址的輸出流。流。 getPort():返回此套接口鏈接地址的端口。:返回此套接口鏈接地址的端口。 setSoTimeOut():設置套接口的有效期限值。:設置套接口的有效期限值。 toString():返回套接口字符串。:返回套接口字符串。 close():關閉套接口。:關閉套接口。 isClosed():判斷此套接口是否關閉。:判斷此套接口是

59、否關閉。 isConnected():判斷此套接口是否斷開。:判斷此套接口是否斷開。 shutdownInput():關閉套接口的輸入流。:關閉套接口的輸入流。 shutdownOutput():關閉套接口的輸出流。:關閉套接口的輸出流。 ServerSocket類提供的主要方法有以下幾種:類提供的主要方法有以下幾種: accept():返回與服務器端建立連接的機器套接口。:返回與服務器端建立連接的機器套接口。 getChannel():返回服務套接口通道。:返回服務套接口通道。 getInetAddress():返回本機的地址對象。:返回本機的地址對象。 getLocalPort():返回服

60、務器所綁定的監(jiān)聽端口號。:返回服務器所綁定的監(jiān)聽端口號。 getSoTimeout():返回服務套接口限制的時間數。:返回服務套接口限制的時間數。 setSoTimeout(int timeout):設定服務套接口所需:設定服務套接口所需等到的時間限度。等到的時間限度。 toString():返回服務套接口字符串。:返回服務套接口字符串。 close():關閉服務套接口。:關閉服務套接口。 isClosed():判斷服務套接口是否關閉。:判斷服務套接口是否關閉。一對一的一對一的Socket C/S通信通信 TCP是一種可靠的、基于連接的網絡協議,在是一種可靠的、基于連接的網絡協議,在Inter

溫馨提示

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

評論

0/150

提交評論