[理學]電子教案--第11章ppt課件_第1頁
[理學]電子教案--第11章ppt課件_第2頁
[理學]電子教案--第11章ppt課件_第3頁
[理學]電子教案--第11章ppt課件_第4頁
[理學]電子教案--第11章ppt課件_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第11章章 Java 中的網(wǎng)絡(luò)編程中的網(wǎng)絡(luò)編程 本章導(dǎo)讀本章導(dǎo)讀n1. URL類n2. 讀取URL中的資源n3. 顯示URL資源中的HTML文件n4. 處理超鏈接n5. InetAddress類n6. 套接字Socketn7. 使用多線程處理套接字連接n8. UDP數(shù)據(jù)報n9. 播送數(shù)據(jù)包11.1 URL類 包中的 URL類是對統(tǒng)一資源定位符Uniform Resource Locator的抽象,使用URL創(chuàng)立對象的應(yīng)用程序稱作客戶端程序,一個URL對象存放著一個詳細的資源的引用,說明客戶要訪問這個URL中的資源,利用URL對象可以獲取URL中的資源。一個URL對象通常包含最根本的三部分信息

2、:協(xié)議、地址、資源。協(xié)議必須是URL對象所在的Java虛擬機支持的協(xié)議,許多協(xié)議并不為我們所常用,而常用的 、Ftp、file協(xié)議都是虛擬機支持的協(xié)議;地址必須是能連接的有效IP地址或域名;資源可以是主機上的任何一個文件。 1URL的構(gòu)造方法 public URLString spec throws MalformedURLException該構(gòu)造方法使用字符串初始化一個URL對象,例如try url=new URL yahoo ; catchMalformedURLException e System.out.println Bad URL:+url; 該URL對象使用的協(xié)議是“ 協(xié)議,即用

3、戶按著這種協(xié)議和指定的效勞器通信,該URL對象包含的地址是“yahoo ,所包含的資源是默認的資源主頁。 public URLString protocol, String host,String file throws MalformedURLException 該構(gòu)造方法構(gòu)造的URL對象的協(xié)議、地址和資源分別由參數(shù)protocol、host和file指定11.2 讀取URL中的資源 URL對象調(diào)用 InputStream openStream 方法可以返回一個輸入流,該輸入流指向URL對象所包含的資源。通過該輸入流可以將效勞器上的資源信息讀入到客戶端。 下面的例子1在一個文本框中輸入網(wǎng)址,

4、然后點擊確定按鈕讀取效勞器上的資源,由于網(wǎng)絡(luò)速度或其它的因素,URL資源的讀取可能會引起堵塞,因此,程序需在一個線程中讀取URL資源,以免堵塞主線程。 返回11.3 顯示URL資源中的html文件 在上面的例子1中,我們可以將 yahoo 的主頁的內(nèi)容顯示在文本區(qū)中,但是,有時候我們想看到網(wǎng)頁的運行效果。Javax.swing包中的JEditorPane類可以解釋執(zhí)行html文件,也就是說,假如你把html文件讀入到JEditorPane,該html文件就會被解釋執(zhí)行,顯示在JEditorPane中,這樣程序就看到了網(wǎng)頁的運行效果。 可以使用JEditorPane類的構(gòu)造方法: public

5、JEditorPane public JEditorPaneURL initialPage throws IOException public JEditorPaneString url throws IOException 構(gòu)造JEditorPane對象,后兩個構(gòu)造方法使用參數(shù)initialPage或url指定該對象最初顯示的URL中的資源。JEditorPane對象調(diào)用 public void setPageURL page throws IOException 法可以顯示新的URL中的資源。 在下面的例子2中,我們用JEditorPane對象顯示網(wǎng)頁。11.4 處理超鏈接 當JEdito

6、rPane對象調(diào)用setEditable方法將編輯屬性設(shè)為false時,不僅可以顯示網(wǎng)頁的運行效果,而且用戶假如單擊網(wǎng)頁中超鏈接還可以使得JEditorPane對象觸發(fā)HyperlinkEvent事件。程序可以通過處理HyperlinkEvent事件,來顯示新的URL資源。JEditorPane對象調(diào)用 addHyperlinkListenerHyperlinkListener listener 獲得監(jiān)視器。監(jiān)視器需實現(xiàn)HyperlinkListener接口, 該接口中的方法是:void hyperlinkUpdateHyperlinkEvent e 在下面的例子中,當單擊超鏈接時,JEdit

7、orPane對象 將顯示超鏈接所鏈接的網(wǎng)頁。 11.5 InetAdress類 我們已經(jīng)知道Internet上的主機有兩種方式表示地址: 1域名 例如, 2IP 地址 例如,10 包中的InetAddress類對象含有一個Internet主機地址的域名和IP地址: sina /10。 域名容易記憶,當你在連接網(wǎng)絡(luò)時輸入一個主機的域名后,域名效勞器DNS負責將域名轉(zhuǎn)化成IP地址,這樣我們才能和主機建立連接。 1獲取Internet上主機的地址 我們可以使用InetAddress類的靜態(tài)方法: getByNameString

8、 s; 將一個域名或IP地址傳遞給該方法的參數(shù)s,獲得一個 InetAddress對象,該對象含有主機地址的域名和IP地 址,該對象用如下格式表示它包含的信息: sina /0 下面的例子4分別獲取域名是 sina 的主機域名及IP地址,同時獲取了IP地址是的主機域名及IP地址。 當你運行上述程序時應(yīng)保證你已經(jīng)連接到Internet通過撥號或局域網(wǎng)連接到Internet上。上述程序的 運行結(jié)果: sina /0 / 另外,InetAddress類中含有兩

9、個實例方法: public String getHostName 取InetAddress對象所 含的域名。 public String getHostAddress 獲取InetAddress對象所含的IP地址。 2獲取本地機的地址 我們可以使用InetAddress類的靜態(tài)方法: getLocalHost; 獲得一個InetAddress對象,該對象含有本地機的域名和IP地址。 11.6 套接字Socket IP地址標識Internet上的計算機,端口號標識正在計算機上運行的進程程序。端口號與IP地址的組合得出一個網(wǎng)絡(luò)套接字。端口號被規(guī)定為一個16位的整數(shù)065535。其中,01023被預(yù)

10、先定義的效勞通信占用如telnet占用端口23, 占用端口80等。除非我們需要訪問這些特定效勞,否那么,就應(yīng)該使用102465535這些端口中的某一個進展通信,以免發(fā)生端口沖突。 1套接字連接 所謂套接字連接就是客戶端的套接字對象和效勞器端的套接字對象通過輸入、輸出流連接在一起,如今我們分三個步驟來說明套接字連接的根本形式。 1效勞器建立ServerSocket對象 ServerSocket對象負責等待客戶端懇求建立套接字連接,類似郵局某個窗口中的業(yè)務(wù)員。也就是說,效勞器必須事先建立一個等待客戶懇求建立套接字連接的ServerSocket對象。ServerSocket的構(gòu)造方法是: Serve

11、rSocketint port 當建立效勞器套接字時可能發(fā)生IOException異常,因此要象下面那樣建立接收客戶的效勞器套接字。 try ServerSocket waitSocketConnection=new ServerSocket1880; catchIOException e 當效勞器的ServerSocket對象waitSocketConnection建立后,就可以使用方法accept承受客戶的套接字連接懇求,代碼如下所示: waitSocketConnection.accept; 接收客戶的套接字也可能發(fā)生IOException異常,因此要象下面那樣建立承受客戶的套接字。 t

12、ry S o c k e t s o c k e t A t S e r v e r = waitSocketConnection.accept; catchIOException e 所謂“接收客戶的套接字懇求,就是accept方法會返回一個Socket對象:socketAtServer,稱作效勞器端的套接字對象。 Socket socketAtServer = waitSocketConnection.accept; System.out.println“ok catchIOException e2客戶端創(chuàng)立Socke對象??蛻舳顺绦蚩梢允褂肧ocket類創(chuàng)立對象,Socket的構(gòu)方法是:

13、 SocketString host,int port參數(shù)host是效勞器的IP地址,port是一個端口號。 也可以使用Socket類不帶參數(shù)的構(gòu)造方法 public Socket 創(chuàng)立一個套接字對象,該對象不懇求任何連接。該對象再調(diào)用 public void connectSocketAddress endpoint throws IOException 懇求和參數(shù)SocketAddress指定地址的套接字建立連接。為了使用connect方法,可以使用SocketAddress的子類 : I n e t S o c k e t A d d r e s s 創(chuàng) 立 一 個 對 象 ,InetS

14、ocketAddress的構(gòu)造方法是: public InetSocketAddressInetAddress addr, int port 創(chuàng)立Socket對象可能發(fā)生IOException異常,因此要象 下面那樣建立到效勞器的套接字連接 try Socket socketAtClient=new Socket“ 8,1880; catchIOException e 客戶端建立socketAtClient對象的過程就是向效勞器發(fā)出套接字連接懇求,假如效勞器端相應(yīng)的端口上有ServerSocket對象正在使用accept方法等待客戶,那么雙方的套接字對象socketAtC

15、lient和socketAtServer就都誕生了。 3流連接 客戶端和效勞器端的套接字對象誕生以后,還必須進 行輸入、輸出流的連接。 效勞器端的這個Socket對象socketAtServer使用方法 getOutputStream 獲得的輸出流將指向客戶端Socket對象socketAtClient 使用方法 getInputStream 獲得的那個輸入流;同樣,效勞器端的這個Socket對象ocketAtServer使用方法 getInputStream 獲得的輸入流將指向客戶端Socket對象socketAtClient使用方法 getOutputStream 獲得的那個輸出流。因此,

16、當效勞器向這個輸出流寫入信息時,客戶端通過相應(yīng)的輸入流就能讀取,反之亦然。 圖11.3 套接字連接示意圖客戶端Socket輸入流輸出流服 務(wù) 器 端Socket輸出流輸入流 連接 連接 連接建立后,效勞器端的套接字對象調(diào)用getInetAddress方法可以獲取一個InetAddess對象,該對象含有客戶端的IP地址和域名,同樣,客戶端的套接字對象調(diào)用getInetAddress方法可以獲取一個InetAddess對象,該對象含有效勞器端的IP地址和域名。 套接字調(diào)用 close可以關(guān)閉雙方的套接字連接,只要一方關(guān)閉連接,就會導(dǎo)致對方發(fā)生IOException異常。 下面我們通過一個簡單的例子

17、說明上面講的概念。 在例子5中,客戶端向效勞器發(fā)出ASCII表的順序值:1127;效勞器承受這些數(shù)據(jù),并將順序值對應(yīng)的字符 返 回 給 客 戶 。 你 首 先 將 例 子 5 中 效 勞 器 端 的Server.java編譯通過,并運行起來,等待客戶懇求連接。然后運行客戶端程序。11.7 使用多線程處理套接字連接 套接字連接中涉及到輸入流和輸出流操作,客戶或效勞器讀取數(shù)據(jù)可能會引起堵塞,我們應(yīng)把讀取數(shù)據(jù)放在一個單獨的線程中去進展。另外,效勞器端收到一個客戶的套接字后,就應(yīng)該啟動一個專門為該客戶效勞的線程。 我們用學過的組件,設(shè)計一個略微復(fù)雜的套接字連接。 在下面的例子6中,客戶輸入一個一元二次

18、方程的系數(shù)并發(fā)送給效勞器,效勞器把計算出的方程的實根返回 給客戶。因此你可以將計算量大的工作放在效勞器端,客戶負責計算量小的工作,實現(xiàn)客戶-效勞器交互計算,來完成某項任務(wù)。 11.8 UDP數(shù)據(jù)報 基于UDP通信的根本形式是 1將數(shù)據(jù)打包,稱為數(shù)據(jù)包好比將信件裝入信封一樣,然后將數(shù)據(jù)包發(fā)往目的地。 2承受別人發(fā)來的數(shù)據(jù)包好比接收信封一樣,然后查看數(shù)據(jù)包中的內(nèi)容。 1發(fā)送數(shù)據(jù) 1創(chuàng)立DatagramPacket對象 首先用DatagramPacket類將數(shù)據(jù)打包,即用DatagramPacket類創(chuàng)立一個對象,稱為數(shù)據(jù)包。 用DatagramPacket的以下兩個構(gòu)造方法創(chuàng)立待發(fā)送的數(shù)據(jù)包: D

19、atagramPacketbyte data ,int length,InetAddtress address,int port DatagramPackbyte data ,int offset,int length,InetAddtress address,int port 使用構(gòu)造方法創(chuàng)立的數(shù)據(jù)包對象具有以下兩個性質(zhì): 含有data數(shù)組指定的數(shù)據(jù)。 該數(shù)據(jù)包將發(fā)送到地址是address、端口號是port的主機上。 我們稱address是它的目的地址、port是這個數(shù)據(jù)包的目的端口號。其中,第2個構(gòu)造方法創(chuàng)立的數(shù)據(jù)包對象含有數(shù)組data從offset開場指定長度的數(shù)據(jù)。 例如: byte

20、data =近來好嗎.getByte; InetAddtress address=InetAddtress.getName sian ; DatagramPacket data_pack=new DatagramPacketdata,data.length, address,980; 2發(fā)送數(shù)據(jù) 然后用 DatagramSocket類的不帶參數(shù)的構(gòu)造方法:DatagramSocket創(chuàng)立一個對象,該對象負責發(fā)送數(shù)據(jù)包。例如, D a t a g r a m S o c k e t m a i l _ o u t = n e w DatagramSocket; mail_out.senddata

21、_pack; 2接收數(shù)據(jù) DatagramSocket類另一個構(gòu)造方法: DatagramSocketint port 創(chuàng)立一個對象,其中的參數(shù)必須和待接收的數(shù)據(jù)包的端口號一樣。例如,假如發(fā)送方發(fā)送的數(shù)據(jù)包的端口號是5666: DatagramSocket mail_in=new DatagramSocket5666; 該對象mail_in使用方法 receiveDatagramPacket pack 承受數(shù)據(jù)包。該方法有一個數(shù)據(jù)包參數(shù)pack,方法receive把收到的數(shù)據(jù)包傳遞給該參數(shù)。因此我們必須預(yù)備一個數(shù)據(jù)包以便收取數(shù)據(jù)包。這時需使用 DatagramPack類的另外一個構(gòu)造方法:Da

22、tagramPackbyte data ,int length創(chuàng)立一個數(shù)據(jù)包,用于接收數(shù)據(jù)包,例如: byte data=new byte100;int length=90; DatagramPacket pack=new DatagramPacketdata,length; mail_in.receivepack; 該數(shù)據(jù)包pack將接收長度是length的數(shù)據(jù)放入data。 在下面的例子7中兩個主機可用本地機模擬互相發(fā)送和接收數(shù)據(jù)包。 11.9 播送數(shù)據(jù)包 播送數(shù)據(jù)包類似于電臺播送,進展播送的電臺需在指定的波段和頻率上播送信息,接收者只有將收音機調(diào)到指定的波段、頻率上才能收聽到播送的內(nèi)容。

23、 播送數(shù)據(jù)包涉及到地址和端口。我們知道,Internet的地址是a.b.c.d的形式。該地址的一部分代表用戶自己主機,而另一部分代表用戶所在的網(wǎng)絡(luò)。當a小于128,那么b.c.d就用來表示主機,這類地址稱做A類地址。假如a大于等于128并且小于192,那么a.b表示網(wǎng)絡(luò)地址,而c.d表示主機地址,這類地址稱做B類地址。假如a大于等于192,那么網(wǎng)絡(luò)地址是a.b.c,d表示主機地址,這類地址稱做C類地址。 與55之間的地址稱做D類地址,D類地址并不代表某個特定主機的位置,一個具有A、B或C類地址的主機要播送數(shù)據(jù)或接收播送,都必須參加到同一個D類地址。一個D類地址也稱做一個組播地址,參加到同一個組播地址的主機可以在某個端口上播送信息,也可以在某個端口號上接收信息。 準備播送或接收的主機需經(jīng)過以下步驟: 11.設(shè)置組播地址 使用InetAddress類創(chuàng)立組播組地址,例如: InetAddress group=InetAddress.getByName; 2

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論