Java網(wǎng)絡(luò)通信課件_第1頁(yè)
Java網(wǎng)絡(luò)通信課件_第2頁(yè)
Java網(wǎng)絡(luò)通信課件_第3頁(yè)
Java網(wǎng)絡(luò)通信課件_第4頁(yè)
Java網(wǎng)絡(luò)通信課件_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

11.Java網(wǎng)絡(luò)通信周筱媛西安科技大學(xué)計(jì)算機(jī)系Email:yuanyuanzhou@hTel:130729043641精選2021版課件

主要內(nèi)容:學(xué)習(xí)如何通過(guò)包中的類直接在程序中實(shí)現(xiàn)網(wǎng)絡(luò)通信。2精選2021版課件11.1URL類編程

URL(UniformResourceLocator)是統(tǒng)一資源定位器的簡(jiǎn)寫(xiě)。它表示Internet上某一資源的地址,這些資源包括Web頁(yè)、文本文件、圖形(像)文件和聲頻片段等。通過(guò)URL可以訪問(wèn)Internet和WWW。瀏覽器通過(guò)解析給定的URL可以在網(wǎng)絡(luò)上查找相應(yīng)的文件或資源。3精選2021版課件11.1.1URL的組成和URL類

URL的組成

protocol://resourceName

協(xié)議名指明獲取資源所使用的傳輸協(xié)議,如http、ftp等;資源包括主機(jī)名、端口號(hào)、文件的引用;如

http://localhost:8080/jsp/temp.html

協(xié)議名

資源4精選2021版課件

URL類

Java將URL封裝成URL類,通過(guò)構(gòu)造方法可以實(shí)例化一個(gè)URL對(duì)象。publicURL(Stringspec)publicURL(URLurl,Stringfile)publicURL(Stringprotocol,Stringhost,Stringfile)publicURL(Stringprotocol,Stringhost,intport,Stringfile)URLmyURL=newURL(“”);URLmydoc=newURL(myURL,“index.html”);URLmyURL=newURL(“http”,“”,“index.html”);URLmyURL=newURL(“http”,“”,80,“index.html”);5精選2021版課件

URL類編程中的常見(jiàn)異常

MalformedURLExceptiontry{……URLmyURL=newURL(“……”);……}catch(Exceptione){……

//異常處理……}6精選2021版課件URL類的成員方法:publicfinalObect

getContent();publicStringgetFile();publicStringgetHost();publicint

getPort();publicStringgetProtocol();publicStringtoExternalForm();publicStringtoString();publicfinalInputStream

openStream()throws……;publicURLConnection

openConnection();……7精選2021版課件例1獲取URL對(duì)象屬性import.*;publicclassmyurl{

pub1icstaticvoidmain(Stringargs[]){

try{

URLurl=newURL("http://www.tsinghua.edu.cn:80/home/homepage.htm")

System.out.println("theProtocol:"+url.getProtocol());

System.out.Println("thehostname:"+url.getHost());

System.out.println("theport:"+url.getPort());

System.out.println("thefile:"+url.getFle());

System.out.println("theext:"+url.toExternalForm)),

System.out.println(url.toString());

}

catch(Exceptione){

System.out.println(e);

}

}}theprotocol:http

thehostname:www.tsinghua.edu.cn

theport:80

thefile:/homelhomepage.html

theext:http://www.tsinghua.edu.cn:80/home/homepage.htmlhttp://www.tsinghua.edu.cn:80/home/homepage.html8精選2021版課件

使用URL類讀取WWW信息通過(guò)openStream()與指定的URL建立連接并返回一個(gè)InputStream類的對(duì)象,然后從這一連接中讀取數(shù)據(jù)。常用的讀取網(wǎng)絡(luò)資源數(shù)據(jù)的步驟如下:創(chuàng)建URL類的實(shí)例對(duì)象;通過(guò)URL類的實(shí)例對(duì)象的openStream方法建立連接;讀取數(shù)據(jù);關(guān)閉數(shù)據(jù)流;9精選2021版課件例2用url.openStream()方法讀取WWW數(shù)據(jù)import.*;importjava.io.*;publicclassOpenStream{publicstaticvoidmain(Stringargs[])throwsException{URLurl=newURL("");BufferedReaderin=newBufferedReader(newInputStreamReader(url.openStream()));StringinputLine;while((inputLine=in.readLine())!=null){ System.out.println(inputLine);}in.close();}}10精選2021版課件使用URLConnection連接WWW

URLConnection的對(duì)象表示Java程序與URL在網(wǎng)絡(luò)上的通信連接。

使用URLConnection對(duì)象獲取WWW資源的步驟:創(chuàng)建一個(gè)URL對(duì)象;調(diào)用URL對(duì)象的getConnection()方法獲得對(duì)應(yīng)的URLConnection對(duì)象;獲取輸入流并讀數(shù)據(jù);關(guān)閉連接;11精選2021版課件例3使用URLConnection連接服務(wù)器import.*;importjava.io.*;publicclassurlcon{publicstaticvoidmain(Stringargs[]){InputStreamis;OutputStreamos;intb;try{ URLurl=newURL("");URLConnectionuric=url.openConnection(); System.out.println("thelength:"+uric.getContentLength()); System.out.println("thetype:"+uric.getContentType());System.out.println("thedate:"+uric.getDate());System.out.println("thelastmodified:"+uric.getLastModified());os=newFileOutputStream("d:\\down.html");if(uric.getContentLength()>=1){ is=uric.getInputStream(); while((b=is.read())!=-1){os.write(b); System.out.write(b); }}else{ System.out.println("nocontent");}}catch(Exceptione){System.out.println(e);}}}12精選2021版課件例11.5利用URLConnection向服務(wù)器發(fā)送查詢信息,并接受服務(wù)器返回的參數(shù)。P25413精選2021版課件二、Socket通信預(yù)備知識(shí)

Socket是網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)交換的通道?;蛘哒f(shuō)網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通訊連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)雙向鏈路的一端稱為一個(gè)Socket,可以說(shuō)Socket是面向客戶/服務(wù)器模型設(shè)計(jì)的。Socket通信機(jī)制提供了兩種通訊方式:有聯(lián)接(TCP)和無(wú)聯(lián)接(UDP)方式,分別面向不同的應(yīng)用需求。

TCP是以連接為基礎(chǔ)的流式協(xié)議,通信前,首先要建立連接,然后才能通信。因此,能保證同步、準(zhǔn)確地進(jìn)行通信。如果應(yīng)用程序需要可靠的點(diǎn)對(duì)點(diǎn)通信,一般采用TCP這種協(xié)議。比如:HTTP,ftp,telnet等應(yīng)用程序,確保其可靠性對(duì)于程序運(yùn)行是非常關(guān)鍵的。

14精選2021版課件UDP是一種無(wú)連接的協(xié)議,其系統(tǒng)開(kāi)銷比無(wú)聯(lián)接方式小,但通信鏈路提供了不可靠的數(shù)據(jù)報(bào)服務(wù),每個(gè)數(shù)據(jù)報(bào)都是一個(gè)獨(dú)立的信息,不能保證信源所傳輸?shù)臄?shù)據(jù)一定能夠到達(dá)信宿。在該方式下,通信雙方不必創(chuàng)建一個(gè)聯(lián)接過(guò)程和建立一條通訊鏈路,網(wǎng)絡(luò)通信操作在不同的主機(jī)和進(jìn)程之間轉(zhuǎn)發(fā)進(jìn)行。端口:數(shù)據(jù)通過(guò)網(wǎng)絡(luò)到達(dá)一臺(tái)主機(jī)(或準(zhǔn)確的說(shuō)是主機(jī)的網(wǎng)卡)是通過(guò)IP地址實(shí)現(xiàn)的。但當(dāng)該主機(jī)運(yùn)行多個(gè)程序時(shí)如何識(shí)別數(shù)據(jù)是屬于哪個(gè)程序的呢?這就是端口。一個(gè)端口只能綁定一個(gè)應(yīng)用程序。通過(guò)TCP/UDP通信的應(yīng)用程序必須知道對(duì)方的IP地址和端口號(hào)才能通信。端口號(hào)可取從0-65535,其中,0-1023為保留端口,提供給眾所周知的一些服務(wù)。15精選2021版課件Socket通信的一般過(guò)程

使用Socket進(jìn)行客戶/服務(wù)器通信程序設(shè)計(jì)的一般過(guò)程是這樣的:Server端listen(監(jiān)聽(tīng))某個(gè)端口是否有連接請(qǐng)求,Client端向Server端發(fā)出connect(連接)請(qǐng)求,Server端向Client端發(fā)回Accept(接受)消息。一個(gè)連接就建立好了,之后客戶端、服務(wù)器端都可以用send()、write()等方法與對(duì)方通信。16精選2021版課件

對(duì)于一個(gè)功能齊全的Socket的工作過(guò)程包含以下四個(gè)基本步驟:創(chuàng)建Socket;打開(kāi)連接到Socket的輸入輸出流;按照一定的協(xié)議對(duì)Socket進(jìn)行讀/寫(xiě)操作;關(guān)閉Socket。17精選2021版課件1.創(chuàng)建Socket

創(chuàng)建客戶端Socket可以通過(guò)Socket的構(gòu)造方法,介紹如下:

publicSocket(Stringhost,intport)publicSocket(InetAddressaddress,intport)

//用該方法創(chuàng)建一個(gè)與指定遠(yuǎn)程主機(jī)及其端口建立連接;publicSocket(Stringhost,Intport,booleanstream)

//stream指明Socket是流式Socket還是數(shù)據(jù)報(bào)式Socketpublicsocket(InetAddressaddress,Intport,booleanstream)Serversocket的構(gòu)造方法為:publicServersocket(intport)

//指定端口號(hào)來(lái)創(chuàng)建Serversocket對(duì)象,該端口為端主機(jī)的端口;publicServersocket(intport,intcount)

//用指定的端口號(hào)創(chuàng)建Serversocket對(duì)象,如果該端的端口正在使用,只等待count毫秒。

18精選2021版課件2.打開(kāi)輸入/輸出流publicInputstream

getInputstream()

//得到Socket建立的輸入流pubicOutputstream

getoutputstream()

//得到Socket建立的輸出流

Socket對(duì)象的其他方法:publicvoidclose()publicInetAddress

getlnetAddress()

//得到遠(yuǎn)程主機(jī)IP地址的InetAddress對(duì)象publicint

getLocalPort()//得到與遠(yuǎn)程機(jī)連接的本地機(jī)的端口號(hào)19精選2021版課件Serversocket對(duì)象的其他方法:

publicSocketaccept()

//獲取與客戶端連接的Socket對(duì)象

//accept()為一個(gè)阻塞性方法,即該方法被調(diào)用后,將等待客戶的請(qǐng)求,直到有一個(gè)客戶啟動(dòng)并請(qǐng)求連接到相同的端口,然后accept()返回一個(gè)對(duì)應(yīng)于客戶的Socket。publicvoidclose()publicInetAddrss

getInetAddress()

//得到與客戶端相連的InetAddress對(duì)象publicint

getLocalPort()

//得到服務(wù)器在監(jiān)聽(tīng)的端口號(hào)

20精選2021版課件例11.3P241例11.4P24321精選2021版課件1)客戶端的編程流程:

打開(kāi)Socket,新建一個(gè)套接字;

為套接字建立一個(gè)輸入和輸出流;

根據(jù)服務(wù)器協(xié)議從套接字讀入或向套接字寫(xiě)入;

清除套接字和輸入/輸出流;2)服務(wù)器端的編程流程:

打開(kāi)ServerSocket,創(chuàng)建一個(gè)服務(wù)器型套接字和一個(gè)普通套接字,服務(wù)器型套接字在指定端口為客戶端請(qǐng)求的Socket服務(wù);

使用ServerSocket類的accept()方法使服務(wù)器型套接字處于監(jiān)聽(tīng)狀態(tài)并把監(jiān)聽(tīng)結(jié)果返回給普通套接字;

為該普通套接字創(chuàng)建輸入和輸出流;

從輸入和輸出流中讀入或?qū)懭胱止?jié)流,進(jìn)行相應(yīng)的處理,并將結(jié)果返回給客戶端;

在客戶端和服務(wù)器工作結(jié)束后關(guān)閉所有的對(duì)象,如服務(wù)器型的套接字,普通套接字,輸入和輸出流。

小結(jié):22精選2021版課件三、數(shù)據(jù)報(bào)通信數(shù)據(jù)報(bào)(Datagram)使網(wǎng)絡(luò)層數(shù)據(jù)單元在介質(zhì)上傳輸信息的一種邏輯分組格式,它是一種在網(wǎng)絡(luò)中傳播的、獨(dú)立的、自身包含地址信息的消息,它能否到達(dá)目的地,到達(dá)的時(shí)間,到達(dá)時(shí)內(nèi)容是否會(huì)變化不能準(zhǔn)確知道的。它的通訊雙方是不需要建立連接的,對(duì)于一些不需要很高質(zhì)量的應(yīng)用程序來(lái)說(shuō),數(shù)據(jù)報(bào)通訊是一個(gè)非常好的選擇。

在Java的包中有兩個(gè)類DatagramSocket和DatagramPacket用來(lái)支持?jǐn)?shù)據(jù)報(bào)通信。23精選2021版課件DatagramSocket的構(gòu)造方法:

publicDatagramSocket()

//構(gòu)造一個(gè)數(shù)據(jù)報(bào)socket,并使其與本地主機(jī)任一可用的端口連接。若打不開(kāi)socket則拋出SocketException異常。

publicDatagramSocket(intport)

//構(gòu)造一個(gè)數(shù)據(jù)報(bào)socket,并使其與本地主機(jī)指定的端口連接。若打不開(kāi)socket或socket無(wú)法與指定的端口連接則拋出SocketException異常。

24精選2021版課件DatagramPacket的構(gòu)造方法:

DatagramPacket(bytebufferedarray[],intoffset,intlength,InetAddressaddress,intport)//構(gòu)造一個(gè)包長(zhǎng)度為length的包傳送到指定主機(jī)指定端口號(hào)上的數(shù)據(jù)報(bào)文包,參數(shù)length必須小于等于bufferedarry.lengthDatagramPacket(bytebufferedarray[],intlength)

//接收從服務(wù)器返回的結(jié)果數(shù)據(jù)報(bào)文,只需指明存放接收的數(shù)據(jù)報(bào)的緩沖區(qū)和長(zhǎng)度。

25精選2021版課件在Java中實(shí)現(xiàn)客戶端與服務(wù)器之間數(shù)據(jù)報(bào)通訊的方法:客戶端應(yīng)用程序的工作流程建立數(shù)據(jù)報(bào)通訊的Socket,我們可以通過(guò)創(chuàng)建一個(gè)DatagramSocket對(duì)象來(lái)實(shí)現(xiàn)它。創(chuàng)建一個(gè)數(shù)據(jù)報(bào)文包,用來(lái)實(shí)現(xiàn)無(wú)連接的包傳送服務(wù)。每個(gè)數(shù)據(jù)報(bào)文包是用DatagramPacket類來(lái)創(chuàng)建,DatagramPacket對(duì)象封裝了數(shù)據(jù)報(bào)包數(shù)據(jù),包長(zhǎng)度,目標(biāo)地址,目標(biāo)端口。作為客戶端要發(fā)送數(shù)據(jù)報(bào)文包,要調(diào)用DatagramPacket類的構(gòu)造方法創(chuàng)建DatagramPacket對(duì)象,將要發(fā)送的數(shù)據(jù)和包文目的地址等信息放入對(duì)象之中。26精選2021版課件創(chuàng)建完DatagramSocket

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論