




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第11章Java網(wǎng)絡(luò)的基本知識(shí)
11.1
使用URL11.2
讀取URL中的資源11.3
顯示URL資源中的html文件11.4
處理超鏈接11.5
InetAdress類11.6
套接字11.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸11.8
UDP數(shù)據(jù)報(bào)11.9
廣播數(shù)據(jù)報(bào)
1第11章Java網(wǎng)絡(luò)的基本知識(shí)
11.1 使用URL111.1使用URL
URL類是對(duì)統(tǒng)一資源定位符(UniformResourceLocator)的抽象,使用URL創(chuàng)建對(duì)象的應(yīng)用程序稱作客戶端程序,一個(gè)URL對(duì)象存放著一個(gè)具體的資源的引用,表明客戶要訪問這個(gè)URL中的資源,利用URL對(duì)象可以獲取URL中的資源。URL對(duì)象通常包含最基本的三部分信息:協(xié)議、地址、資源。211.1使用URL
URL類是對(duì)統(tǒng)一資源定位符(UnifoURL的構(gòu)造方法publicURL(Stringspec)throwsMalformedURLExceptiontry{url=newURL("");}catch(MalformedURLExceptione){System.out.println("BadURL:"+url);}3URL的構(gòu)造方法publicURL(StringspecURL的構(gòu)造方法publicURL(Stringprotocol,Stringhost,Stringfile)throwsMalformedURLException4URL的構(gòu)造方法publicURL(Stringprot客戶與服務(wù)器Web的客戶/服務(wù)器體系結(jié)構(gòu)的含義就是:客戶需要某些類型的信息,而服務(wù)器提供客戶所需要的信息。客戶需要連接到服務(wù)器上,并向服務(wù)器請(qǐng)求信息而服務(wù)器則向客戶發(fā)送信息,兩者協(xié)同工作,各得其所。5客戶與服務(wù)器Web的客戶/服務(wù)器體系結(jié)構(gòu)的含義就是:客戶需要11.2讀取URL中的資源
URL對(duì)象調(diào)用InputStreamopenStream()方法可以返回一個(gè)輸入流,該輸入流指向URL對(duì)象所包含的資源。通過該輸入流可以將服務(wù)器上的資源信息讀入到客戶端。611.2讀取URL中的資源
URL對(duì)象調(diào)用InputStr11.3顯示URL資源中的html文件
Javax.swing包中的JEditorPane容器可以解釋執(zhí)行html文件,也就是說,如果你把html文件讀入到JEditorPane,該html文件就會(huì)被解釋執(zhí)行,顯示在JEditorPane容器中,這樣程序就看到了網(wǎng)頁(yè)的運(yùn)行效果。711.3顯示URL資源中的html文件
Javax.swi11.3顯示URL資源中的html文件
JEditorPane類的構(gòu)造方法:
publicJEditorPane()
publicJEditorPane(URLinitialpage)throwsIOExceptionpublicJEditorPane(Stringurl)throwsIOExceptionJEditorPane的對(duì)象調(diào)用
publicvoidsetPage(URLpage)throwsIOException
方法可以顯示新的URL中的資源。811.3顯示URL資源中的html文件
JEditorPa11.4處理超鏈接
當(dāng)JEditorPane對(duì)象調(diào)用setEditable方法將編輯屬性設(shè)為false時(shí),不僅可以顯示網(wǎng)頁(yè)的運(yùn)行效果,而且用戶如果單擊網(wǎng)頁(yè)中超鏈接還可以使得JEditorPane對(duì)象觸發(fā)HyperlinkEvent事件。程序可以通過處理HyperlinkEvent事件,來顯示新的URL資源。JEditorPane對(duì)象調(diào)用addHyperlinkListener(HyperlinkEventlistener)方法獲得監(jiān)視器。監(jiān)視器實(shí)現(xiàn)HyperlinkListener接口,該接口中的方法如下:
voidhyperlinkUpdate(HyperlinkEvente)911.4處理超鏈接
當(dāng)JEditorPane對(duì)象調(diào)用set11.5InetAdress類
包中的InetAddress類對(duì)象含有一個(gè)Internet主機(jī)地址的域名和IP地址:
/10。域名容易記憶,當(dāng)你在連接網(wǎng)絡(luò)時(shí)輸入一個(gè)主機(jī)的域名后,域名服務(wù)器(DNS)負(fù)責(zé)將域名轉(zhuǎn)化成IP地址,這樣我們才能和主機(jī)建立連接。1011.5InetAdress類
包中的In1.獲取Internet上主機(jī)的地址可以使用InetAddress類的靜態(tài)方法
getByName(Strings);將一個(gè)域名或IP地址傳遞給該方法的參數(shù)s,獲得一個(gè)InetAddress對(duì)象,該對(duì)象含有主機(jī)地址的域名和IP地址,該對(duì)象用如下格式表示它包含的信息:/0111.獲取Internet上主機(jī)的地址可以使用InetAdd1.獲取Internet上主機(jī)的地址InetAddress類含有兩個(gè)實(shí)例方法
publicStringgetHostName()
獲取InetAddress對(duì)象所含的域名
publicStringgetHostAddress()獲取InetAddress對(duì)象所含的IP地址121.獲取Internet上主機(jī)的地址InetAddress2.獲取本地機(jī)的地址可以使用InetAddress類的靜態(tài)方法
getLocalHost();獲得一個(gè)InetAddress對(duì)象,該對(duì)象含有本地機(jī)的域名和IP地址。132.獲取本地機(jī)的地址可以使用InetAddress類的靜態(tài)11.6套接字
IP地址標(biāo)識(shí)Internet上的計(jì)算機(jī),端口號(hào)標(biāo)識(shí)正在計(jì)算機(jī)上運(yùn)行的進(jìn)程(程序)。端口號(hào)與IP地址的組合得出一個(gè)網(wǎng)絡(luò)套接字。端口號(hào)被規(guī)定為一個(gè)16位的整數(shù)0~65535。其中,0~1023被預(yù)先定義的服務(wù)通信占用,如telnet占用端口23,http占用端口80等。除非我們需要訪問這些特定服務(wù),否則,就應(yīng)該使用1024~65535這些端口中的某一個(gè)進(jìn)行通信,以免發(fā)生端口沖突。當(dāng)兩個(gè)程序需要通信時(shí),它們可以通過使用Socket類建立套接字連接。1411.6套接字
IP地址標(biāo)識(shí)Internet上的計(jì)算機(jī),端客戶端的套接字對(duì)象
客戶端的程序利用Socket類建立到服務(wù)器的套接字連接。Socket的構(gòu)造方法如下:Socket(Stringhost,intport)try{Socketmysocket=newSocket(“8”,1880);}catch(IOExceptione){}15客戶端的套接字對(duì)象客戶端的程序利用Socket類建立到服務(wù)獲取輸入輸出流套接字連接mysocket建立后,mysocket可以使用方法getInputStream()獲得一個(gè)輸入流,然后用這個(gè)輸入流讀取服務(wù)器放入“線路”的信息。mysocket還可以使用方法getOutputStream()獲得一個(gè)輸出流,然后用這個(gè)輸出流將信息寫入“線路”。16獲取輸入輸出流套接字連接mysocket建立后,mysoc服務(wù)器端的套接字對(duì)象服務(wù)器必須建立一個(gè)等待接收客戶的套接字的ServerSocket對(duì)象。ServerSocket的構(gòu)造方法是:ServerSocket(intport)port是一個(gè)端口號(hào)。port必須和客戶呼叫的端口號(hào)相同。例如:
try{ServerSocketserver_socket=newServerSocket(1880);}catch(IOExceptione){}當(dāng)服務(wù)器的ServerSocket對(duì)象server_socket建立后,就可以使用方法accept()接收客戶的套接字連接呼叫。17服務(wù)器端的套接字對(duì)象服務(wù)器必須建立一個(gè)等待接收客戶的套接字的服務(wù)器端的套接字對(duì)象所謂“接收”客戶的套接字連接就是accept()會(huì)返回一個(gè)和客戶端Socket對(duì)象相連接的駐留在服務(wù)器端的Socket對(duì)象,服務(wù)器端的這個(gè)Socket對(duì)象sc使用方法getOutputStream()獲得的輸出流將指向客戶端Socket對(duì)象mysocket使用方法getInputStream()獲得的那個(gè)輸入流;同樣,服務(wù)器端的這個(gè)Socket對(duì)象sc使用方法getInputStream()獲得的輸入流將指向客戶端Socket對(duì)象mysocket使用方法getOutputStream()獲得的那個(gè)輸出流。注意:accept()方法會(huì)堵塞線程的繼續(xù)執(zhí)行,直到接收到客戶的呼叫。18服務(wù)器端的套接字對(duì)象所謂“接收”客戶的套接字連接就是acce套接字連接示意圖19套接字連接示意圖19服務(wù)器端的套接字對(duì)象連接建立后,服務(wù)器端的套接字對(duì)象調(diào)用getInetAddress()方法可以獲取一個(gè)InetAddress對(duì)象,該對(duì)象含有客戶端的IP地址和域名。同樣,客戶端的套接字對(duì)象調(diào)用getInetAddress()方法可以獲取一個(gè)InetAddress對(duì)象,該對(duì)象含有服務(wù)器端的IP地址和域名。雙方通信完畢后,應(yīng)使用close()方法關(guān)閉套接字連接。注意:ServerSocket對(duì)象可以調(diào)用setSoTimeout(inttimeout)方法設(shè)置超時(shí)值,當(dāng)對(duì)象調(diào)用accept()方法堵塞的時(shí)間一旦超過timeout時(shí),將觸發(fā)SocketTimeoutException。20服務(wù)器端的套接字對(duì)象連接建立后,服務(wù)器端的套接字對(duì)象調(diào)用ge把套接字連接放在一個(gè)線程中套接字連接中涉及到輸入流和輸出流操作,為了不影響我們做其它的事情,我們應(yīng)把套接字連接放在一個(gè)單獨(dú)的線程中去進(jìn)行。另外,服務(wù)器端收到一個(gè)客戶的套接字后,就應(yīng)該啟動(dòng)一個(gè)專門為該客戶服務(wù)的線程。21把套接字連接放在一個(gè)線程中套接字連接中涉及到輸入流和輸出流11.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸
當(dāng)使用套接字進(jìn)行網(wǎng)絡(luò)通信時(shí),可以使用ZipOutputStream流進(jìn)行數(shù)據(jù)壓縮,將套接字返回的輸出流作為ZipOutputStream流的底層流,然后ZipOutputStream流out將數(shù)據(jù)壓縮到底層流發(fā)送到目的地。使用ZipOutputStream類可以將若干個(gè)文件壓縮到底層流發(fā)送到目的地。首先使用ZipOutputStream類的構(gòu)造方法publicZipOutputStream(OutputStreamout)創(chuàng)建一個(gè)對(duì)象,該對(duì)象以套接字返回的輸出流作為目的地,即作為該流的底層流。例如:2211.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸當(dāng)使用套接字進(jìn)行網(wǎng)絡(luò)通信時(shí)11.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸
ZipOutputStreamout=newZipOutputStream(socket.getOutputStream());再讓out調(diào)用:publicvoidputNextEntry(ZipEntrye)方法確定向底層流寫入下一個(gè)文件的位置,例如:out.putNextEntry(newZipEntry(“A.txt”));然后out對(duì)象調(diào)用write方法將文件A.txt壓縮后寫入到底層流中。2311.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸ZipOutputStre11.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸
數(shù)據(jù)接收方對(duì)應(yīng)地使用ZipInputStream類創(chuàng)建對(duì)象,該對(duì)象以套接字獲取的輸入流作為源,即作為該流的底層流,例如:ZipIutputStreamout=newZipIutputStream(socket.getIutputStream());然后讓in找到發(fā)送方寫入到底層流中下一個(gè)文件,例如:ZipEntryzipEntry=in.getNextEntry();那么,in調(diào)用read方法可以讀?。ń鈮海┱业降脑撐募?。2411.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸數(shù)據(jù)接收方對(duì)應(yīng)地使用Zip11.8UDP數(shù)據(jù)報(bào)
基于UDP的通信和基于TCP的通信不同,基于UDP的信息傳遞更快,但不提供可靠性保證。也就是說,數(shù)據(jù)在傳輸時(shí),用戶無法知道數(shù)據(jù)能否正確到達(dá)目的地主機(jī),也不能確定數(shù)據(jù)到達(dá)目的地的順序是否和發(fā)送的順序相同?;赨DP通信的基本模式是:(1)將數(shù)據(jù)打包,稱為數(shù)據(jù)包(好比將信件裝入信封一樣),然后將數(shù)據(jù)包發(fā)往目的地。(2)接受別人發(fā)來的數(shù)據(jù)包(好比接收信封一樣),然后查看數(shù)據(jù)包中的內(nèi)容。2511.8UDP數(shù)據(jù)報(bào)
基于UDP的通信和基于TCP的1.發(fā)送數(shù)據(jù)包
(1)首先用DatagramPacket類將數(shù)據(jù)打包。用DatagramPacket的構(gòu)造方法創(chuàng)建待發(fā)送的數(shù)據(jù)包:
DatagramPacket(bytedata[],intlength,InetAddtressaddress,intport):使用該構(gòu)造方法創(chuàng)建的數(shù)據(jù)包對(duì)象具有下列兩個(gè)性質(zhì):含有data數(shù)組指定的數(shù)據(jù)。該數(shù)據(jù)包將發(fā)送到地址是address,端口號(hào)是port的主機(jī)上。261.發(fā)送數(shù)據(jù)包(1)首先用DatagramPacket類1.發(fā)送數(shù)據(jù)包
例如:bytedata[]=“近來好嗎?”.getByte();InetAddressaddress=InetAddress.getName();DatagramPacketdata_pack=newDatagramPacket(data,data.length,address,980);DatagramPacket(bytedata[],intoffset,intlength,InetAddtressaddress,intport):使用該構(gòu)造方法創(chuàng)建的數(shù)據(jù)包對(duì)象含有數(shù)組data從offset開始指定長(zhǎng)度的數(shù)據(jù),該數(shù)據(jù)包將發(fā)送到地址是address,端口號(hào)是port的主機(jī)上。271.發(fā)送數(shù)據(jù)包例如:271.發(fā)送數(shù)據(jù)包
(2)然后用DatagramSocket類的不帶參數(shù)的構(gòu)造方法DatagramSocket()創(chuàng)建一個(gè)對(duì)象,該對(duì)象負(fù)責(zé)發(fā)送數(shù)據(jù)包。例如:
DatagramSocketmail_out=newDatagramSocket();mail_out.send(data_pack);281.發(fā)送數(shù)據(jù)包(2)然后用DatagramSocket類2.接收數(shù)據(jù)包用DatagramSocket類另一個(gè)構(gòu)造方法:DatagramSocket(intport)創(chuàng)建一個(gè)對(duì)象,其中的參數(shù)必須和待接收的數(shù)據(jù)包的端口號(hào)相同。DatagramSocket對(duì)象使用方法receive(DatagramPacketpack)接收數(shù)據(jù)包。該方法有一個(gè)數(shù)據(jù)包參數(shù)pack,方法receive把收到的數(shù)據(jù)包傳遞給該參數(shù)。因此必須預(yù)備一個(gè)數(shù)據(jù)包以便收取數(shù)據(jù)包。這時(shí)需使用DatagramPacket類的另外一個(gè)構(gòu)造方法
DatagramPacket(bytedata[],intlength)創(chuàng)建一個(gè)數(shù)據(jù)包,用于接收數(shù)據(jù)包,例如:292.接收數(shù)據(jù)包用DatagramSocket類另一個(gè)構(gòu)造方2.接收數(shù)據(jù)包bytedata[]=newbyte[100];intlength=90;
DatagramPacketpack=newDatagramPacket(data,length);mail_in.receive(pack);該數(shù)據(jù)包pack將接收長(zhǎng)度是length的數(shù)據(jù)放入data。302.接收數(shù)據(jù)包bytedata[]=newbyte[111.9廣播數(shù)據(jù)報(bào)
廣播數(shù)據(jù)報(bào)涉及到地址和端口。Internet的地址是a.b.c.d的形式。當(dāng)a小于128,那么b.c.d就用來表示主機(jī),這類地址稱做A類地址。如果a大于等于128并且小于192,則a.b表示網(wǎng)絡(luò)地址,而c.d表示主機(jī)地址,這類地址稱做B類地址。如果a大于等于192,則網(wǎng)絡(luò)地址是a.b.c,d表示主機(jī)地址,這類地址稱做C類地址。~55是保留地址,稱做D類地址。要廣播或接收廣播的主機(jī)都必須加入到同一個(gè)D類地址。一個(gè)D類地址也稱做一個(gè)組播地址,D類地址并不代表某個(gè)特定主機(jī)的位置,一個(gè)具有A、B或C類地址的主機(jī)要廣播數(shù)據(jù)或接收廣播,都必須加入到同一個(gè)D類地址。加入到同一個(gè)組播地址的主機(jī)可以在某個(gè)端口上廣播信息,也可以在某個(gè)端口號(hào)上接收信息。3111.9廣播數(shù)據(jù)報(bào)
廣播數(shù)據(jù)報(bào)涉及到地址和端口。Inter第11章Java網(wǎng)絡(luò)的基本知識(shí)
11.1
使用URL11.2
讀取URL中的資源11.3
顯示URL資源中的html文件11.4
處理超鏈接11.5
InetAdress類11.6
套接字11.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸11.8
UDP數(shù)據(jù)報(bào)11.9
廣播數(shù)據(jù)報(bào)
32第11章Java網(wǎng)絡(luò)的基本知識(shí)
11.1 使用URL111.1使用URL
URL類是對(duì)統(tǒng)一資源定位符(UniformResourceLocator)的抽象,使用URL創(chuàng)建對(duì)象的應(yīng)用程序稱作客戶端程序,一個(gè)URL對(duì)象存放著一個(gè)具體的資源的引用,表明客戶要訪問這個(gè)URL中的資源,利用URL對(duì)象可以獲取URL中的資源。URL對(duì)象通常包含最基本的三部分信息:協(xié)議、地址、資源。3311.1使用URL
URL類是對(duì)統(tǒng)一資源定位符(UnifoURL的構(gòu)造方法publicURL(Stringspec)throwsMalformedURLExceptiontry{url=newURL("");}catch(MalformedURLExceptione){System.out.println("BadURL:"+url);}34URL的構(gòu)造方法publicURL(StringspecURL的構(gòu)造方法publicURL(Stringprotocol,Stringhost,Stringfile)throwsMalformedURLException35URL的構(gòu)造方法publicURL(Stringprot客戶與服務(wù)器Web的客戶/服務(wù)器體系結(jié)構(gòu)的含義就是:客戶需要某些類型的信息,而服務(wù)器提供客戶所需要的信息??蛻粜枰B接到服務(wù)器上,并向服務(wù)器請(qǐng)求信息而服務(wù)器則向客戶發(fā)送信息,兩者協(xié)同工作,各得其所。36客戶與服務(wù)器Web的客戶/服務(wù)器體系結(jié)構(gòu)的含義就是:客戶需要11.2讀取URL中的資源
URL對(duì)象調(diào)用InputStreamopenStream()方法可以返回一個(gè)輸入流,該輸入流指向URL對(duì)象所包含的資源。通過該輸入流可以將服務(wù)器上的資源信息讀入到客戶端。3711.2讀取URL中的資源
URL對(duì)象調(diào)用InputStr11.3顯示URL資源中的html文件
Javax.swing包中的JEditorPane容器可以解釋執(zhí)行html文件,也就是說,如果你把html文件讀入到JEditorPane,該html文件就會(huì)被解釋執(zhí)行,顯示在JEditorPane容器中,這樣程序就看到了網(wǎng)頁(yè)的運(yùn)行效果。3811.3顯示URL資源中的html文件
Javax.swi11.3顯示URL資源中的html文件
JEditorPane類的構(gòu)造方法:
publicJEditorPane()
publicJEditorPane(URLinitialpage)throwsIOExceptionpublicJEditorPane(Stringurl)throwsIOExceptionJEditorPane的對(duì)象調(diào)用
publicvoidsetPage(URLpage)throwsIOException
方法可以顯示新的URL中的資源。3911.3顯示URL資源中的html文件
JEditorPa11.4處理超鏈接
當(dāng)JEditorPane對(duì)象調(diào)用setEditable方法將編輯屬性設(shè)為false時(shí),不僅可以顯示網(wǎng)頁(yè)的運(yùn)行效果,而且用戶如果單擊網(wǎng)頁(yè)中超鏈接還可以使得JEditorPane對(duì)象觸發(fā)HyperlinkEvent事件。程序可以通過處理HyperlinkEvent事件,來顯示新的URL資源。JEditorPane對(duì)象調(diào)用addHyperlinkListener(HyperlinkEventlistener)方法獲得監(jiān)視器。監(jiān)視器實(shí)現(xiàn)HyperlinkListener接口,該接口中的方法如下:
voidhyperlinkUpdate(HyperlinkEvente)4011.4處理超鏈接
當(dāng)JEditorPane對(duì)象調(diào)用set11.5InetAdress類
包中的InetAddress類對(duì)象含有一個(gè)Internet主機(jī)地址的域名和IP地址:
/10。域名容易記憶,當(dāng)你在連接網(wǎng)絡(luò)時(shí)輸入一個(gè)主機(jī)的域名后,域名服務(wù)器(DNS)負(fù)責(zé)將域名轉(zhuǎn)化成IP地址,這樣我們才能和主機(jī)建立連接。4111.5InetAdress類
包中的In1.獲取Internet上主機(jī)的地址可以使用InetAddress類的靜態(tài)方法
getByName(Strings);將一個(gè)域名或IP地址傳遞給該方法的參數(shù)s,獲得一個(gè)InetAddress對(duì)象,該對(duì)象含有主機(jī)地址的域名和IP地址,該對(duì)象用如下格式表示它包含的信息:/0421.獲取Internet上主機(jī)的地址可以使用InetAdd1.獲取Internet上主機(jī)的地址InetAddress類含有兩個(gè)實(shí)例方法
publicStringgetHostName()
獲取InetAddress對(duì)象所含的域名
publicStringgetHostAddress()獲取InetAddress對(duì)象所含的IP地址431.獲取Internet上主機(jī)的地址InetAddress2.獲取本地機(jī)的地址可以使用InetAddress類的靜態(tài)方法
getLocalHost();獲得一個(gè)InetAddress對(duì)象,該對(duì)象含有本地機(jī)的域名和IP地址。442.獲取本地機(jī)的地址可以使用InetAddress類的靜態(tài)11.6套接字
IP地址標(biāo)識(shí)Internet上的計(jì)算機(jī),端口號(hào)標(biāo)識(shí)正在計(jì)算機(jī)上運(yùn)行的進(jìn)程(程序)。端口號(hào)與IP地址的組合得出一個(gè)網(wǎng)絡(luò)套接字。端口號(hào)被規(guī)定為一個(gè)16位的整數(shù)0~65535。其中,0~1023被預(yù)先定義的服務(wù)通信占用,如telnet占用端口23,http占用端口80等。除非我們需要訪問這些特定服務(wù),否則,就應(yīng)該使用1024~65535這些端口中的某一個(gè)進(jìn)行通信,以免發(fā)生端口沖突。當(dāng)兩個(gè)程序需要通信時(shí),它們可以通過使用Socket類建立套接字連接。4511.6套接字
IP地址標(biāo)識(shí)Internet上的計(jì)算機(jī),端客戶端的套接字對(duì)象
客戶端的程序利用Socket類建立到服務(wù)器的套接字連接。Socket的構(gòu)造方法如下:Socket(Stringhost,intport)try{Socketmysocket=newSocket(“8”,1880);}catch(IOExceptione){}46客戶端的套接字對(duì)象客戶端的程序利用Socket類建立到服務(wù)獲取輸入輸出流套接字連接mysocket建立后,mysocket可以使用方法getInputStream()獲得一個(gè)輸入流,然后用這個(gè)輸入流讀取服務(wù)器放入“線路”的信息。mysocket還可以使用方法getOutputStream()獲得一個(gè)輸出流,然后用這個(gè)輸出流將信息寫入“線路”。47獲取輸入輸出流套接字連接mysocket建立后,mysoc服務(wù)器端的套接字對(duì)象服務(wù)器必須建立一個(gè)等待接收客戶的套接字的ServerSocket對(duì)象。ServerSocket的構(gòu)造方法是:ServerSocket(intport)port是一個(gè)端口號(hào)。port必須和客戶呼叫的端口號(hào)相同。例如:
try{ServerSocketserver_socket=newServerSocket(1880);}catch(IOExceptione){}當(dāng)服務(wù)器的ServerSocket對(duì)象server_socket建立后,就可以使用方法accept()接收客戶的套接字連接呼叫。48服務(wù)器端的套接字對(duì)象服務(wù)器必須建立一個(gè)等待接收客戶的套接字的服務(wù)器端的套接字對(duì)象所謂“接收”客戶的套接字連接就是accept()會(huì)返回一個(gè)和客戶端Socket對(duì)象相連接的駐留在服務(wù)器端的Socket對(duì)象,服務(wù)器端的這個(gè)Socket對(duì)象sc使用方法getOutputStream()獲得的輸出流將指向客戶端Socket對(duì)象mysocket使用方法getInputStream()獲得的那個(gè)輸入流;同樣,服務(wù)器端的這個(gè)Socket對(duì)象sc使用方法getInputStream()獲得的輸入流將指向客戶端Socket對(duì)象mysocket使用方法getOutputStream()獲得的那個(gè)輸出流。注意:accept()方法會(huì)堵塞線程的繼續(xù)執(zhí)行,直到接收到客戶的呼叫。49服務(wù)器端的套接字對(duì)象所謂“接收”客戶的套接字連接就是acce套接字連接示意圖50套接字連接示意圖19服務(wù)器端的套接字對(duì)象連接建立后,服務(wù)器端的套接字對(duì)象調(diào)用getInetAddress()方法可以獲取一個(gè)InetAddress對(duì)象,該對(duì)象含有客戶端的IP地址和域名。同樣,客戶端的套接字對(duì)象調(diào)用getInetAddress()方法可以獲取一個(gè)InetAddress對(duì)象,該對(duì)象含有服務(wù)器端的IP地址和域名。雙方通信完畢后,應(yīng)使用close()方法關(guān)閉套接字連接。注意:ServerSocket對(duì)象可以調(diào)用setSoTimeout(inttimeout)方法設(shè)置超時(shí)值,當(dāng)對(duì)象調(diào)用accept()方法堵塞的時(shí)間一旦超過timeout時(shí),將觸發(fā)SocketTimeoutException。51服務(wù)器端的套接字對(duì)象連接建立后,服務(wù)器端的套接字對(duì)象調(diào)用ge把套接字連接放在一個(gè)線程中套接字連接中涉及到輸入流和輸出流操作,為了不影響我們做其它的事情,我們應(yīng)把套接字連接放在一個(gè)單獨(dú)的線程中去進(jìn)行。另外,服務(wù)器端收到一個(gè)客戶的套接字后,就應(yīng)該啟動(dòng)一個(gè)專門為該客戶服務(wù)的線程。52把套接字連接放在一個(gè)線程中套接字連接中涉及到輸入流和輸出流11.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸
當(dāng)使用套接字進(jìn)行網(wǎng)絡(luò)通信時(shí),可以使用ZipOutputStream流進(jìn)行數(shù)據(jù)壓縮,將套接字返回的輸出流作為ZipOutputStream流的底層流,然后ZipOutputStream流out將數(shù)據(jù)壓縮到底層流發(fā)送到目的地。使用ZipOutputStream類可以將若干個(gè)文件壓縮到底層流發(fā)送到目的地。首先使用ZipOutputStream類的構(gòu)造方法publicZipOutputStream(OutputStreamout)創(chuàng)建一個(gè)對(duì)象,該對(duì)象以套接字返回的輸出流作為目的地,即作為該流的底層流。例如:5311.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸當(dāng)使用套接字進(jìn)行網(wǎng)絡(luò)通信時(shí)11.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸
ZipOutputStreamout=newZipOutputStream(socket.getOutputStream());再讓out調(diào)用:publicvoidputNextEntry(ZipEntrye)方法確定向底層流寫入下一個(gè)文件的位置,例如:out.putNextEntry(newZipEntry(“A.txt”));然后out對(duì)象調(diào)用write方法將文件A.txt壓縮后寫入到底層流中。5411.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸ZipOutputStre11.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸
數(shù)據(jù)接收方對(duì)應(yīng)地使用ZipInputStream類創(chuàng)建對(duì)象,該對(duì)象以套接字獲取的輸入流作為源,即作為該流的底層流,例如:ZipIutputStreamout=newZipIutputStream(socket.getIutputStream());然后讓in找到發(fā)送方寫入到底層流中下一個(gè)文件,例如:ZipEntryzipEntry=in.getNextEntry();那么,in調(diào)用read方法可以讀?。ń鈮海┱业降脑撐募?511.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸數(shù)據(jù)接收方對(duì)應(yīng)地使用Zip11.8UDP數(shù)據(jù)報(bào)
基于UDP的通信和基于TCP的通信不同,基于UDP的信息傳遞更快,但不提供可靠性保證。也就是說,數(shù)據(jù)在傳輸時(shí),用戶無法知道數(shù)據(jù)能否正確到達(dá)目的地主機(jī),也不能確定數(shù)據(jù)到達(dá)目的地的順序是否和發(fā)送的順序相同?;赨DP通信的基本模式是:(1)將數(shù)據(jù)打包,稱為數(shù)據(jù)包(好比將信件裝入信封一樣),然后將數(shù)據(jù)包發(fā)往目的地。(2)接受別人發(fā)來的數(shù)據(jù)包(好比接收信封一樣),然后查看數(shù)據(jù)包中的內(nèi)容。5611.8UDP數(shù)據(jù)報(bào)
基于UDP的通信和基于TCP的1.發(fā)送數(shù)據(jù)包
(1)首先用DatagramPacket類將數(shù)據(jù)打包。用DatagramPacket的構(gòu)造方法創(chuàng)建待發(fā)送的數(shù)據(jù)包:
DatagramPacket(bytedata[],intlength,InetAddtressaddress,intport):使用該構(gòu)造方法創(chuàng)建的數(shù)據(jù)包對(duì)象具有下列兩個(gè)性質(zhì):含有data數(shù)組指定的數(shù)據(jù)。該數(shù)據(jù)包將發(fā)送到地址是address,端口號(hào)是port的主機(jī)上。571.發(fā)送數(shù)據(jù)包(1)首先用DatagramPacket類1.發(fā)送數(shù)據(jù)包
例如:b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政效能提升的途徑與實(shí)踐試題及答案
- 重要經(jīng)驗(yàn)分享的試題及答案匯編
- 小吃門店招牌管理制度
- 醫(yī)院倉(cāng)儲(chǔ)消防管理制度
- 婚宴酒席財(cái)產(chǎn)管理制度
- 了解嵌入式設(shè)計(jì)模式試題及答案
- 婦科診室設(shè)備管理制度
- 小區(qū)物業(yè)路政管理制度
- 夜校開堂安全管理制度
- 公司扶貧基金管理制度
- 軟件專業(yè)畢業(yè)設(shè)計(jì)
- 湖北省武漢市江夏區(qū)2025屆九年級(jí)下學(xué)期5月月考語(yǔ)文試卷(含答案)
- 雨棚翻新合同協(xié)議書范文
- 安徽省合肥一中2025屆高三5月回歸教材讀本
- 2024年江蘇省無錫市中考?xì)v史真題(解析版)
- 雙方房屋使用協(xié)議書
- 投資理財(cái)保本協(xié)議書
- 2025年廣東省深圳市中考道德與法治 總復(fù)習(xí)責(zé)任意識(shí)檢測(cè)卷(含答案)
- 閱讀策略在小學(xué)英語(yǔ)教學(xué)中的應(yīng)用
- 地西半球的國(guó)家 復(fù)習(xí)課課件-2024-2025學(xué)年七年級(jí)地理下學(xué)期(人教版2024)
- 2025法語(yǔ)DELFA1級(jí)考試試卷
評(píng)論
0/150
提交評(píng)論