




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第12章網(wǎng)絡程序設(shè)計主講人:本章將介紹Java網(wǎng)絡通信原理,重點介紹4個重要的類:URL、Socket、InetAddress、DatagramSocket,講解它們在網(wǎng)絡編程中的重要作用,詳細討論與之相關(guān)的類及其使用方法,并給出一個“客戶/服務器”通信程序。Java支持TCP和UDP協(xié)議族。TCP用于網(wǎng)絡的可靠的流式輸入/輸出。UDP支持更簡單的、快速的、點對點的數(shù)據(jù)報模式。
12.1網(wǎng)絡通信基礎(chǔ)12.2URL程序設(shè)計12.3TCP程序設(shè)計12.4UDP程序設(shè)計小結(jié)內(nèi)容簡介12.1網(wǎng)絡通信基礎(chǔ)12.1.1網(wǎng)絡通信基本概念12.1.2TCP協(xié)議和UDP協(xié)議12.1.3Java網(wǎng)絡程序設(shè)計技術(shù)D.Descriptionofthecontents12.1.1網(wǎng)絡通信基本概念
計算機網(wǎng)絡是指通過各種通信設(shè)備連接起來的、支持特定網(wǎng)絡通信協(xié)議的、許許多多的計算機或計算機系統(tǒng)的集合。網(wǎng)絡通信是指網(wǎng)絡中的計算機通過網(wǎng)絡互相傳遞信息。通信協(xié)議是網(wǎng)絡通信的基礎(chǔ)。通信協(xié)議是網(wǎng)絡中計算機之間進行通信時共同遵守的規(guī)則。不同的通信協(xié)議用不同的方法解決不同類型的通信問題。常用的通信協(xié)議有HTTP,F(xiàn)TP,TCP/IP等。12.1.1網(wǎng)絡通信基本概念為了實現(xiàn)網(wǎng)絡上不同機器之間的通信著重介紹端口號域名地址IP地址12.1.1網(wǎng)絡通信基本概念I(lǐng)P地址
IP地址是計算機網(wǎng)絡中任意一臺計算機地址的唯一標識。知道了網(wǎng)絡中某一臺主機的IP地址,就可以定位這臺計算機。通過這種地址標識,網(wǎng)絡中的計算機可以互相定位和通信。目前,IP地址有兩種格式,即IPV4格式和IPV6格式。
IPV4是由4個字節(jié)數(shù)組成,中間以小數(shù)點分隔。
IPV6是由16個字節(jié)組成,中間以冒號分隔。
12.1.1網(wǎng)絡通信基本概念域名地址
域名地址是計算機網(wǎng)絡中一臺主機的標識名,也可以看做是IP地址的助記名。在Internet上,一個域名地址可以有多個IP地址與之相對應,一個IP地址也可以對應多個域名。通過主機名到IP地址的解析,可以由主機名得到對應的IP地址。在訪問網(wǎng)上資源時,一般只需記住服務器的主機名就可以了。因為網(wǎng)絡中的域名解析服務器可以根據(jù)主機名查出對應的IP地址。有了服務器的IP地址,就可以訪問這個網(wǎng)站了。12.1.1網(wǎng)絡通信基本概念端口號
一臺主機上允許有多個進程,這些進程都可以和網(wǎng)絡上的其他計算機進行通信。更準確地說,網(wǎng)絡通信的主體不是主機,而是主機中運行的進程。端口就是為了在一臺主機上標識多個進程而采取的一種手段。主機名(或IP地址)和端口的組合能唯一確定網(wǎng)絡通信的主體——進程。端口(port)是網(wǎng)絡通信時同一主機上的不同進程的標識。
12.1.2TCP協(xié)議和UDP協(xié)議1TCP(TransferControlProtocol的簡稱)協(xié)議是一種面向連接的、可以提供可靠傳輸?shù)膮f(xié)議。使用T‘CP協(xié)議傳輸數(shù)據(jù),接收端得到的是一個和發(fā)送端發(fā)出的完全一樣的數(shù)據(jù)流。2UDP(UserDatagramProtocol的簡稱)是一種無連接的協(xié)議,它傳輸?shù)氖且环N獨立的數(shù)據(jù)報(Datagram)。每個數(shù)據(jù)報都是一個獨立的信息,包括完整的源地址或目的地址。12.1.2TCP協(xié)議和UDP協(xié)議
使用UDP協(xié)議時,每個數(shù)據(jù)報中都給出了完整的地址信息,因此無須建立發(fā)送方和接收方的連接。使用TCP協(xié)議時,在Socket之間進行數(shù)據(jù)傳輸之前必然要建立連接。
UDP協(xié)議是一個不可靠的協(xié)議,發(fā)送方所發(fā)送的數(shù)據(jù)報并不一定以相同的次序到達接收方,有可能會丟失。而TCP是一個可靠的協(xié)議,它確保接收方完全正確地獲取發(fā)送方所發(fā)送的全部數(shù)據(jù)。0102使用UDP協(xié)議傳輸數(shù)據(jù)是有大小限制的,每個被傳輸?shù)臄?shù)據(jù)報必須限定在64KB之內(nèi)。而TCP協(xié)議沒有這方面的限制,一旦連接建立起來,雙方的Socket就可以按統(tǒng)一的格式傳輸大量的數(shù)據(jù)。03兩種協(xié)議的比較12.1.3Java網(wǎng)絡程序設(shè)計技術(shù)
URL編程技術(shù)
TCP編程技術(shù)
UDP編程技術(shù)
URL表示了Internet上某個資源的地址。通過URL標識,可以直接使用各種通信協(xié)議獲取遠端計算機上的資源信息,方便快捷地開發(fā)Internet應用程序。UDP是無連接的快速通信技術(shù),數(shù)據(jù)報通信不需要建立連接,通信時所傳輸?shù)臄?shù)據(jù)報能否到達目的地、到達的時間、到達的次序都不能準確知道。TCP是可靠的連接通信技術(shù),主要使用套接字(Socket)機制。TCP通信是使用TCP/IP協(xié)議、建立在穩(wěn)定連接基礎(chǔ)上的、以流傳輸數(shù)據(jù)的通信方式。12.2URL程序設(shè)計12.2.1URL和URL類112.2.2URLConnection類212.2.3InetAddress類312.2.1URL和URL類2.+
3.1、URL的格式傳輸協(xié)議名://主機名:端口號/件名#引用傳輸協(xié)議名”指定獲取資源所使用的傳輸協(xié)議,如http協(xié)議;“主機名”是網(wǎng)絡中的計算機名或IP地址;“端口號”是計算機中代表一個服務的進程的編號;“文件名”是服務器上包括路徑的文件名稱;“引用”是文件中的標記,可用于同一個文件中不同位置的跳轉(zhuǎn)。12.2.1URL和URL類2、URL類URL類是Java語言提供的支持URL編程的基礎(chǔ)類,其類路徑是.URL。
構(gòu)造方法:URL(Stringspec):該構(gòu)造方法根據(jù)指定的字符串創(chuàng)建URL對象。如果字符串指定了未知協(xié)議,則拋出MalformedURLException異常。URL(Stringprotocol,Stringhost,Stringfile):該構(gòu)造方法根據(jù)指定的protocol名稱、host名稱和file名稱創(chuàng)建URL。URL(Stringprotocol,Stringhost,intport,Stringfile):該構(gòu)造方法根據(jù)指定protocol、host、port號和file創(chuàng)建URL對象。12.2.1URL和URL類【例1】使用URL類獲取遠端主機上指定文件的內(nèi)容。創(chuàng)建一個參數(shù)為“/index.html”
的URL對象,然后讀取這個對象的文件。
程序12.2.2URLConnection類1234TEXTTEXTTEXTTEXT應用程序和URL建立連接的步驟:通過在URL上調(diào)用openConnection方法創(chuàng)建連接對象
處理設(shè)置參數(shù)和一般請求屬性。遠程對象變?yōu)榭捎?。遠程對象的頭字段和內(nèi)容變?yōu)榭稍L問。
使用connect方法建立到遠程對象的實際連接12.2.2URLConnection類URLConnection類的幾個主要變量如下1、URLConnection類的幾個主要變量如下
connected
url2、URLConnection類的構(gòu)造方法如下
URLConnection(URLurl):創(chuàng)建參數(shù)為url的URLConnection對象。12.2.2URLConnection類3.URLConnection類的幾個主要方法如下
ObjectgetContent(),獲取此URL連接的內(nèi)容。StringgetContentEncoding(),返回該URL引用的資源的內(nèi)容編碼。intgetContentLength(),返回此連接的URL引用的資源的內(nèi)容長度。StringgetContentType(),返回該URL引用的資源的內(nèi)容類型。URLgetURL():返回此URLConnection的URL字段的值。InputStreamgetInputSTream():返回從所打開連接讀數(shù)據(jù)的輸入流。OutputStreamgetOutputSTream():返回向所打開連接寫數(shù)據(jù)的輸出流。publicvoidsetConnectTimeout(inttimeout):設(shè)置一個指定的超時值(以毫秒為單位)。12.2.2URLConnection類【例2】使用URLConnection類獲取Web頁面信息。功能實現(xiàn):使用URLConnection顯示網(wǎng)址“/index.htm”相關(guān)信息。源程序如下。程序域名地址IP地址互聯(lián)網(wǎng)上表示一個主機的地址有兩種方式
12.2.3InetAddress類12.2.3InetAddress類InetAddress類正是用來表示主機地址的,常用方法如下:staticInetAddressgetByAddress(byte[]addr):在給定原始IP地址的情況下,返回InetAddress對象。
staticInetAddressgetByAddress(Stringhost,byte[]addr):根據(jù)提供的主機名和IP地址創(chuàng)建InetAddress。staticInetAddressgetByName(Stringhost):在給定主機名的情況下確定主機的IP地址。
staticInetAddressgetLocalHost():返回本地主機。
byte[]getAddress():返回此InetAddress對象的原始IP地址。
StringgetHostAddress():返回IP地址字符串(以文本表現(xiàn)形式)。
StringgetHostName():獲取此IP地址的主機名。
booleanisMulticastAddress():檢查InetAddress是否是IP多播地址。
booleanisReachable(inttimeout):測試是否可以達到該地址。
StringtoString():將此IP地址轉(zhuǎn)換為String。
12.3TCP程序設(shè)計
TCP/IP套接字用于在主機和Internet之間建立可靠的、雙向的、持續(xù)的、點對點的流式連接。套接字用來建立Java的輸入/輸出系統(tǒng)到其他的駐留在本地機或Internet上的任何計算機的程序的連接。運用TCP協(xié)議通信時,客戶機和服務器之間首先需要建立一個連接,然后,客戶機端和服務器端程序各自將一個Socket對象與這個連接綁定,然后,兩端的程序就可以通過和連接綁定的Socket對象來讀寫數(shù)據(jù)了。12.3.1網(wǎng)絡套接字Socket
12.3.2Socket類12.3.3ServerSocket類12.3TCP程序設(shè)計12.3.4C/S程序設(shè)計實例12.3.1網(wǎng)絡套接字Socket服務器端ServerSocket
服務器端的套接字始終在監(jiān)聽是否有連接請求,如果發(fā)現(xiàn)客戶機端Socket.向服務器發(fā)出連接請求,且服務器端Socket向客戶機端Socket發(fā)回“接受”的消息。按照套接字在網(wǎng)絡中的作用分為
客戶機端Socket當客戶機端發(fā)出的建立連接的請求被服務器端接受時,客戶機上就會創(chuàng)建一個Socket對象。利用這個Socket對象,客戶機就可以和服務器進行通信了。12.3.1網(wǎng)絡套接字Socket關(guān)閉Socket對象按協(xié)議對Socket對象讀/寫操作打開連接到Socket對象的輸入/輸出流
創(chuàng)建Socket對象
工作過程包含以下四步
12.3.2Socket類Socket類實現(xiàn)了客戶機端的Socket,Socket對象可以用來向服務器發(fā)出連接請求,并換數(shù)據(jù)。Socket類常用的構(gòu)造方法如下:
Socket(InetAddressaddress,intport)
此方法創(chuàng)建一個主機地址為address、端口號為port的流套接字,例如,以下語句:
Socketmysocket=newSocket("12",2010);創(chuàng)建了一個Socket對象并賦初值,要連接的遠程主機的IP地址是12,端口號是2010。12.3.2Socket類Socket類常用方法如下:InetAddressgetInetAddress():返回套接字連接的地址。
InetAddressgetLocalAddress():獲取套接字綁定的本地地址。
intgetLocalPort():返回此套接字綁定到的本地端口。
SocketAddressgetLocalSocketAddress():返回此套接字綁定的端點的地址,如果尚未綁定則返回null。InputStreamgetInputStream():返回此套接字的輸入流。
OutputStreamgetOutputStream():返回此套接字的輸出流。
intgetPort():返回此套接字連接到的遠程端口。
booleanisBound():返回套接字的綁定狀態(tài)。
booleanisClosed():返回套接字的關(guān)閉狀態(tài)。
booleanisConnected():返回套接字的連接狀態(tài)。
voidconnect(SocketAddressendpoint,inttimeout):將此套接字連接到服務器,并指定一個超時值。
voidclose():關(guān)閉此套接字。12.3.3ServerSocket類ServerSocket()
ServerSocket(intport)
ServerSocket(intport,intbacklog)
ServerSocket類的構(gòu)造方法ServerSocket(intport,intbacklog,InetAddressbindAddr)Voidbind(SocketAddressendpoint):將ServerSocket綁定到特定地址Voidbind(SocketAddressendpoint,intbacklog):在有多個網(wǎng)卡的服務器上,將
ServerSocket綁定到特定地址。voidclose():關(guān)閉此套接字
ServerSocket類的常用方法Socketaccept():偵聽并接受到此套接字的連接12.3.3ServerSocket類12.3.3ServerSocket類intgetLocalPort():返回此套接字在其上偵聽的端口。SocketAddressgetLocalSocketAddress():返回此套接字綁定的端點的地址,如果尚未綁定則返回null。booleanisBound():返回ServerSocket的綁定狀態(tài)。ServerSocket類的常用方法InetAddressgetInetAddress():返回此服務器套接字的本地地址。
ContentsContentsStringtoString():作為String返回此套接字的實現(xiàn)地址和實現(xiàn)端口ServerSocket類的常用方法booleanisClosed():返回ServerSocket的關(guān)閉狀態(tài)。12.3.3ServerSocket類12.3.4C/S程序設(shè)計實例【實例6】模擬用戶存話費和手機漫游的C/S結(jié)構(gòu)應用系統(tǒng)。功能實現(xiàn):手機用戶啟動客戶,向運行服務器軟件的遠端服務員交納手機話費,請求服務員開通異地漫游業(yè)務。程序12.4UDP程序設(shè)計上節(jié)介紹了基于TCP的網(wǎng)絡套接字(Socket)編程技術(shù),可以把套接字形象地比喻為打電話,一方呼叫,另一方負責監(jiān)聽,一旦建立了套接字連接,雙方就可以進行通信了。本節(jié)將介紹Java中基于UDP(UserDatagramProtocol,用戶數(shù)據(jù)報協(xié)議)的網(wǎng)絡信息傳輸方式。與TCP不同,UDP是一種無連接的網(wǎng)絡通信機制,更像郵件或短信息通信方式。12.4UDP程序設(shè)計12.4.2DatagramPacket類12.4.3DatagramSocket類12.4.4MulticastSocket類12.4.1數(shù)據(jù)報通信基本概念12.4.1數(shù)據(jù)報通信基本概念數(shù)據(jù)報(Datagrams)是指起始點和目的地都使用無連接網(wǎng)絡服務的網(wǎng)絡層的信息單元?;赨DP協(xié)議的通信和基于TCP協(xié)議的通信不同,基于UDP協(xié)議的信息傳遞更快,但不提供可靠性保證。也就是說,數(shù)據(jù)在傳輸時,用戶無法知道數(shù)據(jù)能否正確到達目的地主機,也不能確定數(shù)據(jù)到達目的地的順序是否和發(fā)送的順序相同。12.4.1數(shù)據(jù)報通信基本概念Java通過兩個類實現(xiàn)UDP協(xié)議頂層的數(shù)據(jù)報
DatagramPacket
DatagramSocket
12.4.2DatagramPacket類構(gòu)造方法如下:DatagramPacket(byte[]buf,intlength):
DatagramPacket(byte[]buf,intlength,InetAddressaddress,intport)
DatagramPacket(byte[]buf,intoffset,intlength)構(gòu)造數(shù)據(jù)包對象,用來接收長度為length的數(shù)據(jù)包。
構(gòu)造數(shù)據(jù)報包,用來將長度為length的包發(fā)送到指定主機上的指定端口號。構(gòu)造數(shù)據(jù)報包對象,用來接收長度為length的包,在緩沖區(qū)中指定了偏移量。
12.4.2DatagramPacket類DatagramPacket(byte[]buf,intoffset,intlength,InetAddressaddress,intport)
DatagramPacket(byte[]buf,intoffset,intlength,SocketAddressaddress)
DatagramPacket(byte[]buf,intlength,SocketAddressaddress)
構(gòu)造方法如下:將長度為length偏移量為offset的包發(fā)送到指定主機上的指定端口號
將長度為length偏移量為offset的包發(fā)送到指定主機上的指定端口號
構(gòu)造數(shù)據(jù)報包,用來將長度為length的包發(fā)送到指定主機上的指定端口號。
DatagramPacket類的常用方法
byte[]getData()
intgetLength()
intgetPort()
SocketAddressgetSocketAddress()
InetAddressgetAddress()
intgetOffset()
12.4.2DatagramPacket類12.4.2DatagramPacket類DatagramPacket類的常用方法
voidsetData(byte[]buf)
voidsetData(byte[]buf,intoffset,intlength)
voidsetPort(intiport)
voidsetSocketAddress(SocketAddressaddress)
voidsetAddress(InetAddressiaddr)
voidsetLength(intlength)
12.4.3DatagramSocket類DatagramSocket
類的常用方法
voidbind(SocketAddressaddr)
voidclose()
voidconnect(SocketAddressaddr)
voidconnect(InetAddressaddress,intport)12.4.3DatagramSocket類
DatagramSocket
類的常用方法
voiddisconnect()
InetAddressgetInetAddress()
intgetLocalPort()
InetAddressgetLocalAddress()
12.4.3DatagramSocket類
DatagramSocket
類的常用方法
SocketAddressgetLocalSocketAddress()
SocketAddressgetRemoteSocketAddress()
voidsend(DatagramPacketp)
voidreceive(DatagramPacketp)
12.4.3DatagramSocket類【實例8】設(shè)計點對點的快速通信系統(tǒng)功能實現(xiàn):實現(xiàn)局域網(wǎng)內(nèi)兩臺主機之間的通信,要求用圖形界面實現(xiàn)。分析:本系統(tǒng)屬于互為服務器和客戶機的網(wǎng)絡應用系統(tǒng),采用UDP數(shù)據(jù)報編程技術(shù)可以實現(xiàn)快速的點對點通信。圖形用戶界面采用Swing組件來實現(xiàn)。以主機1和主機2表示兩臺主機。程序12.4.4MulticastSoc
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人土地無償贈與合同范本
- 個人家政保潔合同范本
- 制定合同范本 作用
- fidic條件合同范本
- 買賣延期合同范本
- 醫(yī)用機甲租賃合同范本
- 凈水設(shè)備售賣合同范本
- 勞動合同范本藥店
- 出租和諧公寓合同范本
- 修建垃圾臺合同范本
- JCT908-2013 人造石的標準
- ISO9001-2015質(zhì)量管理體系要求培訓教材
- 腦梗死臨床路徑
- 部編人教版二年級下冊道德與法治教學反思
- 第二單元整體研習+教學設(shè)計 統(tǒng)編版高中語文選擇性必修上冊
- 企業(yè)外部環(huán)境與內(nèi)部能力分析報告
- 病理科科科內(nèi)會診記錄
- 研發(fā)費用加計扣除費用PPT
- 小學生分享ppt課件-景區(qū)介紹《牛首山》
- 小學生主題班會 弘揚航天精神 課件 (27張PPT)
- 倫理審查表(一式三份)
評論
0/150
提交評論