Java基礎(chǔ)教程(第3版)_第14章_Java網(wǎng)絡(luò)編程_第1頁
Java基礎(chǔ)教程(第3版)_第14章_Java網(wǎng)絡(luò)編程_第2頁
Java基礎(chǔ)教程(第3版)_第14章_Java網(wǎng)絡(luò)編程_第3頁
Java基礎(chǔ)教程(第3版)_第14章_Java網(wǎng)絡(luò)編程_第4頁
Java基礎(chǔ)教程(第3版)_第14章_Java網(wǎng)絡(luò)編程_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第 1 頁注意:開始用功了注意:開始用功了!第 2 頁Java 基礎(chǔ)教程(第基礎(chǔ)教程(第3版)版) 第第14章章配合例子源代碼一起使用例子源代碼一起使用Power point 制作:耿祥義 張躍平Java網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程 第 3 頁主要內(nèi)容主要內(nèi)容第 4 頁14.1 URLURL類類 URLURL類是類是包中的一個重要的類,包中的一個重要的類,URLURL的實的實例封裝著一個統(tǒng)一資源定位符例封裝著一個統(tǒng)一資源定位符( (Uniform Resource Uniform Resource Locator)Locator),使用使用URLURL創(chuàng)建對象的應(yīng)用程序稱作客戶端創(chuàng)建對象的應(yīng)用程序稱作客戶

2、端程序。程序。 一個一個URLURL對象通常包含最基本的三部分信息:協(xié)議、對象通常包含最基本的三部分信息:協(xié)議、地址、資源。地址、資源。 第 5 頁14.1.1 URLURL的構(gòu)造方法的構(gòu)造方法 URL類通常使用如下的構(gòu)造方法創(chuàng)建一個類通常使用如下的構(gòu)造方法創(chuàng)建一個URL對象:對象: public URL(String spec) throws MalformedURLException 該構(gòu)造方法使用字符串初始化一個URL對象,例如:try url=new URL(http:/);catch(MalformedURLException e) System.out.println (Bad U

3、RL:+url); URL類類另一個常用的構(gòu)造方法是:另一個常用的構(gòu)造方法是: : public URL(String protocol, String host,String file) throws MalformedURLException 第 6 頁14.1.2 讀取讀取URLURL中的資源中的資源 URL對象調(diào)用對象調(diào)用 InputStream openStream() 方法可以返回一個輸入流,該輸入流指向方法可以返回一個輸入流,該輸入流指向URL對象所包含的資源。對象所包含的資源。通過該輸入流可以將服務(wù)器上的資源讀入到客戶端。通過該輸入流可以將服務(wù)器上的資源讀入到客戶端。 例子例子

4、1(Example14_1.java , Look.java )用戶在命令行窗口輸入網(wǎng)用戶在命令行窗口輸入網(wǎng)址,讀取服務(wù)器上的資源址,讀取服務(wù)器上的資源 .運行效果如圖運行效果如圖14.1 .14.1 .第 7 頁14.2 InetAdressInetAdress類類 14.2.1 地址的表示地址的表示 InternetInternet上的主機有兩種方式表示地址:上的主機有兩種方式表示地址:1 1域名域名 例如例如 2 2IPIP地址地址 例如例如 1010 包中的包中的InetAddressInetAddress類對象含有一個類對象含有一個In

5、ternetInternet主機地址主機地址的域名和的域名和IPIP地址,地址,例如例如 。 第 8 頁14.2.2 獲取地址獲取地址 1獲取獲取Internet上主機的地址上主機的地址 可以使用可以使用InetAddress類類的靜態(tài)方法的靜態(tài)方法getByName(String s);獲得一個獲得一個InetAddress對象對象,該對象含有主機地址的域名和,該對象含有主機地址的域名和IP地地址,該對象用如下格式表示它包含的信息:址,該對象用如下格式表示它包含的信息: 可以使用可以使用InetAddress類類的靜態(tài)方法的靜態(tài)方法getLocalHost()獲得一個獲得一個InetAddr

6、ess對象對象,該對象含有本地機的域名和該對象含有本地機的域名和IP地址。地址。 例子例子2分別獲取域名是分別獲取域名是的主機域名及的主機域名及IP地地址,同時獲取了址,同時獲取了IP地址是地址是的主機域名及的主機域名及IP地址。地址。 第 9 頁14.3 套接字套接字 14.3.1 套接字套接字 IPIP地址標(biāo)識地址標(biāo)識InternetInternet上的計算機,端口號標(biāo)識正在計算機上上的計算機,端口號標(biāo)識正在計算機上運行的進(jìn)程(程序)。端口號被規(guī)定為一個運行的進(jìn)程(程序)。端口號被規(guī)定為一個1616位的位的0 06553565535之間之間的整數(shù)。的整數(shù)。 當(dāng)兩個

7、程序需要通信時,它們可以通過使用當(dāng)兩個程序需要通信時,它們可以通過使用SocketSocket類建立套類建立套接字對象并連接在一起(端口號與接字對象并連接在一起(端口號與IPIP地址的組合得出一個網(wǎng)絡(luò)套地址的組合得出一個網(wǎng)絡(luò)套接字)。接字)。 第 10 頁14.3.2 客戶端套接字客戶端套接字 客戶端的程序使用客戶端的程序使用Socket類建立負(fù)責(zé)連接到服務(wù)器的套接字對類建立負(fù)責(zé)連接到服務(wù)器的套接字對象。象。建立連接到服務(wù)器的套接字對象:建立連接到服務(wù)器的套接字對象: try Socket mysocket=new Socket(“8”,2010); catc

8、h(IOException e) 與與mysocket相關(guān)的方法相關(guān)的方法 getInputStream()獲得一個輸入流 getOutputStream()獲得一個輸出流 用用getInputStream()得到的輸入流接到另一個DataInputStream數(shù)據(jù)流上 用用getOutputStream()得到的輸出流接到另一個DataOutputStream數(shù)據(jù)流上 第 11 頁14.3.3 ServerSocketServerSocket對象與服務(wù)器端套接字對象與服務(wù)器端套接字_1 _1 服務(wù)器必須建立一個服務(wù)器必須建立一個ServerSocketServerSocket對象對象,該對象

9、通過將客戶該對象通過將客戶端的套接字對象和服務(wù)器端的一個套接字對象連接起來,從而端的套接字對象和服務(wù)器端的一個套接字對象連接起來,從而達(dá)到連接的目的。達(dá)到連接的目的。 建立建立ServerSocketServerSocket對象:對象: try ServerSocket serverForClient =new ServerSocket(2010); catch(IOException e) 使用方法使用方法accept()accept()將客戶的套接字和服務(wù)器端的套接字連接將客戶的套接字和服務(wù)器端的套接字連接起來,代碼如下所示起來,代碼如下所示: try Socket sc= serverF

10、orClient .accept(); catch(IOException e) 所謂所謂“接收接收”客戶的套接字連接就是客戶的套接字連接就是accept()accept()方法會返回一方法會返回一個和客戶端個和客戶端SocketSocket對象相連接的對象相連接的SocketSocket對象。對象。第 12 頁14.3.3 ServerSocketServerSocket對象與服務(wù)器端套接字對象與服務(wù)器端套接字_2 _2 客戶端的套接字獲得的輸入輸出流和服務(wù)器端的套接字獲得的輸出輸入流互相連接.第 13 頁例子例子3 3 例子例子3中,客戶端向服務(wù)器問了三句話,服務(wù)器都給出了一一的回答。首先

11、將例子3中服務(wù)器端的Server.java編譯通過,并運行起來,等待客戶的呼叫,然后運行客戶端程序。客戶端運行效果如圖14.3,服務(wù)器端運行效果如圖14.4。 客戶端客戶端 (Client.java )服務(wù)器端服務(wù)器端 (Server.java )第 14 頁14.3.4 使用多線程技術(shù)使用多線程技術(shù) 為了防止堵塞線程,服務(wù)器端收到一個客戶的套接字后,就應(yīng)該為了防止堵塞線程,服務(wù)器端收到一個客戶的套接字后,就應(yīng)該啟動一個專門為該客戶服務(wù)的線程。啟動一個專門為該客戶服務(wù)的線程。如圖如圖14.5 .14.5 .使用使用SocketSocket類不帶參數(shù)的構(gòu)造方法類不帶參數(shù)的構(gòu)造方法Socket()

12、Socket()創(chuàng)建一個套接字對象,創(chuàng)建一個套接字對象,該對象需調(diào)用該對象需調(diào)用public void connect(SocketAddress endpoint) throws IOException 請求和參數(shù)請求和參數(shù)SocketAddress指定地址的套接字建立連接。指定地址的套接字建立連接。 為了使用為了使用connectconnect方法,可以使用方法,可以使用SocketAddressSocketAddress的子類的子類InetSocketAddressInetSocketAddress創(chuàng)建一個對象,創(chuàng)建一個對象,InetSocketAddressInetSocketAddr

13、ess的構(gòu)造方的構(gòu)造方法是:法是:InetSocketAddress(InetAddress addr, int port) 第 15 頁例子例子4 4 例子例子4中,客戶輸入圓的半徑并發(fā)送給服務(wù)器,服務(wù)器把計算出的圓的面積返回給客戶??蛻舳诉\行效果如圖14.3,服務(wù)器端運行效果如圖14.4。 客戶端客戶端 (Client.java, Read.java )服務(wù)器端服務(wù)器端 (Server.java )第 16 頁14.4 UDPUDP數(shù)數(shù) 據(jù)據(jù) 報報 基于基于UDPUDP的通信和基于的通信和基于TCPTCP的通信不同,基于的通信不同,基于UDPUDP的的信息傳遞更快,但不提供可靠性保證。信息

14、傳遞更快,但不提供可靠性保證。 基于基于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ù)包(好比接收信封一樣),(好比接收信封一樣),然后查看數(shù)據(jù)包中的內(nèi)容。然后查看數(shù)據(jù)包中的內(nèi)容。 第 17 頁14.4.1 發(fā)送數(shù)據(jù)包發(fā)送數(shù)據(jù)包 (1)用用DatagramPacketDatagramPacket類將數(shù)據(jù)打包,即用類將數(shù)據(jù)打包,即用DatagramPacketDatagramPacket類創(chuàng)建類

15、創(chuàng)建一個對象,稱為數(shù)據(jù)包。用一個對象,稱為數(shù)據(jù)包。用DatagramPacketDatagramPacket的以下兩個構(gòu)造方法的以下兩個構(gòu)造方法創(chuàng)建待發(fā)送的數(shù)據(jù)包:創(chuàng)建待發(fā)送的數(shù)據(jù)包: DatagramPacket(byte data,int length,InetAddtress address,int port) DatagramPack(byte data,int offset,int length, (2)用用DatagramSocketDatagramSocket類的不帶參數(shù)的構(gòu)造方法類的不帶參數(shù)的構(gòu)造方法DatagramSocket()創(chuàng)建一個對象,該對象負(fù)責(zé)發(fā)送數(shù)據(jù)包。例如:創(chuàng)建

16、一個對象,該對象負(fù)責(zé)發(fā)送數(shù)據(jù)包。例如: DatagramSocket mail_out=new DatagramSocket(); mail_out.send(data_pack); byte data=國慶60周年.getByte();InetAddtress address=InetAddtress.getName();DatagramPacket data_pack=new DatagramPacket(data,data.length, address,2009); data_pack可調(diào)用方法 public int getPort()可以獲取該數(shù)據(jù)包目標(biāo)端口 public InetA

17、ddress getAddres()可獲取這個數(shù)據(jù)包的目標(biāo)地址 public byet getData()可以返回數(shù)據(jù)包中的字節(jié)數(shù)組。第 18 頁14.4.2 接收數(shù)據(jù)包接收數(shù)據(jù)包 1 1. 首先用首先用DatagramSocketDatagramSocket的另一個構(gòu)造方法的另一個構(gòu)造方法DatagramSocket(int port) 創(chuàng)建一個對象創(chuàng)建一個對象, ,其中的參數(shù)必須和待接收的數(shù)據(jù)包的端口號其中的參數(shù)必須和待接收的數(shù)據(jù)包的端口號相同。如果發(fā)送方發(fā)送的數(shù)據(jù)包的端口是相同。如果發(fā)送方發(fā)送的數(shù)據(jù)包的端口是5666,5666,那么如下創(chuàng)建那么如下創(chuàng)建DatagramSocketData

18、gramSocket對象對象: DatagramSocket mail_in=new DatagramSocket(5666); 2 2. 然后然后對象對象mail_inmail_in使用方法使用方法receive(DatagramPacket pack)接受數(shù)據(jù)包接受數(shù)據(jù)包。3.3.用用DatagramPackDatagramPack類的另外一個構(gòu)造方法類的另外一個構(gòu)造方法DatagramPack(byte data,int length)創(chuàng)建一個數(shù)據(jù)包,用于接收數(shù)據(jù)包,例如創(chuàng)建一個數(shù)據(jù)包,用于接收數(shù)據(jù)包,例如: byte data=new byte100; int length=90; D

19、atagramPacket pack=new DatagramPacket(data,length); mail_in.receive(pack); 該數(shù)據(jù)包該數(shù)據(jù)包packpack將接收長度是將接收長度是lengthlength字節(jié)的數(shù)據(jù)放入字節(jié)的數(shù)據(jù)放入datadata。第 19 頁例子例子5 5 例子例子5 5中:張山和李四使用用戶數(shù)據(jù)報互相發(fā)送和接收數(shù)據(jù)包,程序運行時“張三”所在主機在命令行輸入數(shù)據(jù)發(fā)送給“李四”所在主機,將接收到的數(shù)據(jù)顯示在命令行的右側(cè)(效果如圖14.8);同樣,“李四”所在主機在命令行輸入數(shù)據(jù)發(fā)送給“張三”所在主機,將接收到的數(shù)據(jù)顯示在命令行的右側(cè)(效果如圖14.9)。 “張三張三”主機主機 (ZhanSan.java , ReceiveLetterForZhang.java )“李四李四”主機主機 (LiSi.java , ReceiveLetterForLi.java )第 20 頁14.5 廣播數(shù)據(jù)報廣播數(shù)據(jù)報 廣播數(shù)據(jù)報涉及到地址和端口。廣播數(shù)據(jù)報涉及到地址和端口。 廣播數(shù)據(jù)報是一種較新的技術(shù),要廣播或接收廣播的主機都廣播數(shù)據(jù)報是一種較新的技術(shù),要廣播或接收廣播的主機都必須加入到同一個必須加入到同一個D D類地址。類地址。 設(shè)計廣播數(shù)據(jù)報網(wǎng)絡(luò)程序時,必須將要廣播或接收廣播的主機加入到同一個D類地址。D類地址也稱作個組播

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論