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

下載本文檔

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

文檔簡介

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

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

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

URL的組成

protocol://resourceName

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

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

協(xié)議名

資源4精選2021版課件

URL類

Java將URL封裝成URL類,通過構(gòu)造方法可以實例化一個URL對象。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類編程中的常見異常

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對象屬性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信息通過openStream()與指定的URL建立連接并返回一個InputStream類的對象,然后從這一連接中讀取數(shù)據(jù)。常用的讀取網(wǎng)絡(luò)資源數(shù)據(jù)的步驟如下:創(chuàng)建URL類的實例對象;通過URL類的實例對象的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的對象表示Java程序與URL在網(wǎng)絡(luò)上的通信連接。

使用URLConnection對象獲取WWW資源的步驟:創(chuàng)建一個URL對象;調(diào)用URL對象的getConnection()方法獲得對應(yīng)的URLConnection對象;獲取輸入流并讀數(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通信預備知識

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

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

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

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

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

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

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

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

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

//指定端口號來創(chuàng)建Serversocket對象,該端口為端主機的端口;publicServersocket(intport,intcount)

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

18精選2021版課件2.打開輸入/輸出流publicInputstream

getInputstream()

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

getoutputstream()

//得到Socket建立的輸出流

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

getlnetAddress()

//得到遠程主機IP地址的InetAddress對象publicint

getLocalPort()//得到與遠程機連接的本地機的端口號19精選2021版課件Serversocket對象的其他方法:

publicSocketaccept()

//獲取與客戶端連接的Socket對象

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

getInetAddress()

//得到與客戶端相連的InetAddress對象publicint

getLocalPort()

//得到服務(wù)器在監(jiān)聽的端口號

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

打開Socket,新建一個套接字;

為套接字建立一個輸入和輸出流;

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

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

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

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

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

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

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

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

在Java的包中有兩個類DatagramSocket和DatagramPacket用來支持數(shù)據(jù)報通信。23精選2021版課件DatagramSocket的構(gòu)造方法:

publicDatagramSocket()

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

publicDatagramSocket(intport)

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論