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

下載本文檔

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

文檔簡介

第9章網(wǎng)絡(luò)編程《Java基礎(chǔ)案例教程》(第3版)學(xué)習(xí)目標(biāo)/Target熟悉InetAddress類的使用,能夠使用InetAddress類的常用方法獲取和操作IP地址信息了解網(wǎng)絡(luò)通信協(xié)議,能夠簡述TCP/IP參考模型的4個層次了解IP地址和端口號,能夠簡述IP地址和端口號的作用及表示形式學(xué)習(xí)目標(biāo)/Target掌握基于UDP的網(wǎng)絡(luò)編程,能夠使用DatagramPacket類和DatagramSocket類編寫UDP通信程序掌握基于TCP的網(wǎng)絡(luò)編程,能夠使用ServerSocket累和Socket類編寫TCP通信程序了解UDP與TCP,能夠簡述UDP與TCP各自的特點章節(jié)概述/

Summary計算機(jī)網(wǎng)絡(luò)已經(jīng)成為人們工作和生活中不可或缺的一部分,通過網(wǎng)絡(luò)互連的計算機(jī)可以完成信息傳遞、資源共享和協(xié)通工作等。而計算機(jī)之間要進(jìn)行通信,需要通過網(wǎng)絡(luò)程序來實現(xiàn)。下面將對網(wǎng)絡(luò)編程的相關(guān)知識進(jìn)行詳細(xì)講解。目錄/Contents0102網(wǎng)絡(luò)編程基礎(chǔ)基于UDP的網(wǎng)絡(luò)編程03基于TCP的網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程9.19.1網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程與傳統(tǒng)的本地編程有顯著區(qū)別,網(wǎng)絡(luò)編程是基于計算機(jī)網(wǎng)絡(luò)實現(xiàn)各種功能,需要考慮計算機(jī)之間的通信和數(shù)據(jù)交換。對此,在學(xué)習(xí)網(wǎng)絡(luò)編程之前,了解網(wǎng)絡(luò)編程的基礎(chǔ)知識是非常重要的,下面將對網(wǎng)絡(luò)編程的基礎(chǔ)知識進(jìn)行講解。9.1.1網(wǎng)絡(luò)編程概述

先定一個小目標(biāo)!了解網(wǎng)絡(luò)編程概述,能夠簡述網(wǎng)絡(luò)編程是什么,以及常見的網(wǎng)絡(luò)通信架構(gòu)9.1.1網(wǎng)絡(luò)編程概述網(wǎng)絡(luò)編程是一種編程方式,主要涉及網(wǎng)絡(luò)協(xié)議、套接字編程和數(shù)據(jù)傳輸?shù)燃夹g(shù)?;诰W(wǎng)絡(luò)編程可以實現(xiàn)應(yīng)用程序與網(wǎng)絡(luò)中其他設(shè)備上的應(yīng)用程序之間的交互,實現(xiàn)計算機(jī)網(wǎng)絡(luò)中各設(shè)備間的通信和數(shù)據(jù)交換。網(wǎng)絡(luò)編程廣泛應(yīng)用于互聯(lián)網(wǎng)、局域網(wǎng)、內(nèi)網(wǎng)等不同范圍的網(wǎng)絡(luò)環(huán)境中,可用于創(chuàng)建各種應(yīng)用系統(tǒng)和服務(wù)端程序。9.1.1網(wǎng)絡(luò)編程概述網(wǎng)絡(luò)編程之前,通常需要先考慮網(wǎng)絡(luò)通信的架構(gòu),網(wǎng)絡(luò)通信架構(gòu)決定了應(yīng)用程序之間如何進(jìn)行通信的方式和模式。常見的網(wǎng)絡(luò)通信架構(gòu)包括CS(Client/Server,客戶端/服務(wù)器)架構(gòu)和BS(Browser/Server,瀏覽器/服務(wù)器)架構(gòu),下面對這兩種架構(gòu)分別進(jìn)行講解。9.1.1網(wǎng)絡(luò)編程概述1.CS架構(gòu)CS架構(gòu)需要用戶在計算機(jī)或手機(jī)上安裝客戶端程序,在客戶端中通過客戶端程序向服務(wù)器發(fā)送請求,并接受服務(wù)器返回的數(shù)據(jù)信息。由于客戶端程序是自主開發(fā)的,因此可以根據(jù)具體需求進(jìn)行優(yōu)化和定制,更好地滿足復(fù)雜計算和數(shù)據(jù)處理的需求。此外,CS架構(gòu)還可以更好地支持分布式系統(tǒng)和多用戶環(huán)境,適用于需要高度交互和實時響應(yīng)的應(yīng)用系統(tǒng)。CS架構(gòu)的結(jié)構(gòu)如下圖所示。9.1.1網(wǎng)絡(luò)編程概述2.BS架構(gòu)BS架構(gòu)是一種廣泛應(yīng)用于Web領(lǐng)域的網(wǎng)絡(luò)通信架構(gòu)。在BS架構(gòu)中無須開發(fā)客戶端程序,而是以Web瀏覽器作為客戶端,用戶只需要通過瀏覽器輸入網(wǎng)址或單擊鏈接,發(fā)起訪問請求,服務(wù)器就會將相應(yīng)的數(shù)據(jù)以網(wǎng)頁的形式返回給瀏覽器,用戶可以直接在頁面上查看和操作。BS架構(gòu)的優(yōu)點在于,它提供了良好的跨平臺性和可訪問性。此外,客戶端軟件是通用的Web瀏覽器,其更新和維護(hù)成本相對較低。9.1.1網(wǎng)絡(luò)編程概述BS架構(gòu)和CS架構(gòu)是兩種不同的網(wǎng)絡(luò)架構(gòu)模式,它們有各自的優(yōu)缺點,選擇網(wǎng)絡(luò)通信架構(gòu)取決于應(yīng)用程序的需求和特點。如果應(yīng)用程序需要面向廣大用戶,跨平臺訪問,并且主要涉及展示和交互,那么BS架構(gòu)是一個不錯的選擇。而如果應(yīng)用程序需要進(jìn)行復(fù)雜的計算和數(shù)據(jù)處理,并且對性能有較高要求,那么CS架構(gòu)可能更適合。9.1.2IP地址和端口號熟悉IP地址和端口號,能夠簡述IP地址和端口號的作用及表示形式

先定一個小目標(biāo)!9.1.2IP地址和端口號1.IP地址IP(InternetProtocol,互聯(lián)網(wǎng)協(xié)議)地址是互聯(lián)網(wǎng)協(xié)議提供的一種統(tǒng)一的地址格式,用于唯一標(biāo)識網(wǎng)絡(luò)中的通信實體,網(wǎng)絡(luò)中的請求可以根據(jù)這個標(biāo)識找到具體的通信實體?;ヂ?lián)網(wǎng)協(xié)議有多個版本:IPv4(Internet

Protocol

version

4,互聯(lián)網(wǎng)協(xié)議第4版),由4個字節(jié)大小的二進(jìn)制數(shù)表示IP地址。由于二進(jìn)制形式表示的IP地址不便于記憶和處理,因此通常會將IP地址寫成十進(jìn)制形式,每個字節(jié)用一個十進(jìn)制數(shù)字(0~255)表示,數(shù)字之間用符號.分隔。IPv6(Internet

Protocol

version

6,互聯(lián)網(wǎng)協(xié)議第6版),使用16個字節(jié)表示IP地址,它所擁有的地址容量約是IPv4的8×1028倍,達(dá)到2128個。9.1.2IP地址和端口號1.IP地址在計算機(jī)網(wǎng)絡(luò)中,localhost是一個特殊的主機(jī)名,用于表示本地設(shè)備或計算機(jī)。對應(yīng)IPv4的IP地址是,而對應(yīng)IPv6的IP地址是::1。這些地址被稱為回送地址,它們指向本地機(jī)器自身。當(dāng)程序連接到localhost時,實際上是程序與本地機(jī)器進(jìn)行通信。9.1.2IP地址和端口號1.IP地址Java中提供了InetAddress類用于代表IP地址,該類中提供了一系列與IP地址相關(guān)的方法,用于獲取和操作IP地址信息。需要注意的是,InetAddress類沒有提供公開的構(gòu)造方法,而是提供了靜態(tài)方法來獲取InetAddress對象。InetAddress類的常用方法如下表所示。方法聲明功能描述staticInetAddressgetByName(Stringhost)獲取host對應(yīng)的InetAddress對象,host可以為主機(jī)名或IP地址staticInetAddressgetLocalHost()獲取本地主機(jī)的InetAddress對象StringgetHostName()獲取當(dāng)前IP地址對象的主機(jī)名booleanisReachable(inttimeout)判斷在指定毫秒內(nèi)是否可以連通該IP地址對應(yīng)的主機(jī),連通返回trueStringgetHostAddress()獲取字符串格式的IP地址9.1.2IP地址和端口號1.IP地址下面通過一個案例來演示InetAddress類常用方法的基本使用。Example01.java源代碼9.1.2IP地址和端口號1.IP地址案例的運行結(jié)果如下圖所示。9.1.2IP地址和端口號2.端口號一個通信實體可能同時有多個程序提供服務(wù),實現(xiàn)通信時,需要指定數(shù)據(jù)交給哪個程序處理,這是就需要使用端口。端口是應(yīng)用程序與外界交流的出入口,是一種抽象的軟件結(jié)構(gòu),用于唯一標(biāo)識一個應(yīng)用程序在通信中的位置。通過使用不同的端口號,不同應(yīng)用程序可以在同一個網(wǎng)絡(luò)接口中通信。端口通過端口號進(jìn)行標(biāo)記,IP地址和端口號的作用如下表所示。9.1.2IP地址和端口號2.端口號端口號用0~65535的整數(shù)表示,端口號通常分為以下三類。公認(rèn)端口:在0~1023之間,被預(yù)先定義用于特定網(wǎng)絡(luò)服務(wù)和應(yīng)用。例如,HTTP使用的端口號為80,F(xiàn)TP使用的端口號為21。注冊端口:在1024~49151之間,通常被分配給用戶進(jìn)程或特定應(yīng)用程序。例如,Tomcat使用的端口號為8080,MySQL使用的端口號為3306。動態(tài)端口:在49152~65535之間,通常被動態(tài)分配給客戶端應(yīng)用程序。動態(tài)分配可以保證不同應(yīng)用之間不會因為端口沖突而發(fā)生通信錯誤。9.1.2IP地址和端口號2.端口號在開發(fā)應(yīng)用程序時,可以選擇使用1024~49151的注冊端口。需要注意的是,同一臺機(jī)器上不能有兩個程序同時使用同一個端口,如果一個應(yīng)用程序嘗試綁定一個已經(jīng)被其他服務(wù)或應(yīng)用占用的端口號,那么當(dāng)前程序?qū)邮 ?.1.3網(wǎng)絡(luò)通信協(xié)議了解網(wǎng)絡(luò)通信協(xié)議,能夠簡述TCP/IP參考模型劃分的4個層次

先定一個小目標(biāo)!9.1.3網(wǎng)絡(luò)通信協(xié)議計算機(jī)網(wǎng)絡(luò)中,位于同一網(wǎng)絡(luò)中的計算機(jī)在進(jìn)行連接和通信時需要遵守一定的規(guī)則,這些規(guī)則被稱為網(wǎng)絡(luò)通信協(xié)議。網(wǎng)絡(luò)通信協(xié)議定義了數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸格式、傳輸速率、傳輸步驟等,通信雙方必須同時遵守才能完成數(shù)據(jù)交互。9.1.3網(wǎng)絡(luò)通信協(xié)議網(wǎng)絡(luò)通信協(xié)議目前主要分為兩個參考模型:OSI參考模型和TCP/IP參考模型。OSI參考模型是由國際標(biāo)準(zhǔn)化組織在20世紀(jì)80年代早期制定的一套規(guī)范集合,旨在促進(jìn)全球范圍內(nèi)計算機(jī)的開放式通信。OSI參考模型采用7層協(xié)議結(jié)構(gòu),這種劃分在實際應(yīng)用中意義不大,反而增加了復(fù)雜性。TCP/IP參考模型將OSI參考模型重新劃分為4個層次,以TCP/IP協(xié)議為核心。TCP/IP參考模型簡化了OSI模型的層次結(jié)構(gòu),并明確定義了各層次的功能和作用使得計算機(jī)網(wǎng)絡(luò)的設(shè)計、實現(xiàn)和管理更加簡單高效。9.1.3網(wǎng)絡(luò)通信協(xié)議TCP/IP參考模型劃分的四個層次具體如下圖所示。9.1.3網(wǎng)絡(luò)通信協(xié)議TCP/IP參考模型劃分的四個層次中,每層分別負(fù)責(zé)不同的通信功能,具體如下。應(yīng)用層:主要為互聯(lián)網(wǎng)中的各種網(wǎng)絡(luò)應(yīng)用提供服務(wù)。在這一層,各種應(yīng)用程序通過使用特定的協(xié)議(如HTTP、FTP等)進(jìn)行網(wǎng)絡(luò)通信。傳輸層:主要為應(yīng)用層實體提供端到端的通信功能。在這一層,主要有兩個重要的協(xié)議:TCP和UDP。網(wǎng)際互聯(lián)層:主要用于將傳輸?shù)臄?shù)據(jù)進(jìn)行分組,將分組數(shù)據(jù)發(fā)送到目標(biāo)計算機(jī)或者網(wǎng)絡(luò)。在這一層,主要使用的有IP和IGMP等協(xié)議。網(wǎng)絡(luò)接入層:主要負(fù)責(zé)監(jiān)視數(shù)據(jù)在主機(jī)和網(wǎng)絡(luò)之間的交換。事實上,TCP/IP參考模型本身并未定義該層的協(xié)議,而由參與互連的各網(wǎng)絡(luò)使用自己的物理層和數(shù)據(jù)鏈路層協(xié)議。9.1.3網(wǎng)絡(luò)通信協(xié)議在TCP/IP參考模型中,網(wǎng)際互聯(lián)層和網(wǎng)絡(luò)接入層主要用于處理網(wǎng)絡(luò)硬件和操作系統(tǒng)級別的功能,這些層次的內(nèi)容超出了Java的設(shè)計范圍。因此,基于CS架構(gòu)進(jìn)行Java網(wǎng)絡(luò)編程時,主要關(guān)注的是傳輸層中的UDP和TCP這兩個協(xié)議。UDP和TCP是面向不同需求的傳輸協(xié)議,應(yīng)用程序可以根據(jù)自身的需求選擇適合的協(xié)議進(jìn)行通信。9.1.3網(wǎng)絡(luò)通信協(xié)議1.UDPUDP是一種無連接的通信協(xié)議,發(fā)送端和接收端在數(shù)據(jù)傳輸時,不建立邏輯連接。UDP具有資源消耗小、通信效率高、延遲低的特點,通常在音頻、視頻和普通數(shù)據(jù)傳輸中使用。例如,視頻會議通常使用UDP,即使偶爾丟失一兩個數(shù)據(jù)包,也不會對接收結(jié)果產(chǎn)生太大影響。然而,由于UDP無法保證數(shù)據(jù)的完整性,在傳輸重要數(shù)據(jù)時不建議使用UDP。9.1.3網(wǎng)絡(luò)通信協(xié)議2.TCPTCP是一種面向連接的通信協(xié)議,即在傳輸數(shù)據(jù)之前,發(fā)送端和接收端先建立邏輯連接,然后再傳輸數(shù)據(jù)。TCP確保了計算機(jī)之間可靠、無差錯地數(shù)據(jù)傳輸。相比UDP,TCP的傳輸速度較慢,但傳輸?shù)臄?shù)據(jù)更加可靠,TCP可以確保傳輸?shù)臄?shù)據(jù)在發(fā)送和接收過程中不丟失、不重復(fù)和按順序到達(dá),保證了傳輸數(shù)據(jù)的安全性和完整性。因此,TCP在文件傳輸、金融產(chǎn)品等數(shù)據(jù)通信領(lǐng)域得到廣泛應(yīng)用。9.1.3網(wǎng)絡(luò)通信協(xié)議2.TCP在TCP連接中,需要明確客戶端和服務(wù)器端的角色。連接的建立需要經(jīng)過“三次握手”,其過程如下圖所示。基于UDP的網(wǎng)絡(luò)編程9.29.2基于UDP的網(wǎng)絡(luò)編程掌握基于UDP的網(wǎng)絡(luò)編程,能夠使用DatagramPacket和DatagramSocket類編寫UDP通信程序

先定一個小目標(biāo)!9.2基于UDP的網(wǎng)絡(luò)編程基于UDP通信的過程就像是貨運公司在兩個碼頭間發(fā)送貨物一樣,在碼頭發(fā)送和接收貨物需要使用集裝箱來裝載貨物。JDK提供了DatagramPacket類,該類實例對象相當(dāng)于一個集裝箱,用于承載發(fā)送或接收的數(shù)據(jù)。此外,JDK還提供了DatagramSocket類,該類的作用類似于碼頭,其實例對象可以發(fā)送和接收Datagrampacket數(shù)據(jù)報?;赨DP通信的過程如下圖所示。9.2基于UDP的網(wǎng)絡(luò)編程DatagramPacket類用于封裝UDP通信中的數(shù)據(jù),DatagramPacket對象也稱為報文對象。在發(fā)送端和接收端創(chuàng)建DatagramPacket對象時,使用的構(gòu)造方法有所不同。接收端的DatagramPacket對象只需要接收一個字節(jié)數(shù)組來存放接收到的數(shù)據(jù),而發(fā)送端的DatagramPacket對象不但要存放被發(fā)送的數(shù)據(jù),還需要指定數(shù)據(jù)的目標(biāo)IP地址和端口號。1.DatagramPacket類9.2基于UDP的網(wǎng)絡(luò)編程DatagramPacket類常用的構(gòu)造方法如下。DatagramPacket(byte[]buf,intlength):接收長度為length的數(shù)據(jù)包,其中l(wèi)ength參數(shù)必須小于或等于buf參數(shù)的長度。DatagramPacket(byte[]buf,intoffset,intlength):offset參數(shù)用于指定傳入數(shù)據(jù)包緩沖區(qū)buf的偏移量為offset,即從offset位置開始接收數(shù)據(jù)。DatagramPacket(byte[]buf,intlength,InetAddressaddr,intport):將數(shù)據(jù)包數(shù)據(jù)buf中l(wèi)ength長度的數(shù)據(jù)發(fā)送到指定主機(jī)的指定端口號。DatagramPacket(byte[]buf,intoffset,intlength,InetAddressaddr,intport):offset參數(shù)用于指定一個數(shù)組中發(fā)送數(shù)據(jù)的偏移量為offset,即從offset位置開始發(fā)送數(shù)據(jù)。1.DatagramPacket類9.2基于UDP的網(wǎng)絡(luò)編程DatagramPacket類提供了一些用于操作UDP通信的方法,其中常用的方法如下表所示。1.DatagramPacket類方法聲明功能描述InetAddressgetAddress()用于獲取發(fā)送端或者接收端的IP地址intgetPort()用于獲取發(fā)送端或者接收端的端口號byte[]getData()用于獲取將要發(fā)送或者接收到的數(shù)據(jù)intgetLength()用于獲取將要發(fā)送或者接收到的數(shù)據(jù)的長度9.2基于UDP的網(wǎng)絡(luò)編程DatagramSocket類用于創(chuàng)建基于UDP通信時的發(fā)送端對象和接收端對象,該類提供了多個構(gòu)造方法用于創(chuàng)建發(fā)送端對象和接收端對象。常用構(gòu)造方法如下:DatagramSocket():創(chuàng)建一個未綁定到任何地址和端口的DatagramSocket對象。DatagramSocket(intport):創(chuàng)建一個綁定到指定端口的DatagramSocket對象。DatagramSocket(intport,InetAddressaddr):創(chuàng)建一個綁定到指定地址addr和端口port的

DatagramSocket

對象。2.DatagramSocket類9.2基于UDP的網(wǎng)絡(luò)編程DatagramSocket類提供了發(fā)送和接收UDP數(shù)據(jù)報的一系列方法,其中常用的方法如下表所示。2.DatagramSocket類方法聲明功能描述voidreceive(DatagramPacketp)用于接收DatagramPacket數(shù)據(jù)報,在接收到數(shù)據(jù)之前會一直處于阻塞狀態(tài),如果發(fā)送消息的長度比數(shù)據(jù)報長,則消息將會被截取voidsend(DatagramPacketp)用于發(fā)送DatagramPacket數(shù)據(jù)報,發(fā)送的數(shù)據(jù)報中包含將要發(fā)送的數(shù)據(jù)、數(shù)據(jù)的長度、目標(biāo)主機(jī)的IP地址和端口號voidclose()關(guān)閉當(dāng)前的Socket,通知驅(qū)動程序釋放為這個Socket保留的資源9.2基于UDP的網(wǎng)絡(luò)編程下面通過一個案例演示如何實現(xiàn)UDP通信。在一個完整的UDP通信過程中,至少需要一個發(fā)送端和一個接收端。本案例演示的為一個發(fā)送端和一個接收端的通信情況。首先編寫接收端程序。案例演示UDPServer.java源代碼9.2基于UDP的網(wǎng)絡(luò)編程運行文件UDPServer.java,結(jié)果如下圖所示。案例演示9.2基于UDP的網(wǎng)絡(luò)編程接著編寫發(fā)送端程序,用于給接收端發(fā)送數(shù)據(jù)。案例演示UDPClient.java源代碼9.2基于UDP的網(wǎng)絡(luò)編程再運行文件UDPClient.java,結(jié)果如下圖所示案例演示9.2基于UDP的網(wǎng)絡(luò)編程客戶端程序啟動后將消息成功發(fā)送出去,此時接收端程序就會收到發(fā)送端發(fā)送的數(shù)據(jù)而結(jié)束阻塞狀態(tài),并輸出接收端數(shù)據(jù),如下圖所示。案例演示基于TCP的網(wǎng)絡(luò)編程9.39.3基于TCP的網(wǎng)絡(luò)編程相對于UDP,TCP傳輸數(shù)據(jù)更可靠,當(dāng)需要滿足對數(shù)據(jù)傳輸可靠性要求較高的需求時,基于TCP編程可以實現(xiàn)更高質(zhì)量的數(shù)據(jù)傳輸,下面將對基于TCP的網(wǎng)絡(luò)編程相關(guān)知識進(jìn)行講解。TCP通信掌握TCP通信,能夠使用ServerSocket和Socket類編寫TCP通信程序

先定一個小目標(biāo)!TCP通信TCP通信嚴(yán)格區(qū)分客戶端和服務(wù)器端。JDK中提供了Socket類和ServerSocket類分別表示客戶端和服務(wù)器端。基于TCP編寫程序時,先創(chuàng)建一個服務(wù)器端的ServerSocket對象,開啟一個服務(wù)并等待客戶端連接;然后創(chuàng)建一個客戶端的Socket對象,并向服務(wù)器端發(fā)送連接請求;服務(wù)器端接收到請求后雙方建立連接,便可以正式進(jìn)行通信?;赥CP通信時,需要由客戶端去連接服務(wù)器端,而服務(wù)器端不能主動連接客戶端,Socket和ServerSocket通信過程如下圖所示。TCP通信ServerSocket類的主要作用是接收客戶端的連接請求,它提供了多個構(gòu)造方法用于創(chuàng)建服務(wù)器端對象,常用的構(gòu)造方法如下所示。ServerSocket():創(chuàng)建一個不與任何端口綁定的ServerSocket對象,默認(rèn)沒有監(jiān)聽任何端口,不能接收客戶端的連接請求。需要調(diào)用bind(SocketAddressendpoint)方法將其綁定到指定的端口號后,監(jiān)聽指定的端口,并接受客戶端的連接請求。ServerSocket(intport):創(chuàng)建一個ServerSocket對象,并在指定的port端口上監(jiān)聽連接請求。ServerSocket(intport,intbacklog):backlog參數(shù)用于指定最大連接數(shù)。ServerSocket(intport,intbacklog,InetAddressbindAddr):bindAddr參數(shù)用于指定監(jiān)聽發(fā)出連接請求的客戶端的IP地址。1.ServerSocket類TCP通信ServerSocket類提供了一些用于監(jiān)聽來自客戶端的連接請求和建立與客戶端通信通道的方法,常用方法如下表所示。1.ServerSocket類方法名稱功能描述Socketaccept()用于等待客戶端的連接請求,在客戶端完成連接之前會一直處于阻塞狀態(tài),當(dāng)有客戶端連接到服務(wù)器端時,就會返回一個與之對應(yīng)的Socket對象InetAddressgetInetAddress()用于獲取ServerSocket對象所綁定的IP地址booleanisClosed()該方法用于判斷ServerSocket對象是否為關(guān)閉狀態(tài),如果是關(guān)閉狀態(tài)則返回true,否則返回falsevoidbind(SocketAddressendpoint)用于將ServerSocket對象綁定到指定的IP地址和端口號,其中參數(shù)endpoint封裝了IP地址和端口號TCP通信Socket類用于建立客戶端與服務(wù)器之間的連接,可以通過該連接進(jìn)行數(shù)據(jù)傳輸。在客戶端程序中,通常需要先創(chuàng)建一個Socket對象來與服務(wù)器建立連接,然后再使用該對象的輸入輸出流來發(fā)送和接收數(shù)據(jù)。Socket類常用的構(gòu)造方法如下所示。Socket():創(chuàng)建一個沒有指定IP地址和端口號的Socket對象。(只創(chuàng)建了客戶端對象,并不會建立實際的連接)。Socket(Stringhost,intport):根據(jù)指定的主機(jī)名host和端口號port創(chuàng)建一個Socket對象。Socket(InetAddressaddress,intport):該方法在使用上與第2個構(gòu)造方法類似,根據(jù)指定的服務(wù)器地址address和端口號port創(chuàng)建一個Socket對象。2.Socket類TCP通信Socket類提供了一些方法用于與服務(wù)器端進(jìn)行通信,其中常用的方法如下表所示。2.Socket類方法聲明功能描述intgetPort()用于獲取Socket對象與服務(wù)器端連接的端口號SocketAddress

getRemoteSocketAddress()用于獲取與Socket對象連接的遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)地址,返回一個

SocketAddress

對象voidclose()用于關(guān)閉Socket連接,結(jié)束本次通信。InputStreamgetInputStream()用于獲取與當(dāng)前Socket關(guān)聯(lián)的InputStream對象,讀取發(fā)送過來的數(shù)據(jù)。OutputStreamgetOutputStream()用于獲取與當(dāng)前Socket關(guān)聯(lián)的OutputStream對象,向遠(yuǎn)程主機(jī)發(fā)送數(shù)據(jù)。TCP通信當(dāng)客戶端和服務(wù)器端建立連接后,數(shù)據(jù)以I/O流的形式進(jìn)行交互,從而實現(xiàn)通信??蛻舳撕头?wù)器端的數(shù)據(jù)傳輸如圖下圖所示。2.Socket類TCP通信下面對TCP通信的步驟進(jìn)行說明。客戶端和服務(wù)器端分別創(chuàng)建一個Socket對象,用于建立數(shù)據(jù)通信的管道,這樣在客戶端和服務(wù)器端都有一個Socket對象來訪問該通信管道。客戶端向服務(wù)器端發(fā)送數(shù)據(jù)時,先通過Socket對象獲取一個字節(jié)輸出流,然后使用字節(jié)輸出流將數(shù)據(jù)寫入服務(wù)器端。服務(wù)器端通過Socket對象獲取字節(jié)輸入流,然后使用字節(jié)輸入流讀取客戶端發(fā)送過來的數(shù)據(jù),并對數(shù)據(jù)進(jìn)行處理。服務(wù)器端處理完數(shù)據(jù)后,如果需要返回信息給客戶端,服務(wù)器端可以通過Socket對象獲取一個字節(jié)輸出流,并將數(shù)據(jù)寫入客戶端??蛻舳嗽俅瓮ㄟ^Socket對象獲取輸入流,使用字節(jié)輸入流讀取服務(wù)器端發(fā)送過來的數(shù)據(jù)。TCP通信下面通過一個案例演示如何實現(xiàn)TCP通信。在一個完整的TCP通信過程中,至少需要一個客戶端和一個服務(wù)器端。首先編寫服務(wù)器端程序,在服務(wù)器端程序中等待客戶端的連接請求,并在獲取到客戶端連接請求后,獲取并在控制臺中輸出客戶端發(fā)送過來的數(shù)據(jù);然后發(fā)送一些數(shù)據(jù)到客戶端。TCPServer.java源代碼案例演示TCP通信運行文件TCPServer.java,運行結(jié)果如下圖所示。案例演示TCP通信下面編寫客戶端程序,在客戶端程序中向服務(wù)器端發(fā)送數(shù)據(jù),然后獲取服務(wù)器端發(fā)送過來的數(shù)據(jù),并輸出到控制臺。案例演示TCPClient.java源代碼TCP通信運行文件TCPClient.java,運行結(jié)果如下圖所示。案例演示TCP通信客戶端啟動后客戶端往服務(wù)器端發(fā)送信息,客戶端創(chuàng)建的Socket對象與服務(wù)器端建立連接,通過Soc

溫馨提示

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

最新文檔

評論

0/150

提交評論