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

下載本文檔

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

文檔簡介

注意:開始用功了!1精選課件ppt1頁1頁《Java2實用教程(第4版)》第13章配合例子源代碼一起使用Powerpoint制作:耿祥義張躍平Java網(wǎng)絡編程

2精選課件ppt2頁導讀主要內(nèi)容URL類InetAdress類套接字UDP數(shù)據(jù)報廣播數(shù)據(jù)報Java遠程調(diào)用(RMI)3精選課件ppt3頁§13.1URL類

URL類是包中的一個重要的類,URL的實例封裝著一個統(tǒng)一資源定位符(UniformResourceLocator),使用URL創(chuàng)建對象的應用程序稱作客戶端程序。一個URL對象通常包含最基本的三部分信息:協(xié)議、地址、資源。

4精選課件ppt4頁§13.1.1URL的構造方法

URL類通常使用如下的構造方法創(chuàng)建一個URL對象:publicURL(Stringspec)throwsMalformedURLException

publicURL(Stringprotocol,Stringhost,Stringfile)throwsMalformedURLException5精選課件ppt5頁§13.1.2讀取URL中的資源

URL對象調(diào)用

InputStreamopenStream()

方法可以返回一個輸入流,該輸入流指向URL對象所包含的資源。通過該輸入流可以將服務器上的資源讀入到客戶端。

例子1(Example13_1.java,Look.java)用戶在命令行窗口輸入網(wǎng)址,讀取服務器上的資源.運行效果如圖13.1.6精選課件ppt6頁§13.2InetAdress類

§13.2.1地址的表示

Internet上的主機有兩種方式表示地址:1.域名例如2.IP地址例如10

包中的InetAddress類對象含有一個Internet主機地址的域名和IP地址,例如

7精選課件ppt7頁§13.2.2獲取地址1.獲取Internet上主機的地址可以使用InetAddress類的靜態(tài)方法getByName(Strings);獲得一個InetAddress對象,該對象含有主機地址的域名和IP地址,該對象用如下格式表示它包含的信息:/0

2.獲取本地機的地址我們可以使用InetAddress類的靜態(tài)方法getLocalHost()獲得一個InetAddress對象,該對象含有本地機的域名和IP地址。例子28精選課件ppt8頁§13.3套接字

§13.3.1套接字

IP地址標識Internet上的計算機,端口號標識正在計算機上運行的進程(程序)。端口號被規(guī)定為一個16位的0~65535之間的整數(shù)。當兩個程序需要通信時,它們可以通過使用Socket類建立套接字對象并連接在一起(端口號與IP地址的組合得出一個網(wǎng)絡套接字)。

9精選課件ppt9頁§13.3.2客戶端套接字

客戶端的程序使用Socket類建立負責連接到服務器的套接字對象。建立連接到服務器的套接字對象:try{Socketmysocket=newSocket(“”,1880);}catch(IOExceptione){}◆與mysocket相關的方法getInputStream()獲得一個輸入流

getOutputStream()獲得一個輸出流

用getInputStream()得到的輸入流接到另一個DataInputStream數(shù)據(jù)流上

用getOutputStream()得到的輸出流接到另一個DataOutputStream數(shù)據(jù)流上

10精選課件ppt10頁§13.3.3

ServerSocket對象與服務器端套接字_1

◆服務器必須建立一個ServerSocket對象,該對象通過將客戶端的套接字對象和服務器端的一個套接字對象連接起來,從而達到連接的目的。◆建立ServerSocket對象:try{ServerSocketserverForClient=newServerSocket(2010);}catch(IOExceptione){}

◆使用方法accept()將客戶的套接字和服務器端的套接字連接起來,代碼如下所示:try{Socketsc=serverForClient.accept();}catch(IOExceptione){}

◆所謂“接收”客戶的套接字連接就是accept()方法會返回一個和客戶端Socket對象相連接的Socket對象。11精選課件ppt11頁§13.3.3ServerSocket對象與服務器端套接字_2客戶端的套接字獲得的輸入\輸出流和服務器端的套接字獲得的輸出\輸入流互相連接.12精選課件ppt12頁

例子3中,客戶端向服務器問了三句話,服務器都給出了一一的回答。首先將例子3中服務器端的Server.java編譯通過,并運行起來,等待客戶的呼叫,然后運行客戶端程序。客戶端運行效果如圖13.3,服務器端運行效果如圖13.4。

客戶端(Client.java)服務器端(Server.java)13精選課件ppt13頁§13.3.4使用多線程技術

◆為了防止堵塞線程,服務器端收到一個客戶的套接字后,就應該啟動一個專門為該客戶服務的線程。

◆在下面的例子4中,客戶使用Socket類不帶參數(shù)的構造方法Socket()創(chuàng)建一個套接字對象,該對象需調(diào)用

publicvoidconnect(SocketAddressendpoint)throwsIOException請求和參數(shù)SocketAddress指定地址的套接字建立連接。◆為了使用connect方法,可以使用SocketAddress的子類InetSocketAddress創(chuàng)建一個對象,InetSocketAddress的構造方法是:InetSocketAddress(InetAddressaddr,intport)

14精選課件ppt14頁

例子4中,客戶輸入圓的半徑并發(fā)送給服務器,服務器把計算出的圓的面積返回給客戶。因此可以將計算量大的工作放在服務器端,客戶負責計算量小的工作,實現(xiàn)客戶-服務器交互計算,來完成某項任務。首先將例子4中服務器端的程序編譯通過,并運行起來,等待客戶的呼叫。客戶端運行效果如圖13.6,服務器端運行效果如圖13.7。

客戶端(Client.java,Read.java)服務器端(Server.java)

15精選課件ppt15頁§13.4UDP數(shù)

據(jù)

基于UDP的通信和基于TCP的通信不同,基于UDP的信息傳遞更快,但不提供可靠性保證。

基于UDP通信的基本模式是:

1.將數(shù)據(jù)打包,稱為數(shù)據(jù)包(好比將信件裝入信封一樣),然后將數(shù)據(jù)包發(fā)往目的地。

2.接受別人發(fā)來的數(shù)據(jù)包(好比接收信封一樣),然后查看數(shù)據(jù)包中的內(nèi)容。16精選課件ppt16頁§13.4.1發(fā)送數(shù)據(jù)包

1.用DatagramPacket類將數(shù)據(jù)打包,即用DatagramPacket類創(chuàng)建一個對象,稱為數(shù)據(jù)包。用DatagramPacket的以下兩個構造方法創(chuàng)建待發(fā)送的數(shù)據(jù)包:

DatagramPacket(bytedata[],intlength,InetAddtressaddress,intport)DatagramPack(bytedata[],intoffset,intlength,InetAddtressaddress,intport)

2.用DatagramSocket類的不帶參數(shù)的構造方法:DatagramSocket()創(chuàng)建一個對象,該對象負責發(fā)送數(shù)據(jù)包。例如:

DatagramSocketmail_out=newDatagramSocket();mail_out.send(data_pack);

17精選課件ppt17頁§13.4.2接收數(shù)據(jù)包

1.首先用DatagramSocket的另一個構造方法DatagramSocket(intport)

創(chuàng)建一個對象,其中的參數(shù)必須和待接收的數(shù)據(jù)包的端口號相同。例如,如果發(fā)送方發(fā)送的數(shù)據(jù)包的端口是5666,那么如下創(chuàng)建DatagramSocket對象:

DatagramSocketmail_in=newDatagramSocket(5666);

2.

然后對象mail_in使用方法receive(DatagramPacketpack)接受數(shù)據(jù)包。3.用DatagramPack類的另外一個構造方法:DatagramPack(bytedata[],intlength)創(chuàng)建一個數(shù)據(jù)包,用于接收數(shù)據(jù)包,例如:

bytedata[]=newbyte[100];intlength=90;DatagramPacketpack=newDatagramPacket(data,length);mail_in.receive(pack);

該數(shù)據(jù)包pack將接收長度是length字節(jié)的數(shù)據(jù)放入data。18精選課件ppt18頁

例子5中:張山和李四使用用戶數(shù)據(jù)報(可用本地機模擬)互相發(fā)送和接收數(shù)據(jù)包,程序運行時“張三”所在主機在命令行輸入數(shù)據(jù)發(fā)送給“李四”所在主機,將接收到的數(shù)據(jù)顯示在命令行的右側(效果如圖13.8);同樣,“李四”所在主機在命令行輸入數(shù)據(jù)發(fā)送給“張三”所在主機,將接收到的數(shù)據(jù)顯示在命令行的右側(效果如圖13.9)。

“張三”主機

(ZhanSan.java,ReceiveLetterForZhang.java)“李四”主機(LiSi.java,ReceiveLetterForLi.java)19精選課件ppt19頁§13.5廣播數(shù)據(jù)報

廣播數(shù)據(jù)報涉及到地址和端口。廣播數(shù)據(jù)報是一種較新的技術,要廣播或接收廣播的主機都必須加入到同一個D類地址。

廣播端(BroadCast.java)例子6中,一個主機不斷地重復廣播放假通知,加入到同一組的主機都可以隨時接收廣播的信息.

接收端

(Receiver.java)20精選課件ppt20頁§13.6Java遠程調(diào)用(RMI)

Java遠程調(diào)用,RMI(RemoteMethodInvocation)是一種分布式技術,使用RMI可以讓一個虛擬機(JVM)上的應用程序請求調(diào)用位于網(wǎng)絡上另一處的JVM上的對象方法。習慣上稱發(fā)出調(diào)用請求的虛擬機(JVM)為(本地)客戶機,稱接受并執(zhí)行請求的虛擬機(JVM)為(遠程)服務器。21精選課件ppt21頁§13.6.1遠程對象及其代理

1.遠程對象:駐留在(遠程)服務器上的對象是客戶要請求的對象,稱作遠程對象。

2.代理與存根(Stub):代理的特點是它與遠程對象實現(xiàn)了相同的接口。存根(Stub):一種特殊的字節(jié)碼,并讓這個存根產(chǎn)生的對象為作為遠程對象的代理。

3.Remote接口RMI為了標識一個對象是遠程對象,即可以被客戶請求的對象,要求遠程對象必須實現(xiàn)java.rmi包中的Remote接口,也就是說只有實現(xiàn)該接口的類的實例才被RMI認為是一個遠程對象。22精選課件ppt22頁§13.6.2RMI的設計細節(jié)

1.擴展Remote接口定義一個接口是java.rmi包中Remote的子接口,即擴展Remote接口。

RemoteSubject.java2.遠程對象創(chuàng)建遠程對象的類必須要實現(xiàn)Remote接口,RMI使用Remote接口來標識遠程對象,但是Remote中沒有方法,因此創(chuàng)建遠程對象的類需要實現(xiàn)Remote接口的一個子接口。RemoteConcreteSubject.java

3.存根(Stub)與代理:RMI使用rmic命令生成存根

RemoteConcreteSubject_Stub.class

4.啟動注冊rmiregistry:執(zhí)行ri

溫馨提示

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

評論

0/150

提交評論