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

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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)論