第11章 java 網(wǎng)絡(luò)編程.ppt_第1頁
第11章 java 網(wǎng)絡(luò)編程.ppt_第2頁
第11章 java 網(wǎng)絡(luò)編程.ppt_第3頁
第11章 java 網(wǎng)絡(luò)編程.ppt_第4頁
第11章 java 網(wǎng)絡(luò)編程.ppt_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

學(xué)習(xí)導(dǎo)讀本章主要介紹Java語言網(wǎng)絡(luò)運行機制 URL編程 Socket通信機制和數(shù)據(jù)報通信等基礎(chǔ)知識 第11章Java網(wǎng)絡(luò)編程 本章學(xué)習(xí)目標(biāo) 基于URL的高層次Java網(wǎng)絡(luò)編程 基于Socket的低層次Java網(wǎng)絡(luò)編程 基于數(shù)據(jù)報DatagramJava網(wǎng)絡(luò)編程 11 1Java網(wǎng)絡(luò)運行機制 11 1 1網(wǎng)絡(luò)基礎(chǔ)知識網(wǎng)絡(luò)上的計算機要互相通信 必須遵循一定的協(xié)議 目前使用最廣泛的網(wǎng)絡(luò)協(xié)議是Internet上所使用的TCP IP協(xié)議 11 1 2網(wǎng)絡(luò)基本概念I(lǐng)P地址 標(biāo)識計算機等網(wǎng)絡(luò)設(shè)備的網(wǎng)絡(luò)地址 由四個8位的二進制數(shù)組成 中間以小數(shù)點分隔 主機名 hostname 網(wǎng)絡(luò)地址的助記名 按照域名進行分級管理 如 或端口號 portnumber 網(wǎng)絡(luò)通信時同一機器上的不同進程的標(biāo)識 如 80 21 23 25 其中0 1023為系統(tǒng)保留的端口號 服務(wù)類型 service 網(wǎng)絡(luò)的各種服務(wù) http telnet ftp smtp 11 1 3兩類傳輸協(xié)議 TCP UDPTCP是 TransferControlProtocol 的簡稱 是一種面向連接的保證可靠傳輸?shù)膮f(xié)議 通過TCP協(xié)議傳輸 得到的是一個順序的無差錯的數(shù)據(jù)流 發(fā)送方和接收方的成對的兩個socket之間必須建立連接 以便在TCP協(xié)議的基礎(chǔ)上進行通信 當(dāng)一個socket 通常都是serversocket 等待建立連接時 另一個socket可以要求進行連接 一旦這兩個socket連接起來 它們就可以進行雙向數(shù)據(jù)傳輸 雙方都可以進行發(fā)送或接收操作 UDP是 UserDatagramProtocol 的簡稱 是一種無連接的協(xié)議 每個數(shù)據(jù)報都是一個獨立的信息 包括完整的源地址或目的地址 它在網(wǎng)絡(luò)上以任何可能的路徑傳往目的地 因此能否到達目的地 到達目的地的時間以及內(nèi)容的正確性都是不能被保證的 11 1 4Java網(wǎng)絡(luò)運行機制Java用于網(wǎng)絡(luò)操作的功能包是 它包含了多個訪問各種標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議的類庫 Java支持URL訪問網(wǎng)絡(luò)資源的機制 通過URL標(biāo)識 可以直接使用http file ftp等多種協(xié)議 以獲取遠(yuǎn)程計算機上的資源信息 方便快捷地開發(fā)internet應(yīng)用程序 Java的網(wǎng)絡(luò)類庫支持多種Internet協(xié)議 包括Telnet FTP和HTTP WWW 與此相對應(yīng)的Java網(wǎng)絡(luò)類庫的子類庫為 JJ ftpJ www contentJ www htmlJ www http 11 2URL編程11 2 1什么是URLURL UniformResourceLocator 是一致資源定位器的簡稱 它表示Internet上某一資源的地址 通過URL我們可以訪問Internet上的各種網(wǎng)絡(luò)資源 比如最常見的WWW FTP站點 瀏覽器通過解析給定的URL可以在網(wǎng)絡(luò)上查找相應(yīng)的文件或其他資源 URL的基本結(jié)構(gòu)由5部分組成 protocol resourceName協(xié)議名 protocol 指明獲取資源所使用的傳輸協(xié)議 如http ftp gopher file等 資源名 resourceName 則應(yīng)該是資源的完整地址 包括主機名 端口號 文件名或文件內(nèi)部的一個引用 例如 11 2 2URL編程1 URL編程為了表示URL 中實現(xiàn)了類URL 我們可以通過下面的構(gòu)造方法來初始化一個URL對象 1 publicURL Stringspec 通過一個表示URL地址的字符串可以構(gòu)造一個URL對象 例如 URLurlBase newURL 2 publicURL URLcontext Stringspec 通過基URL和相對URL構(gòu)造一個URL對象 例如 URLindex263 newURL net263 index html 3 publicURL Stringprotocol Stringhost Stringfile 例如 newURL http pages G html 4 publicURL Stringprotocol Stringhost intport Stringfile 例如 URLgamelan newURL http 80 Pages Gwork html 類URL的構(gòu)造方法都聲明拋棄非運行時例外 MalformedURLException 因此生成URL對象時 我們必須要對這一例外進行處理 通常是用try catch語句進行捕獲 格式如下 try URLmyURL newURL catch MalformedURLExceptione exceptionhandlercodehere 一個URL對象生成后 其屬性是不能被改變的 但可以通過它給定的方法來獲取這些屬性 publicStringgetProtocol 獲取該URL的協(xié)議名publicStringgetHost 獲取該URL的主機名publicStringgetPort 獲取該URL的端口號publicStringgetPath 獲取該URL的文件路徑publicStringgetFile 獲取該URL的文件名publicStringgetRef 獲取該URL在文件中的相對位置publicStringgetQuery 獲取該URL的查詢名 例11 1 創(chuàng)建URL對象屬性 2 針對HTTP協(xié)議的URLConnection類通過URL的方法openStream 我們只能從網(wǎng)絡(luò)上讀取數(shù)據(jù) 如果我們同時還想輸出數(shù)據(jù) 例如向服務(wù)器端的CGI程序發(fā)送一些數(shù)據(jù) 我們必須先與URL建立連接 然后才能對其進行讀寫 這時就要用到類URLConnection了 CGI是公共網(wǎng)關(guān)接口 CommonGatewayInterface 的簡稱 它是用戶瀏覽器和服務(wù)器端的應(yīng)用程序進行連接的接口 類URLConnection也在包中定義 它表示Java程序和URL在網(wǎng)絡(luò)上的通信連接 當(dāng)與一個URL建立連接時 首先要在一個URL對象上通過方法openConnection 生成對應(yīng)的URLConnection對象 如果連接過程失敗 將產(chǎn)生IOException Try URLnetchinaren newURL URLConnectonnniu netchinaren openConnection catch MalformedURLExceptione 創(chuàng)建URL 對象失敗 catch IOExceptione openConnection 失敗 通過URLConnection對象獲取的輸入流和輸出流 可以與現(xiàn)有的CGI程序進行交互 URLConnection類的實例方法 PublicObjectgetContent throwsIOExceptionPublicintgetContentLength PublicStringgetContentType PubliclonggetDate PubliclonggetLastModified PublicInputStreamgetInputStream throwsIOExceptionPublicOutputSteramgetOutputStream throwsIOException 例11 2 使用URLConnection對象訪問HTTP協(xié)議表示的遠(yuǎn)程文件 11 3Socket通信機制11 3 1Socket通訊網(wǎng)絡(luò)上的兩個程序通過一個雙向的通訊連接實現(xiàn)數(shù)據(jù)的交換 這個雙向鏈路的一端稱為一個Socket Socket通常用來實現(xiàn)客戶方和服務(wù)方的連接 Socket是TCP IP協(xié)議的一個十分流行的編程界面 一個Socket由一個IP地址和一個端口號唯一確定 在傳統(tǒng)的UNIX環(huán)境下可以操作TCP IP協(xié)議的接口不止Socket一個 Socket所支持的協(xié)議種類也不光TCP IP一種 因此兩者之間是沒有必然聯(lián)系的 在Java環(huán)境下 Socket編程主要是指基于TCP IP協(xié)議的網(wǎng)絡(luò)編程 對于一個功能齊全的Socket 都要包含以下基本結(jié)構(gòu) 其工作過程包含以下四個基本的步驟 創(chuàng)建Socket 打開連接到Socket的輸入 出流 按照一定的協(xié)議對Socket進行讀 寫操作 關(guān)閉Socket 11 3 2Socket與ServerSocket類1 Socket與ServerSocket類java在包中提供了兩個類Socket和ServerSocket 分別用來表示雙向連接的客戶端和服務(wù)端 這是兩個封裝得非常好的類 使用很方便 其構(gòu)造方法如下 Socket InetAddressaddress intport Socket InetAddressaddress intport booleanstream Socket Stringhost intprot Socket Stringhost intprot booleanstream Socket SocketImplimpl Socket Stringhost intport InetAddresslocalAddr intlocalPort Socket InetAddressaddress intport InetAddresslocalAddr intlocalPort ServerSocket intport ServerSocket intport intbacklog ServerSocket intport intbacklog InetAddressbindAddr 在選擇端口時 必須小心 每一個端口提供一種特定的服務(wù) 只有給出正確的端口 才能獲得相應(yīng)的服務(wù) 0 1023的端口號為系統(tǒng)所保留 例如http服務(wù)的端口號為80 telnet服務(wù)的端口號為21 ftp服務(wù)的端口號為23 所以我們在選擇端口號時 最好選擇一個大于1023的數(shù)以防止發(fā)生沖突 在創(chuàng)建socket時如果發(fā)生錯誤 將產(chǎn)生IOException 在程序中必須對之作出處理 所以在創(chuàng)建Socket或ServerSocket是必須捕獲或拋出例外 主要方法 publicSocketaccept 等待客戶端的連接publicvoidclose 關(guān)閉SocketpublicInetAddressgetInetAddress publicintgetLocalPort publicvoidsetSoTimeout inttimeout 這些方法都將拋出例外SocketException 程序中需要捕獲處理 2 Socket與ServerSocket處理過程客戶機 服務(wù)器在分布處理過程中 使用基于連接的網(wǎng)絡(luò)通信模式 該通信模式首先在客戶機和服務(wù)器之間定義一套通信協(xié)議 并創(chuàng)建一Socket類 利用這個類建立一條可靠的鏈接 然后 客戶機 服務(wù)器再在這條鏈接上可靠地傳輸數(shù)據(jù) 客戶機發(fā)出請求 服務(wù)器監(jiān)聽來自客戶機的請求 并為客戶機提供響應(yīng)服務(wù) 這就是典型的 請求 應(yīng)答 模式 下面是客戶機 服務(wù)器的一個典型運作過程 服務(wù)器監(jiān)聽相應(yīng)端口的輸入 客戶機發(fā)出一個請求 服務(wù)器接收到此請求 服務(wù)器處理這個請求 并把結(jié)果返回給客戶機 重復(fù)上述過程 直至完成一次會話過程 例11 3 Socket通信的服務(wù)端程序 11 4數(shù)據(jù)報通信11 4 1數(shù)據(jù)報Datagram通訊前面在介紹TCP IP協(xié)議的時候 我們已經(jīng)提到 在TCP IP協(xié)議的傳輸層除了TCP協(xié)議之外還有一個UDP協(xié)議 相比而言UDP的應(yīng)用不如TCP廣泛 幾個標(biāo)準(zhǔn)的應(yīng)用層協(xié)議HTTP FTP SMTP使用的都是TCP協(xié)議 但是 隨著計算機網(wǎng)絡(luò)的發(fā)展 UDP協(xié)議正越來越來顯示出其威力 尤其是在需要很強的實時交互性的場合 如網(wǎng)絡(luò)游戲 視頻會議等 UDP更是顯示出極強的威力 所謂數(shù)據(jù)報 Datagram 就跟日常生活中的郵件系統(tǒng)一樣 是不能保證可靠的寄到的 而面向鏈接的TCP就好比電話 雙方能肯定對方接受到了信息 11 4 2Datagram通訊的表示方法 DatagramSocket DatagramPacket包中提供了兩個類DatagramSocket和DatagramPacket用來支持?jǐn)?shù)據(jù)報通信 DatagramSocket用于在程序之間建立傳送數(shù)據(jù)報的通信連接 DatagramPacket則用來表示一個數(shù)據(jù)報 先來看一下DatagramSocket的構(gòu)造方法 DatagramSocket DatagramSocket intprot DatagramSocket intport InetAddressladdr 其中 port指明socket所使用的端口號 如果未指明端口號 則把socket連接到本地主機上一個可用的端口 laddr指明一個可用的本地地址 給出端口號時要保證不發(fā)生端口沖突 否則會生成SocketException類例外 注意 上述的兩個構(gòu)造方法都聲明拋棄非運行時例外SocketException 程序中必須進行處理 或者捕獲 或者聲明拋棄 用數(shù)據(jù)報方式編寫client server程序時 無論在客戶方還是服務(wù)方 首先都要建立一個DatagramSocket對象 用來接收或發(fā)送數(shù)據(jù)報 然后使用DatagramPacket類對象作為傳輸數(shù)據(jù)的載體 下面看一下DatagramPacket的構(gòu)造方法 DatagramPacket bytebuf intlength DatagramPacket bytebuf intlength InetAddressaddr intport DatagramPacket byte buf intoffset intlength DatagramPacket byte buf intoffset intlength InetAddressaddress intport 其中 buf中存放數(shù)據(jù)報數(shù)據(jù) length為數(shù)據(jù)報中數(shù)據(jù)的長度 addr和port旨明目的地址 offset指明了數(shù)據(jù)報的位移量 在接收數(shù)據(jù)前 應(yīng)該采用上面的第一種方法生成一個DatagramPacket對象 給出接收數(shù)據(jù)的緩沖區(qū)及其長度 然后調(diào)用DatagramSocket的方法receive 等待數(shù)據(jù)報的到來 receive 將一直等待 直到收到一個數(shù)據(jù)報為止 用數(shù)據(jù)報方式編寫client server程序時 無論在客戶方還是服務(wù)方 首先都要建立一個DatagramSocket對象 用來接收或發(fā)送數(shù)據(jù)報 然后使用DatagramPacket類對象作為傳輸數(shù)據(jù)的載體 下面看一下DatagramPacket的構(gòu)造方法 DatagramPacket bytebuf intlength DatagramPacket bytebuf intlength InetAddressaddr intport DatagramPacket byte buf intoffset intlength DatagramPacket byte buf intoffset intlength InetAddressaddress intport 其中 buf中存放數(shù)據(jù)報數(shù)據(jù) length為數(shù)據(jù)報中數(shù)據(jù)的長度 addr和port旨明目的地址 offset指明了數(shù)據(jù)報的位移量 在接收數(shù)據(jù)前 應(yīng)該采用上面的第一種方法生成一個DatagramPacket對象 給出接收數(shù)據(jù)的緩沖區(qū)及其長度 然后調(diào)用DatagramSocket的方法receive 等待數(shù)據(jù)報的到來 receive 將一直等待 直到收到一個數(shù)據(jù)報為止 發(fā)送數(shù)據(jù)前 也要先生成一個新的DatagramPacket對象 這時要使用上面的第二種構(gòu)造方法 在給出存放發(fā)送數(shù)據(jù)的緩沖區(qū)的同時 還要給出完整的目的地址 包括IP地址和端口號 發(fā)送數(shù)據(jù)是通過DatagramSocket的方法send 實現(xiàn)的 send 根據(jù)數(shù)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論