Java 2實用教程第4版_第13章_Java網(wǎng)絡(luò)編程_第1頁
Java 2實用教程第4版_第13章_Java網(wǎng)絡(luò)編程_第2頁
Java 2實用教程第4版_第13章_Java網(wǎng)絡(luò)編程_第3頁
Java 2實用教程第4版_第13章_Java網(wǎng)絡(luò)編程_第4頁
Java 2實用教程第4版_第13章_Java網(wǎng)絡(luò)編程_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、.1 頁1注意:開始用功了!注意:開始用功了!.2 頁2Java2實用教程實用教程(第第4版版) 第第13章章配合例子源代碼一起使用例子源代碼一起使用Power point 制作:耿祥義 張躍平JavaJava網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 .3 頁3導(dǎo)讀導(dǎo)讀主要內(nèi)容主要內(nèi)容URL類類InetAdress類類套接字套接字UDP數(shù)據(jù)報數(shù)據(jù)報廣播數(shù)據(jù)報廣播數(shù)據(jù)報Java遠程調(diào)用遠程調(diào)用(RMI).4 頁413.1 URLURL類類 URLURL類是類是包中的一個重要的類,包中的一個重要的類,URLURL的實的實例封裝著一個統(tǒng)一資源定位符例封裝著一個統(tǒng)一資源定位符( (Uniform Resource Unifo

2、rm Resource Locator)Locator),使用使用URLURL創(chuàng)建對象的應(yīng)用程序稱作客戶端創(chuàng)建對象的應(yīng)用程序稱作客戶端程序。程序。 一個一個URLURL對象通常包含最基本的三部分信息:協(xié)議、對象通常包含最基本的三部分信息:協(xié)議、地址、資源。地址、資源。 .5 頁513.1.1 URLURL的構(gòu)造方法的構(gòu)造方法 URL類通常使用如下的構(gòu)造方法創(chuàng)建一個類通常使用如下的構(gòu)造方法創(chuàng)建一個URL對象:對象: public URL(String spec) throws MalformedURLException public URL(String protocol, String hos

3、t,String file) throws MalformedURLException .6 頁613.1.2 讀取讀取URLURL中的資源中的資源 URL對象調(diào)用對象調(diào)用 InputStream openStream() 方法可以返回一個輸入流,該輸入流指向方法可以返回一個輸入流,該輸入流指向URL對象所包含的資源。通過該對象所包含的資源。通過該輸入流可以將服務(wù)器上的資源讀入到客戶端。輸入流可以將服務(wù)器上的資源讀入到客戶端。 例子例子1(Example13_1.java , Look.java )用戶在命令行窗用戶在命令行窗口輸入網(wǎng)址,讀取服務(wù)器上口輸入網(wǎng)址,讀取服務(wù)器上的資源的資源 .運行

4、效果如圖運行效果如圖13.1 .7 頁713.2 InetAdressInetAdress類類 13.2.1 地址的表示地址的表示 InternetInternet上的主機有兩種方式表示地址:上的主機有兩種方式表示地址:1 1域名域名 例如例如 2 2IPIP地址地址 例如例如 202.108.35.210202.108.35.210 包中的包中的InetAddressInetAddress類對象含有一個類對象含有一個InternetInternet主機地址主機地址的域名和的域名和IPIP地址,地址,例如例如 。 .8 頁813.2.2 獲取地址獲取地址 1獲取獲取Internet上主機的地址

5、上主機的地址可以使用可以使用InetAddress類類的靜態(tài)方法的靜態(tài)方法getByName(String s);獲得一個獲得一個InetAddress對象對象,該對象含有主機地址的域名,該對象含有主機地址的域名和和IP地址,該對象用如下格式表示它包含的信息:地址,該對象用如下格式表示它包含的信息: 2獲取本地機的地址獲取本地機的地址我們可以使用我們可以使用InetAddress類類的靜態(tài)方法的靜態(tài)方法getLocalHost()獲得一獲得一個個InetAddress對象對象,該對象含有本地機的域名和該對象含有本地機的域名和IP地址。地址。 例子例子2 .9 頁913.3 套接字套接字 13.

6、3.1 套接字套接字 IPIP地址標識地址標識InternetInternet上的計算機,端口號標識正在計算機上運上的計算機,端口號標識正在計算機上運行的進程(程序)。端口號被規(guī)定為一個行的進程(程序)。端口號被規(guī)定為一個1616位的位的0 06553565535之間的之間的整數(shù)。整數(shù)。 當兩個程序需要通信時,它們可以通過使用當兩個程序需要通信時,它們可以通過使用SocketSocket類建立套類建立套接字對象并連接在一起(端口號與接字對象并連接在一起(端口號與IPIP地址的組合得出一個網(wǎng)絡(luò)套地址的組合得出一個網(wǎng)絡(luò)套接字)。接字)。 .10 頁1013.3.2 客戶端套接字客戶端套接字 客戶端

7、的程序使用客戶端的程序使用Socket類建立負責(zé)連接到服務(wù)器的套接字類建立負責(zé)連接到服務(wù)器的套接字對象。對象。建立連接到服務(wù)器的套接字對象:建立連接到服務(wù)器的套接字對象: try Socket mysocket=new Socket(“”,1880); catch(IOException e) 與與mysocket相關(guān)的方法相關(guān)的方法 getInputStream()獲得一個輸入流獲得一個輸入流 getOutputStream()獲得一個輸出流獲得一個輸出流 用用getInputStream()得到的輸入流接到另一個得到的輸入流接到另一個DataInputStreamDataInputStre

8、am數(shù)據(jù)流上數(shù)據(jù)流上 用用getOutputStream()得到的輸出流接到另一個得到的輸出流接到另一個DataOutputStream數(shù)據(jù)流上數(shù)據(jù)流上 .11 頁1113.3.3 ServerSocketServerSocket對象與服務(wù)器端套接字對象與服務(wù)器端套接字_1 _1 服務(wù)器必須建立一個服務(wù)器必須建立一個ServerSocketServerSocket對象對象,該對象通過將客該對象通過將客戶端的套接字對象和服務(wù)器端的一個套接字對象連接起來,從戶端的套接字對象和服務(wù)器端的一個套接字對象連接起來,從而達到連接的目的。而達到連接的目的。 建立建立ServerSocketServerSoc

9、ket對象:對象: try ServerSocket serverForClient =new ServerSocket(2010); catch(IOException e) 使用方法使用方法accept()accept()將客戶的套接字和服務(wù)器端的套接字連接將客戶的套接字和服務(wù)器端的套接字連接起來,代碼如下所示起來,代碼如下所示: try Socket sc= serverForClient .accept(); catch(IOException e) 所謂所謂“接收接收”客戶的套接字連接就是客戶的套接字連接就是accept()accept()方法會返回一方法會返回一個和客戶端個和客戶端

10、SocketSocket對象相連接的對象相連接的SocketSocket對象。對象。.12 頁1213.3.3 ServerSocketServerSocket對象與服務(wù)器端套接字對象與服務(wù)器端套接字_2 _2 客戶端的套接字獲得的輸入輸出流和服務(wù)器端的套接字獲得的輸出輸入流互相連接.13 頁13 例子例子3中,客戶端向服務(wù)器問了三句話,服務(wù)器都給出了一一的回答。首先將例子3中服務(wù)器端的Server.java編譯通過,并運行起來,等待客戶的呼叫,然后運行客戶端程序??蛻舳诉\行效果如圖13.3,服務(wù)器端運行效果如圖13.4。 客戶端客戶端 (Client.java )服務(wù)器端服務(wù)器端 (Serv

11、er.java ).14 頁1413.3.4 使用多線程技術(shù)使用多線程技術(shù) 為了防止堵塞線程,服務(wù)器端收到一個客戶的套接字后,就為了防止堵塞線程,服務(wù)器端收到一個客戶的套接字后,就應(yīng)該啟動一個專門為該客戶服務(wù)的線程。應(yīng)該啟動一個專門為該客戶服務(wù)的線程。 在下面的例子在下面的例子4中,客戶使用中,客戶使用SocketSocket類不帶參數(shù)的構(gòu)造方法類不帶參數(shù)的構(gòu)造方法Socket()Socket()創(chuàng)建一個套接字對象,該對象需調(diào)用創(chuàng)建一個套接字對象,該對象需調(diào)用 public void connect(SocketAddress endpoint) throws IOExceptionpubli

12、c void connect(SocketAddress endpoint) throws IOException請求和參數(shù)請求和參數(shù)SocketAddressSocketAddress指定地址的套接字建立連接。指定地址的套接字建立連接。為了使用為了使用connectconnect方法,可以使用方法,可以使用S o c k e t A d d r e s sS o c k e t A d d r e s s 的 子 類的 子 類InetSocketAddressInetSocketAddress創(chuàng)建一個對象,創(chuàng)建一個對象,InetSocketAddressInetSocketAddress的構(gòu)

13、造方法是:的構(gòu)造方法是:InetSocketAddress(InetAddress addr, int port)InetSocketAddress(InetAddress addr, int port) .15 頁15 例子例子4中,客戶輸入圓的半徑并發(fā)送給服務(wù)器,服務(wù)器把計算出的圓的面積返回給客戶。因此可以將計算量大的工作放在服務(wù)器端,客戶負責(zé)計算量小的工作,實現(xiàn)客戶-服務(wù)器交互計算,來完成某項任務(wù)。首先將例子首先將例子4中服中服務(wù)器端的程序編譯通過務(wù)器端的程序編譯通過,并運行起來,等待客戶的呼叫??蛻舳诉\行效果如圖13.6,服務(wù)器端運行效果如圖13.7。 客戶端客戶端 (Client.j

14、ava , Read.java )服務(wù)器端服務(wù)器端( (Server.java Server.java ) ) .16 頁1613.4 UDPUDP數(shù)數(shù) 據(jù)據(jù) 報報 基于基于UDPUDP的通信和基于的通信和基于TCPTCP的通信不同,基于的通信不同,基于UDPUDP的的信息傳遞更快,但不提供可靠性保證。信息傳遞更快,但不提供可靠性保證。 基于基于UDPUDP通信的基本模式是:通信的基本模式是: 1 1將數(shù)據(jù)打包將數(shù)據(jù)打包,稱為數(shù)據(jù)包(好比將信件裝入信,稱為數(shù)據(jù)包(好比將信件裝入信封一樣),然后將數(shù)據(jù)包發(fā)往目的地。封一樣),然后將數(shù)據(jù)包發(fā)往目的地。 2 2接受別人發(fā)來的數(shù)據(jù)包接受別人發(fā)來的數(shù)據(jù)包

15、(好比接收信封一樣),(好比接收信封一樣),然后查看數(shù)據(jù)包中的內(nèi)容。然后查看數(shù)據(jù)包中的內(nèi)容。 .17 頁1713.4.1 發(fā)送數(shù)據(jù)包發(fā)送數(shù)據(jù)包 1 1 . 用用 D a t a g r a m P a c k e tD a t a g r a m P a c k e t 類 將 數(shù) 據(jù) 打 包 , 即 用類 將 數(shù) 據(jù) 打 包 , 即 用DatagramPacketDatagramPacket類創(chuàng)建一個對象,稱為數(shù)據(jù)包。用類創(chuàng)建一個對象,稱為數(shù)據(jù)包。用DatagramPacketDatagramPacket的以下兩個構(gòu)造方法創(chuàng)建待發(fā)送的數(shù)據(jù)的以下兩個構(gòu)造方法創(chuàng)建待發(fā)送的數(shù)據(jù)包:包: Datag

16、ramPacket(byte data,int length,InetAddtress address,int port)DatagramPacket(byte data,int length,InetAddtress address,int port) DatagramPack(byte data,int offset,int length,InetAddtress address,int port) DatagramPack(byte data,int offset,int length,InetAddtress address,int port) 2 2用用DatagramSocketD

17、atagramSocket類的不帶參數(shù)的構(gòu)造方法:類的不帶參數(shù)的構(gòu)造方法:DatagramSocket()DatagramSocket()創(chuàng)建一個對象,該對象負責(zé)發(fā)送數(shù)據(jù)創(chuàng)建一個對象,該對象負責(zé)發(fā)送數(shù)據(jù)包。例如:包。例如: DatagramSocket mail_out=new DatagramSocket();DatagramSocket mail_out=new DatagramSocket(); mail_out.send(data_pack); mail_out.send(data_pack); .18 頁1813.4.2 接收數(shù)據(jù)包接收數(shù)據(jù)包 1 1 . 首 先 用首 先 用 D a

18、 t a g r a m S o c k e tD a t a g r a m S o c k e t 的 另 一 個 構(gòu) 造 方 法的 另 一 個 構(gòu) 造 方 法DatagramSocket(int port)DatagramSocket(int port) 創(chuàng)建一個對象創(chuàng)建一個對象, ,其中的參數(shù)必須和待其中的參數(shù)必須和待接收的數(shù)據(jù)包的端口號相同。例如,如果發(fā)送方發(fā)送的數(shù)據(jù)包的接收的數(shù)據(jù)包的端口號相同。例如,如果發(fā)送方發(fā)送的數(shù)據(jù)包的端口是端口是5666,5666,那么如下創(chuàng)建那么如下創(chuàng)建DatagramSocketDatagramSocket對象對象: DatagramSocket mai

19、l_in=new DatagramSocket(5666); DatagramSocket mail_in=new DatagramSocket(5666); 2 2. 然后然后對象對象mail_inmail_in使用方法使用方法receive(DatagramPacket pack)receive(DatagramPacket pack)接受數(shù)據(jù)接受數(shù)據(jù)包。包。3.3.用用 DatagramPackDatagramPack類的另外一個構(gòu)造方法:類的另外一個構(gòu)造方法:DatagramPack(byte DatagramPack(byte data,int length)data,int len

20、gth)創(chuàng)建一個數(shù)據(jù)包,用于接收數(shù)據(jù)包,例如創(chuàng)建一個數(shù)據(jù)包,用于接收數(shù)據(jù)包,例如: byte data=new byte100;byte data=new byte100; int length=90; int length=90; DatagramPacket pack=new DatagramPacket(data,length); DatagramPacket pack=new DatagramPacket(data,length); mail_in.receive(pack); mail_in.receive(pack); 該數(shù)據(jù)包該數(shù)據(jù)包packpack將接收長度是將接收長度是len

21、gthlength字節(jié)的數(shù)據(jù)放入字節(jié)的數(shù)據(jù)放入datadata。.19 頁19 例子例子5中:張山和李四使用用戶數(shù)據(jù)報(可用本地機模擬)互相發(fā)送和接收數(shù)據(jù)包,程序運行時“張三”所在主機在命令行輸入數(shù)據(jù)發(fā)送給“李四”所在主機,將接收到的數(shù)據(jù)顯示在命令行的右側(cè)(效果如圖13.8);同樣,“李四”所在主機在命令行輸入數(shù)據(jù)發(fā)送給“張三”所在主機,將接收到的數(shù)據(jù)顯示在命令行的右側(cè)(效果如圖13.9)。 “張三張三”主機主機 (ZhanSan.java , ReceiveLetterForZhang.java )“李四李四”主機主機 (LiSi.java , ReceiveLetterForLi.java

22、 ).20 頁2013.5 廣播數(shù)據(jù)報廣播數(shù)據(jù)報 廣播數(shù)據(jù)報涉及到地址和端口。廣播數(shù)據(jù)報涉及到地址和端口。 廣播數(shù)據(jù)報是一種較新的技術(shù),要廣播或接收廣播的主機都必須加入到同廣播數(shù)據(jù)報是一種較新的技術(shù),要廣播或接收廣播的主機都必須加入到同一個一個D D類地址。類地址。 廣播端廣播端 (BroadCast.java ) 例子例子6 6中,一個主機不斷地重復(fù)廣播放假通知中,一個主機不斷地重復(fù)廣播放假通知, ,加入到同一組的主機都可加入到同一組的主機都可以隨時接收廣播的信息以隨時接收廣播的信息. . 接收端接收端 (Receiver.java ).21 頁2113.6 Java Java 遠程調(diào)用(遠

23、程調(diào)用(RMIRMI) JavaJava遠程調(diào)用,遠程調(diào)用,RMIRMI(Remote Method InvocationRemote Method Invocation)是是一種分布式技術(shù),使用一種分布式技術(shù),使用RMIRMI可以讓一個虛擬機可以讓一個虛擬機( (JVM)JVM)上上的應(yīng)用程序請求調(diào)用位于網(wǎng)絡(luò)上另一處的的應(yīng)用程序請求調(diào)用位于網(wǎng)絡(luò)上另一處的JVMJVM上的對上的對象方法。習(xí)慣上稱發(fā)出調(diào)用請求的虛擬機(象方法。習(xí)慣上稱發(fā)出調(diào)用請求的虛擬機(JVMJVM)為為(本地)客戶機,稱接受并執(zhí)行請求的虛擬機(本地)客戶機,稱接受并執(zhí)行請求的虛擬機(JVMJVM)為(遠程)服務(wù)器。為(遠程)

24、服務(wù)器。 .22 頁2213.6.1 遠程對象及其代理遠程對象及其代理 1.1.遠程對象遠程對象: :駐留在(遠程)服務(wù)器上的對象是客戶要請求的對象,稱作遠駐留在(遠程)服務(wù)器上的對象是客戶要請求的對象,稱作遠程對象。程對象。 2 2代理與存根代理與存根( (Stub)Stub): : 代理的特點是它與遠程對象實現(xiàn)了相同的接口。代理的特點是它與遠程對象實現(xiàn)了相同的接口。 存根(存根(StubStub):):一種特殊的字節(jié)碼,并讓這個存根產(chǎn)生的對象為作為遠程一種特殊的字節(jié)碼,并讓這個存根產(chǎn)生的對象為作為遠程對象的代理。對象的代理。 3Remote接口接口 RMI為了標識一個對象是遠程對象,即可以

25、被客戶請求的對象,要求遠程為了標識一個對象是遠程對象,即可以被客戶請求的對象,要求遠程對象必須實現(xiàn)對象必須實現(xiàn)java.rmi包中的包中的Remote接口,也就是說只有實現(xiàn)該接口的類的接口,也就是說只有實現(xiàn)該接口的類的實例才被實例才被RMI認為是一個遠程對象。認為是一個遠程對象。.23 頁2313.6.2 RMIRMI的設(shè)計細節(jié)的設(shè)計細節(jié) 1 1擴展擴展RemoteRemote接口接口 定義一個接口是定義一個接口是java.rmijava.rmi包中包中RemoteRemote的子接口,即擴展的子接口,即擴展RemoteRemote接口。接口。 RemoteSubject.java Remot

26、eSubject.java 2 2遠程對象遠程對象 創(chuàng)建遠程對象的類必須要實現(xiàn)創(chuàng)建遠程對象的類必須要實現(xiàn)RemoteRemote接口,接口,RMIRMI使用使用RemoteRemote接口來標識遠接口來標識遠程對象,但是程對象,但是RemoteRemote中沒有方法,因此創(chuàng)建遠程對象的類需要實現(xiàn)中沒有方法,因此創(chuàng)建遠程對象的類需要實現(xiàn)RemoteRemote接接口的一個子接口??诘囊粋€子接口。RemoteConcreteSubject.javaRemoteConcreteSubject.java 3 3存根(存根(StubStub)與代理與代理: :RMIRMI使用使用rmicrmic命令生成存根命令生成存根 RemoteConcreteSubject_Stub.classRemoteConcreteSubject_Stub.class 4 4啟動注冊啟動注

溫馨提示

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

評論

0/150

提交評論