《第11章Java中的網(wǎng)絡(luò)編程》由會員分享,可在線閱讀,更多相關(guān)《第11章Java中的網(wǎng)絡(luò)編程(37頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單擊此處編輯母版標題樣式,*,*,*,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,第,11,章,Java,中的網(wǎng)絡(luò)編程,1.URL,類,2.,讀取,URL,中的資源,3.,顯示,URL,資源中的,HTML,文件,4.,處理超鏈接,5.InetAddress,類,6.,套接字,Socket,7.,使用多線程處理套接字連接,8.UDP,數(shù)據(jù)報,9.,廣播數(shù)據(jù)包,11.1 URL類,包中的,URL,類是對統(tǒng)一資源定位符,(Uniform Resource Locator),的抽象,使用,URL,創(chuàng)建對象的應(yīng)用程序稱作客戶端程序,一個,URL,對象存放著一個具體的資源的引用,表明客戶要訪
2、問這個,URL,中的資源,利用,URL,對象可以獲取,URL,中的資源。一個,URL,對象通常包含最基本的三部分信息:協(xié)議、地址、資源。協(xié)議必須是,URL,對象所在的,Java,虛擬機支持的協(xié)議,許多協(xié)議并不為所常用,而常用的,Http,、,Ftp,、,file,協(xié)議都是虛擬機支持的協(xié)議;地址必須是能連接的有效,IP,地址或域名;資源可以是主機上的任何一個文件。,1,URL,的構(gòu)造方法,public URL(String spec) throws Malformed,URLException,該構(gòu)造方法使用字符串初始化一個,URL,對象,例如,try,url,=new,URL(,);,catc
3、h(MalformedURLExceptione,),System.out.println(BadURL:+url,);,該,URL,對象使用的協(xié)議是“,Http”,協(xié)議,即用戶按著這種協(xié)議和指定的服務(wù)器通信,該,URL,對象包含的地址是“,”,,,所包含的資源是默認的資源,(,主頁,),。,public URL(String protocol,String host,String file)throws Malformed,URLException,該構(gòu)造方法構(gòu)造的,URL,對象的協(xié)議、地址和資源分別由參數(shù),protocol,、,host,和,file,指定。,11.2,讀取,URL,中的資
4、源,URL,對象調(diào)用,InputStream,openStream,(),方法可以返回一個輸入流,該輸入流指向,URL,對象所包含的資源。通過該輸入流可以將服務(wù)器上的資源信息讀入到客戶端。,例,11-1,在一個文本框中輸入網(wǎng)址,然后點擊確定按鈕讀取服務(wù)器上的資源,由于網(wǎng)絡(luò)速度或其它的因素,,URL,資源的讀取可能會引起堵塞,因此,程序需在一個線程中讀取,URL,資源,以免堵塞主線程。,11.3,顯示,URL,資源中的,html,文件,可以將,http:/,的主頁的內(nèi)容顯示在文本區(qū)中,但是,想看到網(wǎng)頁的運行效果。,Javax.swing,包中的,JEditorPane,類可以解釋執(zhí)行,html,
5、文件,也就是說,如果把,html,文件讀入到,JEditorPane,,該,html,文件就會被解釋執(zhí)行,,顯示在,JEditorPane,中,這樣程序就看到了網(wǎng)頁,的運行效果。,可以使用,JEditorPane,類的構(gòu)造方法,public,JEditorPane,(),public,JEditorPane(URL,initialPage)throws,IOException,public,JEditorPane(String,url,) throws,IOException,構(gòu)造,JEditorPane,對象,后兩個構(gòu)造方法使用參數(shù),initialPage,或,url,指定該對象最初顯示的,
6、URL,中的資源。,JEditorPane,對象調(diào)用,public void,setPage(URLpage,) throws,IOException,法可以顯示新的,URL,中的資源。,例,11-2,中,用,JEditorPane,對象顯示網(wǎng)頁。,11.4,處理超鏈接,當(dāng),JEditorPane,對象調(diào)用,setEditable,方法將編輯屬性設(shè)為,false,時,不僅可以顯示網(wǎng)頁的運行效果,而且用戶如果單擊網(wǎng)頁中超鏈接還可以使得,JEditorPane,對象觸發(fā),HyperlinkEvent,事件。程序可以通過處理,HyperlinkEvent,事件,來顯示新的,URL,資源。,JEdit
7、orPane,對象調(diào)用,addHyperlinkListener(HyperlinkListenerlistener,),獲得監(jiān)視器。監(jiān)視器需實現(xiàn),HyperlinkListener,接口,該接口中的方法是:,voidhyperlinkUpdate(HyperlinkEvente,),在,例,11-3,中,當(dāng)單擊超鏈接時,,JEditorPane,對象將顯示超鏈接所鏈接的網(wǎng)頁。,11.5,InetAdress,類,Internet,上的主機有兩種方式表示地址:,(1),域名例如,,(2)IP,地址例如,,202.108.35.210,包中的,InetAddress,類對象含有一個,Intern
8、et,主機地址的域名和,IP,地址:, 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ù)包:,DatagramPacket(bytedata,intlength,InetAd
9、dtressaddress,intport)DatagramPack(bytedata,intoffset,intlength,InetAddtressaddress,intport,),使用構(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ù)。,例如:,bytedata,=,近來好嗎,.,getByte();InetAddt
10、ressaddress,=,InetAddtress.getName();DatagramPacketdata_pack,=newDatagramPacket(data,data.length,address,980);,2),發(fā)送數(shù)據(jù),用,DatagramSocket,類的不帶參數(shù)的構(gòu)造方法:,DatagramSocket,(),創(chuàng)建一個對象,該對象負責(zé)發(fā)送數(shù)據(jù)包。例如,,DatagramSocketmail_out,=,newDatagramSocket,();,mail_out.send(data_pack);,2,接收數(shù)據(jù),DatagramSocket,類另一個構(gòu)造方法:,Datagr
11、amSocket(intport,),創(chuàng)建一個對象,其中的參數(shù)必須和待接收的數(shù)據(jù)包的端口號相同。例如,如果發(fā)送方發(fā)送的數(shù)據(jù)包的端口號是,5666,:,DatagramSocketmail_in,=newDatagramSocket(5666);,該對象,mail_in,使用方法,receive(DatagramPacketpack,接受數(shù)據(jù)包。該方法有一個數(shù)據(jù)包參數(shù),pack,,,方法,receive,把收到的數(shù)據(jù)包傳遞給該參數(shù)。因,此必須預(yù)備一個數(shù)據(jù)包以便收取數(shù)據(jù)包。這時需使用,DatagramPack,類的另外一個構(gòu)造方法:,DatagramPack(byte,data,intlength
12、,),創(chuàng)建一個數(shù)據(jù)包,用于接收數(shù)據(jù)包,例如:,bytedata,=newbyte100;intlength=90;,DatagramPacketpack,=new,DatagramPacket(data,length,);,mail_in.receive(pack);,該數(shù)據(jù)包,pack,將接收長度是,length,的數(shù)據(jù)放入,data,。,在,例,11-7,中兩個主機,(,可用本地機模擬,),互相發(fā)送和接收數(shù)據(jù)包。,11.9,廣播數(shù)據(jù)包,廣播數(shù)據(jù)包類似于電臺廣播,進行廣播的電臺需在指定的波段和頻率上廣播信息,接收者只有將收音機調(diào)到指定的波段、頻率上才能收聽到廣播的內(nèi)容。廣播數(shù)據(jù)包涉及到地址和
13、端口。,Internet,的地址是,a.b.c.d,的形式。該地址的一部分代表用戶自己主機,而另一部分代表用戶所在的網(wǎng)絡(luò)。當(dāng),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,類地址。,224.0.0.0,與,239.255.255.255,之間的地址稱做,D,類地址,,D,類地址并不代表某個特定主機的位置,一,個具有,A,、,B,或,C,類地址
14、的主機要廣播數(shù)據(jù)或接收廣播,都必須加入到同一個,D,類地址。一個,D,類地址也稱做一個組播地址,加入到同一個組播地址的主機可以在某個端口上廣播信息,也可以在某個端口號上接收信息。準備廣播或接收的主機需經(jīng)過下列步驟:,1.,設(shè)置組播地址,使用,InetAddress,類創(chuàng)建組播組地址,如,InetAddressgroup,=InetAddress.getByName(239.255.8.0);,2,創(chuàng)建多點廣播套接字,使用,MulticastSocket,類創(chuàng)建一個,多點廣播套接字對象。,MulticastSocket,的構(gòu)造方法:,publicMulticastSocket(intport)t
15、hrowsIOException,創(chuàng)建的多點廣播套接字可以在參數(shù)指定的端口上廣播。,3,設(shè)置廣播的范圍,準備廣播的主機必須讓多點廣播套接字,(,MulticastSocket,),對象,調(diào)用,publicvoidsetTimeToLive(intttl)throwsIOException,4,加入組播組,準備廣播或接收的主機必須讓多點廣播套接字,(,MulticastSocket,),對象,調(diào)用,publicvoidjoinGroup(InetAddressmcastaddr)throwsIOException,方法加入組播組。多點廣播套接字,(,MulticastSocket,),對象,調(diào)用
16、,publicvoidleaveGroup(InetAddressmcastaddr)throwsIOException,方法可以離開已經(jīng)加入的組播組。,5,廣播數(shù)據(jù)和接收數(shù)據(jù),進行廣播的主機可以讓多點廣播套接字,(,MulticastSocket,),對象,調(diào)用,publicvoidsend(DatagramPacketp)throwsIOException,將參數(shù),p,指定的數(shù)據(jù)包廣播到組播組中的其它主機。接收廣播的主機可以讓多點廣播套接字,(,MulticastSocket,),對象,調(diào)用,publicvoidreceive(DatagramPacketp)throwsIOException,在例子中,一個主機不斷地重復(fù)廣播奧運會新聞,加入到同一組的主機都可以隨時接收廣播的信息。接收者將正在接收的信息放入一個文本區(qū),把已接收到的全部信息放入另一個文本區(qū)。,(1),廣播數(shù)據(jù)包的主機,(2),接收數(shù)據(jù)包的主機,