Java網(wǎng)絡(luò)的基本知識(shí)課件_第1頁(yè)
Java網(wǎng)絡(luò)的基本知識(shí)課件_第2頁(yè)
Java網(wǎng)絡(luò)的基本知識(shí)課件_第3頁(yè)
Java網(wǎng)絡(luò)的基本知識(shí)課件_第4頁(yè)
Java網(wǎng)絡(luò)的基本知識(shí)課件_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論