版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第11章Java網(wǎng)絡(luò)的基本知識
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ò)的基本知識
11.1 使用URL111.1使用URL
URL類是對統(tǒng)一資源定位符(UniformResourceLocator)的抽象,使用URL創(chuàng)建對象的應(yīng)用程序稱作客戶端程序,一個(gè)URL對象存放著一個(gè)具體的資源的引用,表明客戶要訪問這個(gè)URL中的資源,利用URL對象可以獲取URL中的資源。URL對象通常包含最基本的三部分信息:協(xié)議、地址、資源。211.1使用URL
URL類是對統(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ù)器請求信息而服務(wù)器則向客戶發(fā)送信息,兩者協(xié)同工作,各得其所。5客戶與服務(wù)器Web的客戶/服務(wù)器體系結(jié)構(gòu)的含義就是:客戶需要11.2讀取URL中的資源
URL對象調(diào)用InputStreamopenStream()方法可以返回一個(gè)輸入流,該輸入流指向URL對象所包含的資源。通過該輸入流可以將服務(wù)器上的資源信息讀入到客戶端。611.2讀取URL中的資源
URL對象調(diào)用InputStr11.3顯示URL資源中的html文件
Javax.swing包中的JEditorPane容器可以解釋執(zhí)行html文件,也就是說,如果你把html文件讀入到JEditorPane,該html文件就會被解釋執(zhí)行,顯示在JEditorPane容器中,這樣程序就看到了網(wǎng)頁的運(yùn)行效果。711.3顯示URL資源中的html文件
Javax.swi11.3顯示URL資源中的html文件
JEditorPane類的構(gòu)造方法:
publicJEditorPane()
publicJEditorPane(URLinitialpage)throwsIOExceptionpublicJEditorPane(Stringurl)throwsIOExceptionJEditorPane的對象調(diào)用
publicvoidsetPage(URLpage)throwsIOException
方法可以顯示新的URL中的資源。811.3顯示URL資源中的html文件
JEditorPa11.4處理超鏈接
當(dāng)JEditorPane對象調(diào)用setEditable方法將編輯屬性設(shè)為false時(shí),不僅可以顯示網(wǎng)頁的運(yùn)行效果,而且用戶如果單擊網(wǎng)頁中超鏈接還可以使得JEditorPane對象觸發(fā)HyperlinkEvent事件。程序可以通過處理HyperlinkEvent事件,來顯示新的URL資源。JEditorPane對象調(diào)用addHyperlinkListener(HyperlinkEventlistener)方法獲得監(jiān)視器。監(jiān)視器實(shí)現(xiàn)HyperlinkListener接口,該接口中的方法如下:
voidhyperlinkUpdate(HyperlinkEvente)911.4處理超鏈接
當(dāng)JEditorPane對象調(diào)用set11.5InetAdress類
包中的InetAddress類對象含有一個(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對象,該對象含有主機(jī)地址的域名和IP地址,該對象用如下格式表示它包含的信息:/0111.獲取Internet上主機(jī)的地址可以使用InetAdd1.獲取Internet上主機(jī)的地址InetAddress類含有兩個(gè)實(shí)例方法
publicStringgetHostName()
獲取InetAddress對象所含的域名
publicStringgetHostAddress()獲取InetAddress對象所含的IP地址121.獲取Internet上主機(jī)的地址InetAddress2.獲取本地機(jī)的地址可以使用InetAddress類的靜態(tài)方法
getLocalHost();獲得一個(gè)InetAddress對象,該對象含有本地機(jī)的域名和IP地址。132.獲取本地機(jī)的地址可以使用InetAddress類的靜態(tài)11.6套接字
IP地址標(biāo)識Internet上的計(jì)算機(jī),端口號標(biāo)識正在計(jì)算機(jī)上運(yùn)行的進(jìn)程(程序)。端口號與IP地址的組合得出一個(gè)網(wǎng)絡(luò)套接字。端口號被規(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)識Internet上的計(jì)算機(jī),端客戶端的套接字對象
客戶端的程序利用Socket類建立到服務(wù)器的套接字連接。Socket的構(gòu)造方法如下:Socket(Stringhost,intport)try{Socketmysocket=newSocket(“8”,1880);}catch(IOExceptione){}15客戶端的套接字對象客戶端的程序利用Socket類建立到服務(wù)獲取輸入輸出流套接字連接mysocket建立后,mysocket可以使用方法getInputStream()獲得一個(gè)輸入流,然后用這個(gè)輸入流讀取服務(wù)器放入“線路”的信息。mysocket還可以使用方法getOutputStream()獲得一個(gè)輸出流,然后用這個(gè)輸出流將信息寫入“線路”。16獲取輸入輸出流套接字連接mysocket建立后,mysoc服務(wù)器端的套接字對象服務(wù)器必須建立一個(gè)等待接收客戶的套接字的ServerSocket對象。ServerSocket的構(gòu)造方法是:ServerSocket(intport)port是一個(gè)端口號。port必須和客戶呼叫的端口號相同。例如:
try{ServerSocketserver_socket=newServerSocket(1880);}catch(IOExceptione){}當(dāng)服務(wù)器的ServerSocket對象server_socket建立后,就可以使用方法accept()接收客戶的套接字連接呼叫。17服務(wù)器端的套接字對象服務(wù)器必須建立一個(gè)等待接收客戶的套接字的服務(wù)器端的套接字對象所謂“接收”客戶的套接字連接就是accept()會返回一個(gè)和客戶端Socket對象相連接的駐留在服務(wù)器端的Socket對象,服務(wù)器端的這個(gè)Socket對象sc使用方法getOutputStream()獲得的輸出流將指向客戶端Socket對象mysocket使用方法getInputStream()獲得的那個(gè)輸入流;同樣,服務(wù)器端的這個(gè)Socket對象sc使用方法getInputStream()獲得的輸入流將指向客戶端Socket對象mysocket使用方法getOutputStream()獲得的那個(gè)輸出流。注意:accept()方法會堵塞線程的繼續(xù)執(zhí)行,直到接收到客戶的呼叫。18服務(wù)器端的套接字對象所謂“接收”客戶的套接字連接就是acce套接字連接示意圖19套接字連接示意圖19服務(wù)器端的套接字對象連接建立后,服務(wù)器端的套接字對象調(diào)用getInetAddress()方法可以獲取一個(gè)InetAddress對象,該對象含有客戶端的IP地址和域名。同樣,客戶端的套接字對象調(diào)用getInetAddress()方法可以獲取一個(gè)InetAddress對象,該對象含有服務(wù)器端的IP地址和域名。雙方通信完畢后,應(yīng)使用close()方法關(guān)閉套接字連接。注意:ServerSocket對象可以調(diào)用setSoTimeout(inttimeout)方法設(shè)置超時(shí)值,當(dāng)對象調(diào)用accept()方法堵塞的時(shí)間一旦超過timeout時(shí),將觸發(fā)SocketTimeoutException。20服務(wù)器端的套接字對象連接建立后,服務(wù)器端的套接字對象調(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è)對象,該對象以套接字返回的輸出流作為目的地,即作為該流的底層流。例如: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對象調(diào)用write方法將文件A.txt壓縮后寫入到底層流中。2311.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸ZipOutputStre11.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸
數(shù)據(jù)接收方對應(yīng)地使用ZipInputStream類創(chuàng)建對象,該對象以套接字獲取的輸入流作為源,即作為該流的底層流,例如:ZipIutputStreamout=newZipIutputStream(socket.getIutputStream());然后讓in找到發(fā)送方寫入到底層流中下一個(gè)文件,例如:ZipEntryzipEntry=in.getNextEntry();那么,in調(diào)用read方法可以讀?。ń鈮海┱业降脑撐募?。2411.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸數(shù)據(jù)接收方對應(yīng)地使用Zip11.8UDP數(shù)據(jù)報(bào)
基于UDP的通信和基于TCP的通信不同,基于UDP的信息傳遞更快,但不提供可靠性保證。也就是說,數(shù)據(jù)在傳輸時(shí),用戶無法知道數(shù)據(jù)能否正確到達(dá)目的地主機(jī),也不能確定數(shù)據(jù)到達(dá)目的地的順序是否和發(fā)送的順序相同。基于UDP通信的基本模式是:(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ù)包對象具有下列兩個(gè)性質(zhì):含有data數(shù)組指定的數(shù)據(jù)。該數(shù)據(jù)包將發(fā)送到地址是address,端口號是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ù)包對象含有數(shù)組data從offset開始指定長度的數(shù)據(jù),該數(shù)據(jù)包將發(fā)送到地址是address,端口號是port的主機(jī)上。271.發(fā)送數(shù)據(jù)包例如:271.發(fā)送數(shù)據(jù)包
(2)然后用DatagramSocket類的不帶參數(shù)的構(gòu)造方法DatagramSocket()創(chuàng)建一個(gè)對象,該對象負(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è)對象,其中的參數(shù)必須和待接收的數(shù)據(jù)包的端口號相同。DatagramSocket對象使用方法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將接收長度是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è)端口號上接收信息。3111.9廣播數(shù)據(jù)報(bào)
廣播數(shù)據(jù)報(bào)涉及到地址和端口。Inter第11章Java網(wǎng)絡(luò)的基本知識
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ò)的基本知識
11.1 使用URL111.1使用URL
URL類是對統(tǒng)一資源定位符(UniformResourceLocator)的抽象,使用URL創(chuàng)建對象的應(yīng)用程序稱作客戶端程序,一個(gè)URL對象存放著一個(gè)具體的資源的引用,表明客戶要訪問這個(gè)URL中的資源,利用URL對象可以獲取URL中的資源。URL對象通常包含最基本的三部分信息:協(xié)議、地址、資源。3311.1使用URL
URL類是對統(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ù)器請求信息而服務(wù)器則向客戶發(fā)送信息,兩者協(xié)同工作,各得其所。36客戶與服務(wù)器Web的客戶/服務(wù)器體系結(jié)構(gòu)的含義就是:客戶需要11.2讀取URL中的資源
URL對象調(diào)用InputStreamopenStream()方法可以返回一個(gè)輸入流,該輸入流指向URL對象所包含的資源。通過該輸入流可以將服務(wù)器上的資源信息讀入到客戶端。3711.2讀取URL中的資源
URL對象調(diào)用InputStr11.3顯示URL資源中的html文件
Javax.swing包中的JEditorPane容器可以解釋執(zhí)行html文件,也就是說,如果你把html文件讀入到JEditorPane,該html文件就會被解釋執(zhí)行,顯示在JEditorPane容器中,這樣程序就看到了網(wǎng)頁的運(yùn)行效果。3811.3顯示URL資源中的html文件
Javax.swi11.3顯示URL資源中的html文件
JEditorPane類的構(gòu)造方法:
publicJEditorPane()
publicJEditorPane(URLinitialpage)throwsIOExceptionpublicJEditorPane(Stringurl)throwsIOExceptionJEditorPane的對象調(diào)用
publicvoidsetPage(URLpage)throwsIOException
方法可以顯示新的URL中的資源。3911.3顯示URL資源中的html文件
JEditorPa11.4處理超鏈接
當(dāng)JEditorPane對象調(diào)用setEditable方法將編輯屬性設(shè)為false時(shí),不僅可以顯示網(wǎng)頁的運(yùn)行效果,而且用戶如果單擊網(wǎng)頁中超鏈接還可以使得JEditorPane對象觸發(fā)HyperlinkEvent事件。程序可以通過處理HyperlinkEvent事件,來顯示新的URL資源。JEditorPane對象調(diào)用addHyperlinkListener(HyperlinkEventlistener)方法獲得監(jiān)視器。監(jiān)視器實(shí)現(xiàn)HyperlinkListener接口,該接口中的方法如下:
voidhyperlinkUpdate(HyperlinkEvente)4011.4處理超鏈接
當(dāng)JEditorPane對象調(diào)用set11.5InetAdress類
包中的InetAddress類對象含有一個(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對象,該對象含有主機(jī)地址的域名和IP地址,該對象用如下格式表示它包含的信息:/0421.獲取Internet上主機(jī)的地址可以使用InetAdd1.獲取Internet上主機(jī)的地址InetAddress類含有兩個(gè)實(shí)例方法
publicStringgetHostName()
獲取InetAddress對象所含的域名
publicStringgetHostAddress()獲取InetAddress對象所含的IP地址431.獲取Internet上主機(jī)的地址InetAddress2.獲取本地機(jī)的地址可以使用InetAddress類的靜態(tài)方法
getLocalHost();獲得一個(gè)InetAddress對象,該對象含有本地機(jī)的域名和IP地址。442.獲取本地機(jī)的地址可以使用InetAddress類的靜態(tài)11.6套接字
IP地址標(biāo)識Internet上的計(jì)算機(jī),端口號標(biāo)識正在計(jì)算機(jī)上運(yùn)行的進(jìn)程(程序)。端口號與IP地址的組合得出一個(gè)網(wǎng)絡(luò)套接字。端口號被規(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)識Internet上的計(jì)算機(jī),端客戶端的套接字對象
客戶端的程序利用Socket類建立到服務(wù)器的套接字連接。Socket的構(gòu)造方法如下:Socket(Stringhost,intport)try{Socketmysocket=newSocket(“8”,1880);}catch(IOExceptione){}46客戶端的套接字對象客戶端的程序利用Socket類建立到服務(wù)獲取輸入輸出流套接字連接mysocket建立后,mysocket可以使用方法getInputStream()獲得一個(gè)輸入流,然后用這個(gè)輸入流讀取服務(wù)器放入“線路”的信息。mysocket還可以使用方法getOutputStream()獲得一個(gè)輸出流,然后用這個(gè)輸出流將信息寫入“線路”。47獲取輸入輸出流套接字連接mysocket建立后,mysoc服務(wù)器端的套接字對象服務(wù)器必須建立一個(gè)等待接收客戶的套接字的ServerSocket對象。ServerSocket的構(gòu)造方法是:ServerSocket(intport)port是一個(gè)端口號。port必須和客戶呼叫的端口號相同。例如:
try{ServerSocketserver_socket=newServerSocket(1880);}catch(IOExceptione){}當(dāng)服務(wù)器的ServerSocket對象server_socket建立后,就可以使用方法accept()接收客戶的套接字連接呼叫。48服務(wù)器端的套接字對象服務(wù)器必須建立一個(gè)等待接收客戶的套接字的服務(wù)器端的套接字對象所謂“接收”客戶的套接字連接就是accept()會返回一個(gè)和客戶端Socket對象相連接的駐留在服務(wù)器端的Socket對象,服務(wù)器端的這個(gè)Socket對象sc使用方法getOutputStream()獲得的輸出流將指向客戶端Socket對象mysocket使用方法getInputStream()獲得的那個(gè)輸入流;同樣,服務(wù)器端的這個(gè)Socket對象sc使用方法getInputStream()獲得的輸入流將指向客戶端Socket對象mysocket使用方法getOutputStream()獲得的那個(gè)輸出流。注意:accept()方法會堵塞線程的繼續(xù)執(zhí)行,直到接收到客戶的呼叫。49服務(wù)器端的套接字對象所謂“接收”客戶的套接字連接就是acce套接字連接示意圖50套接字連接示意圖19服務(wù)器端的套接字對象連接建立后,服務(wù)器端的套接字對象調(diào)用getInetAddress()方法可以獲取一個(gè)InetAddress對象,該對象含有客戶端的IP地址和域名。同樣,客戶端的套接字對象調(diào)用getInetAddress()方法可以獲取一個(gè)InetAddress對象,該對象含有服務(wù)器端的IP地址和域名。雙方通信完畢后,應(yīng)使用close()方法關(guān)閉套接字連接。注意:ServerSocket對象可以調(diào)用setSoTimeout(inttimeout)方法設(shè)置超時(shí)值,當(dāng)對象調(diào)用accept()方法堵塞的時(shí)間一旦超過timeout時(shí),將觸發(fā)SocketTimeoutException。51服務(wù)器端的套接字對象連接建立后,服務(wù)器端的套接字對象調(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è)對象,該對象以套接字返回的輸出流作為目的地,即作為該流的底層流。例如: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對象調(diào)用write方法將文件A.txt壓縮后寫入到底層流中。5411.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸ZipOutputStre11.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸
數(shù)據(jù)接收方對應(yīng)地使用ZipInputStream類創(chuàng)建對象,該對象以套接字獲取的輸入流作為源,即作為該流的底層流,例如:ZipIutputStreamout=newZipIutputStream(socket.getIutputStream());然后讓in找到發(fā)送方寫入到底層流中下一個(gè)文件,例如:ZipEntryzipEntry=in.getNextEntry();那么,in調(diào)用read方法可以讀?。ń鈮海┱业降脑撐募?。5511.7網(wǎng)絡(luò)中的數(shù)據(jù)壓縮與傳輸數(shù)據(jù)接收方對應(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ù)包對象具有下列兩個(gè)性質(zhì):含有data數(shù)組指定的數(shù)據(jù)。該數(shù)據(jù)包將發(fā)送到地址是address,端口號是port的主機(jī)上。571.發(fā)送數(shù)據(jù)包(1)首先用DatagramPacket類1.發(fā)送數(shù)據(jù)包
例如:b
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教科版二年級科學(xué)下冊-做一個(gè)指南針5
- 課程設(shè)計(jì)實(shí)踐體會
- 阿特拉斯空壓機(jī)課件
- 創(chuàng)新自然主題課程設(shè)計(jì)
- 個(gè)性化醫(yī)療與精準(zhǔn)治療案例分析
- 醫(yī)療影像深度學(xué)習(xí)與智能識別
- 傳染病護(hù)理措施及防控
- 機(jī)械設(shè)計(jì)綜合課程設(shè)計(jì)
- PDCA護(hù)理質(zhì)控流程與執(zhí)行課件
- 消防操作員網(wǎng)絡(luò)課程設(shè)計(jì)
- 四川美術(shù)學(xué)院《高級英語視聽說(1)》2023-2024學(xué)年第一學(xué)期期末試卷
- 大宗商品市場分析師培訓(xùn)
- 銀行不良資產(chǎn)處置與回收
- 2025年焊工(初級)復(fù)審考試題庫附答案
- (2025.06.12)領(lǐng)導(dǎo)干部任前應(yīng)知應(yīng)會黨內(nèi)法規(guī)和法律知識考試題庫(2025年度)
- 2024陸上風(fēng)電項(xiàng)目造價(jià)指標(biāo)
- 06上海卷 (2024-2020) 2024年高考英語作文真題深度解讀及五年秀范文匯編
- 《廣安市醫(yī)療服務(wù)項(xiàng)目與價(jià)格匯編(2024年試行版)》
- 江蘇保安考試試題及答案
- 2025民航招飛英語測試題及答案
- 徒步活動(dòng)策劃合同協(xié)議
評論
0/150
提交評論