Java網(wǎng)絡(luò)編程精解chapter1ppt課件_第1頁
Java網(wǎng)絡(luò)編程精解chapter1ppt課件_第2頁
Java網(wǎng)絡(luò)編程精解chapter1ppt課件_第3頁
Java網(wǎng)絡(luò)編程精解chapter1ppt課件_第4頁
Java網(wǎng)絡(luò)編程精解chapter1ppt課件_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Java網(wǎng)絡(luò)編程精解您可以到以下網(wǎng)址下載本講義的最新版本:/main.jsp?bc=showessay.jsp&id=927引言nJava語言是第一個完全融入網(wǎng)絡(luò)的語言,它之所以適合編寫網(wǎng)絡(luò)應(yīng)用程序,歸功于它的以下優(yōu)勢。n(1Java語言與生俱來就是與平臺無關(guān)的。Java程序能夠運(yùn)行在不同的平臺上,運(yùn)行在不同平臺上的Java程序能夠方便地進(jìn)行網(wǎng)絡(luò)通信。n(2Java語言具有完善的安全機(jī)制,可以對程序進(jìn)行權(quán)限檢查,這對網(wǎng)絡(luò)程序至關(guān)重要。n(3JDK類庫提供了豐富的網(wǎng)絡(luò)類庫,如套接字API、JavaMail API和JDBC API等,大大簡化了網(wǎng)絡(luò)程序的開發(fā)過程。課

2、程內(nèi)容n本課程介紹如何利用Java網(wǎng)絡(luò)類庫來快速便捷地創(chuàng)建網(wǎng)絡(luò)應(yīng)用程序,致力于完成以下任務(wù):n實現(xiàn)訪問HTTP服務(wù)器的客戶程序n實現(xiàn)HTTP服務(wù)器n實現(xiàn)多線程的服務(wù)器,以及非阻塞的服務(wù)器n解析并展示HTML頁面n通過JDBC API訪問數(shù)據(jù)庫n通過JavaMail API接收和發(fā)送電子郵件n利用RMI框架實現(xiàn)分布式的軟件系統(tǒng)n進(jìn)行安全的網(wǎng)絡(luò)通信,對數(shù)據(jù)加密,驗證身份,保證數(shù)據(jù)的完整性利用CORBA和Web服務(wù)實現(xiàn)分布式的軟件系統(tǒng)第1章 Java網(wǎng)絡(luò)編程入門參考的第1章n1.1 進(jìn)程之間的通信n1.2 計算機(jī)網(wǎng)絡(luò)的概念n1.3 OSI參考模型n1.4 TCP/IP參考模型和TCP/IP協(xié)議n1.

3、5 用Java編寫客戶/服務(wù)器程序1.1 進(jìn)程之間的通信n進(jìn)程是指運(yùn)行中的程序,進(jìn)程的任務(wù)就是執(zhí)行程序中的代碼。n客戶程序EchoClient和服務(wù)器程序EchoServer。EchoClient程序有兩個作用:n與用戶交互,從本地控制臺獲得標(biāo)準(zhǔn)輸入流和標(biāo)準(zhǔn)輸出流。n與遠(yuǎn)程的EchoServer通信,向EchoServer發(fā)送用戶輸入的字符串,接收EchoServer返回的響應(yīng)結(jié)果,再把響應(yīng)結(jié)果寫到標(biāo)準(zhǔn)輸出流。nEchoServer程序負(fù)責(zé)接收EchoClient發(fā)送的字符串,然后把響應(yīng)結(jié)果發(fā)送給EchoClient。1.1 進(jìn)程之間的通信上圖演示了EchoClient與EchoServer的

4、通信過程。客戶機(jī)和遠(yuǎn)程服務(wù)器是通過網(wǎng)絡(luò)連接的兩臺主機(jī)。客戶機(jī)上運(yùn)行EchoClient進(jìn)程,遠(yuǎn)程服務(wù)器上運(yùn)行EchoServer進(jìn)程。1.1 進(jìn)程之間的通信n兩個進(jìn)程順利通信的前提條件是它們所在的主機(jī)都連接到了計算機(jī)網(wǎng)絡(luò)上。EchoClient與EchoServer只需關(guān)注它們通信的具體內(nèi)容,例如EchoClient發(fā)送信息“hello”,那么EchoServer返回信息“echo:hello”。nEchoClient和EchoServer都無需考慮如何把信息傳輸給對方。n傳輸信息的任務(wù)是由計算機(jī)網(wǎng)絡(luò)來完成的。1.2 計算機(jī)網(wǎng)絡(luò)的概念n所謂計算機(jī)網(wǎng)絡(luò),是指把分布在不同地理區(qū)域的計算機(jī)用通信線路

5、互聯(lián)起來的一個具有強(qiáng)大功能的網(wǎng)絡(luò)系統(tǒng)。n通俗的說,計算機(jī)網(wǎng)絡(luò)就是通過電纜、電話線、或無線通訊設(shè)施等互聯(lián)的計算機(jī)的集合。n網(wǎng)絡(luò)中每臺機(jī)器稱為節(jié)點node)。大多數(shù)節(jié)點是計算機(jī),此外,打印機(jī)、路由器、網(wǎng)橋、網(wǎng)關(guān)和啞終端等也是節(jié)點。1.2 計算機(jī)網(wǎng)絡(luò)的概念1.2 計算機(jī)網(wǎng)絡(luò)的概念不同網(wǎng)絡(luò)之間的互聯(lián)靠網(wǎng)絡(luò)上的標(biāo)準(zhǔn)語言TCP/IP協(xié)議。如上圖所示,一個網(wǎng)絡(luò)使用協(xié)議A,另一個網(wǎng)絡(luò)使用協(xié)議B,這兩個網(wǎng)絡(luò)通過TCP/IP協(xié)議進(jìn)行互聯(lián)。1.3 OSI參考模型nOSI 參考模型把網(wǎng)絡(luò)分為7 層,參見下圖,每一層使用下層提供的服務(wù),并為上層提供服務(wù)。1.3 OSI參考模型數(shù)據(jù)在上下層之間的封裝和解封裝過程1.4 T

6、CP/IP 參考模型和TCP/IP協(xié)議nISO 制定的OSI參考模型提出了網(wǎng)絡(luò)分層的思想,這種思想對網(wǎng)絡(luò)的發(fā)展具有重要的指導(dǎo)意義。nTCP/IP 參考模型吸取了網(wǎng)絡(luò)分層的思想,但是對網(wǎng)絡(luò)的層次做了簡化,并且在網(wǎng)絡(luò)各層除了主機(jī)-網(wǎng)絡(luò)層外都提供了完善的協(xié)議,這些協(xié)議構(gòu)成了TCP/IP協(xié)議集,簡稱TCP/IP協(xié)議。1.4 TCP/IP 參考模型和TCP/IP協(xié)議比較TCP/IP 參考模型和OSI參考模型1.4 TCP/IP 參考模型和TCP/IP協(xié)議1.4 TCP/IP 參考模型和TCP/IP協(xié)議n(1主機(jī)-網(wǎng)絡(luò)層n 實際上TCP/IP 參考模型沒有真正提供這一層的實現(xiàn),也沒有提供協(xié)議。它只是要求第

7、三方實現(xiàn)的主機(jī)-網(wǎng)絡(luò)層能夠為上層網(wǎng)絡(luò)互聯(lián)層提供一個訪問接口,使得網(wǎng)絡(luò)互聯(lián)層能利用主機(jī)-網(wǎng)絡(luò)層來傳遞IP數(shù)據(jù)包。1.4 TCP/IP 參考模型和TCP/IP協(xié)議n(2網(wǎng)絡(luò)互聯(lián)層n 網(wǎng)絡(luò)互聯(lián)層是整個參考模型的核心。它的功能是把IP 數(shù)據(jù)包發(fā)送到目標(biāo)主機(jī)。為了盡快地發(fā)送數(shù)據(jù),IP 協(xié)議把原始數(shù)據(jù)分為多個數(shù)據(jù)包,然后沿不同的路徑同時傳遞數(shù)據(jù)包。1.4 TCP/IP 參考模型和TCP/IP協(xié)議n網(wǎng)絡(luò)互聯(lián)層具備連接異構(gòu)網(wǎng)的功能。下圖顯示了連接以太網(wǎng)和令牌環(huán)網(wǎng)的方式。網(wǎng)絡(luò)互聯(lián)層采用IP協(xié)議,它規(guī)定了數(shù)據(jù)包的格式,并且規(guī)定了為數(shù)據(jù)包尋找路由的流程。1.4 TCP/IP 參考模型和TCP/IP協(xié)議n(3傳輸層n

8、傳輸層的功能是使源主機(jī)和目標(biāo)主機(jī)上的進(jìn)程可以進(jìn)行會話。在傳輸層定義了兩種服務(wù)質(zhì)量不同的協(xié)議,即TCPTransmission Control Protocol,傳輸控制協(xié)議和UDPUserDatagram Protocol,用戶數(shù)據(jù)報協(xié)議)。1.4 TCP/IP 參考模型和TCP/IP協(xié)議nTCP 協(xié)議是一種面向連接的、可靠的協(xié)議。它將源主機(jī)發(fā)出的字節(jié)流無差錯的發(fā)送給互聯(lián)網(wǎng)上的目標(biāo)主機(jī)。n在發(fā)送端,TCP 協(xié)議負(fù)責(zé)把上層傳送下來的數(shù)據(jù)分成報文段并傳遞給下層。n在接收端,TCP 協(xié)議負(fù)責(zé)把收到的報文進(jìn)行重組后遞交給上層。nTCP 協(xié)議還要處理端到端的流量控制,以避免接收速度緩慢的接收方?jīng)]有足夠的

9、緩沖區(qū)來接收發(fā)送方發(fā)送的大量數(shù)據(jù)。n應(yīng)用層的許多協(xié)議,如HTTP、FTP 和TELNET 協(xié)議等都建立在TCP協(xié)議基礎(chǔ)上。1.4 TCP/IP 參考模型和TCP/IP協(xié)議nUDP 協(xié)議是一個不可靠的、無連接協(xié)議,主要適用于不需要對報文進(jìn)行排序和流量控制的場合。nUDP 不能保證數(shù)據(jù)報的接收順序同發(fā)送順序相同,甚至不能保證它們是否全部到達(dá)目標(biāo)主機(jī)。應(yīng)用層的一些協(xié)議,如SNMP 和DNS 協(xié)議就建立在UDP 協(xié)議基礎(chǔ)上。n如果要求可靠的傳輸數(shù)據(jù),則應(yīng)該避免使用UDP協(xié)議,而要使用TCP協(xié)議。1.4 TCP/IP 參考模型和TCP/IP協(xié)議n(4應(yīng)用層n TCP/IP 模型將OSI 參考模型中的會話

10、層和表示層的功能合并到應(yīng)用層實現(xiàn)。針對各種各樣的網(wǎng)絡(luò)應(yīng)用,應(yīng)用層引入了許多協(xié)議。n 基于UDP協(xié)議的的應(yīng)用層協(xié)議主要包括:SNMP網(wǎng)絡(luò)管理協(xié)議)、DNSn 基于TCP協(xié)議的應(yīng)用層協(xié)議主要包括:FTP、TELNET虛擬終端協(xié)議)、HTTPS安全超文本傳輸協(xié)議)、POP3郵局協(xié)議-版本3)、IMAP4Internet消息訪問協(xié)議-版本4)、SMTP1.4.1 IP協(xié)議nIP 網(wǎng)絡(luò)即在網(wǎng)絡(luò)層采用IP 協(xié)議的網(wǎng)中每臺主機(jī)都有惟一的32位IP 地址。n主機(jī)實際上有兩個不同性質(zhì)的地址:物理地址和IP 地址。物理地址是由主機(jī)上的網(wǎng)卡來標(biāo)識的,物理地址才是主機(jī)的真實地址。n 1.4.1 IP協(xié)議nIP 是面向

11、包的協(xié)議,即數(shù)據(jù)被分成若干小數(shù)據(jù)包,然后分別傳輸它們。nIP 網(wǎng)絡(luò)上的主機(jī)只能直接向本地網(wǎng)上的其他主機(jī)也就是具有相同IP 網(wǎng)址的主機(jī)發(fā)送數(shù)據(jù)包。1.4.1 IP協(xié)議n如下圖所示,主機(jī)A向同一個網(wǎng)絡(luò)上的另一個主機(jī)B 發(fā)包時, ARP會通過地址解析協(xié)議,獲得對方的物理地址,然后把包發(fā)給對方。n ARP 協(xié)議的運(yùn)行機(jī)制為:主機(jī)A 在網(wǎng)絡(luò)上廣播一個ARP 音訊:“要尋找地址為 的主機(jī)”,接著,具有這個IP 地址的主機(jī)B 就會做出響應(yīng),把自身的物理地址告訴主機(jī)A。1.4.1 IP協(xié)議n當(dāng)主機(jī)A 向另一個網(wǎng)絡(luò)上的主機(jī)B 發(fā)送包時,主機(jī)A 利用ARP 協(xié)議找到本地網(wǎng)絡(luò)上的路由器的物理地

12、址,把包轉(zhuǎn)發(fā)給它。路由器會按照如下步驟處理數(shù)據(jù)包:n(1如果數(shù)據(jù)包的生命周期已到,則該數(shù)據(jù)包被拋棄。n(2搜索路由表,優(yōu)先搜索路由表中的主機(jī),如果能找到具有目標(biāo)IP地址的主機(jī),則將數(shù)據(jù)包發(fā)送給該主機(jī)。n(3如果匹配主機(jī)失敗,則繼續(xù)搜索路由表,匹配同子網(wǎng)的路由器,如果找到匹配的路由器,則將數(shù)據(jù)包轉(zhuǎn)發(fā)給該路由器。n(4如果匹配同子網(wǎng)的路有器失敗,則繼續(xù)搜索路由表,匹配同網(wǎng)絡(luò)的路由器,如果找到匹配的路由器,則將數(shù)據(jù)包轉(zhuǎn)發(fā)給該路由器。n(5如果以上匹配操作都失敗,就搜索默認(rèn)路由,如果默認(rèn)路由存在,則按照默認(rèn)路由發(fā)送數(shù)據(jù)包,否則丟棄數(shù)據(jù)包。nIP 協(xié)議并不保證一定把數(shù)據(jù)包送達(dá)目標(biāo)主機(jī),在發(fā)送過程中,會因

13、為數(shù)據(jù)包結(jié)束生命周期,或者找不到路由而丟棄數(shù)據(jù)包。1.4.2 TCP 協(xié)議以及端口nIP協(xié)議在發(fā)送數(shù)據(jù)包時,途中會遇到各種事情,例如可能路由器突然崩潰,使包丟失。再例如一個包可能沿低速鏈路移動,而另一個包可能沿高速鏈路移動而超過前面的包,最后使得包的順序搞亂。nTCP 協(xié)議使兩臺主機(jī)上的進(jìn)程順利通信,不必?fù)?dān)心包丟失或包順序搞亂。TCP 跟蹤包順序,并且在包順序搞亂時按正確順序重組包。如果包丟失,則TCP會請求源主機(jī)重發(fā)包。1.4.2 TCP 協(xié)議以及端口端口號的范圍為端口號的范圍為0 到到65535,其中,其中0 到到1023 的端口號一般固定的端口號一般固定分配給一些服務(wù)。比如分配給一些服務(wù)

14、。比如 FTP服務(wù)服務(wù)(21),SMTP(25)效力,效力,(25)效效力,力,135端口分配給端口分配給RPC遠(yuǎn)程過程調(diào)用服務(wù)等等遠(yuǎn)程過程調(diào)用服務(wù)等等;從從1024到到65535的端口號供用戶自定義的服務(wù)使用。的端口號供用戶自定義的服務(wù)使用。1.4.2 TCP 協(xié)議以及端口n客戶進(jìn)程的端口一般由所在主機(jī)的操作系統(tǒng)動態(tài)分配,當(dāng)客戶進(jìn)程要求與一個服務(wù)器進(jìn)程進(jìn)行TCP 銜接,操作系統(tǒng)為客戶進(jìn)程隨機(jī)的分配一個還未被占用的端口,當(dāng)客戶進(jìn)程與服務(wù)器進(jìn)程斷開連接,這個端口就被釋放。nTCP 和UDP 都用端口來標(biāo)識進(jìn)程,允許存在取值相同的TCP端口與UDP端口。1.4.3 RFC簡介nTCP/IP協(xié)議是以

15、RFCRequest For Comment文檔的形式發(fā)布的。RFC 是描述互聯(lián)網(wǎng)相關(guān)技術(shù)規(guī)范的文檔。RFC由個人編寫,Internet 工程任務(wù)組織負(fù)責(zé)審閱和發(fā)布。nRFC的官方網(wǎng)站:/rfc.htmln在RFC 的官方網(wǎng)站上輸入網(wǎng)址:/rfc/rfcXXXX.txt,就能察看相關(guān)的FRC 文檔,這里的XXXX 表示文檔編號。例如FTP 協(xié)議的RFC 文檔的網(wǎng)址為:n /rfc/rfc959.txt1.4.3 RFC簡介1.4.4 客戶/服務(wù)器通信模式n客戶進(jìn)程向服務(wù)器進(jìn)程發(fā)出要求某種服務(wù)的請求,服務(wù)器進(jìn)程響應(yīng)該請求。如圖1-17 所示,通常,

16、一個服務(wù)器進(jìn)程會同時為多個客戶進(jìn)程服務(wù),圖中服務(wù)器進(jìn)程B1 同時為客戶進(jìn)程A1、A2 和B2 提供服務(wù)。圖1-17 客戶進(jìn)程A1、A2和B2請求服務(wù)器進(jìn)程B1的服務(wù)1.4.4 客戶/服務(wù)器通信模式n網(wǎng)絡(luò)上有些通用的服務(wù)有著固定的端口1.5 用Java 編寫客戶/服務(wù)器程序n在Java中,有三種套接字類:java.Socket、java.ServerSocket和DatagramSocket。其中Socket和ServerSocket類建立在TCP協(xié)議基礎(chǔ)上,DatagramSocket 類建立在UDP協(xié)議基礎(chǔ)上。n傳輸層向應(yīng)用層提供了套接字Socket 接口,Socket 封裝了下層的數(shù)據(jù)傳輸

17、細(xì)節(jié),應(yīng)用層的程序通過Socket來建立與遠(yuǎn)程主機(jī)的連接以及進(jìn)行數(shù)據(jù)傳輸。圖1-18 套接字可看過是通信連接兩端的收發(fā)器1.5.1 創(chuàng)建EchoServer圖1-19 服務(wù)器與客戶利用ServerSocket 和Socket來通信1.5.1 創(chuàng)建EchoServern服務(wù)器程序通過一直監(jiān)聽端口,來接收客戶程序的連接請求。在服務(wù)器程序中,需要先創(chuàng)建一個ServerSocket對象,在構(gòu)造方法中指定監(jiān)聽的端口:n ServerSocket server=new ServerSocket(8000); /監(jiān)聽8000端口nServerSocket的構(gòu)造方法負(fù)責(zé)在操作系統(tǒng)中把當(dāng)前進(jìn)程注冊為服務(wù)器進(jìn)程。

18、服務(wù)器程序接下來調(diào)用ServerSocket 對象的accept()方法,該方法一直監(jiān)聽端口,等待客戶的連接請求,如果接收到一個連接請求,accept()方法就會返回一個Socket 對象,這個Socket對象與客戶端的Socket對象形成了一條通信線路:n Socket socket=server.accept(); /等待客戶的連接請求1.5.1 創(chuàng)建EchoServernSocket 類提供了getInputStream()方法和getOutputStream()方法,分別返回輸入流InputStream 對象和輸出流OutputStream 對象。程序只需向輸出流寫數(shù)據(jù),就能向?qū)Ψ桨l(fā)送

19、數(shù)據(jù);只需從輸入流讀數(shù)據(jù),就能接收來自對方的數(shù)據(jù)。n與普通I/O流一樣,Socket 的輸入流和輸出流也可以用過濾流來裝飾。在以下代碼中,先獲得輸出流,然后用PrintWriter 裝飾它,PrintWriter 的println()方法能夠?qū)懸恍袛?shù)據(jù);以下代碼接著獲得輸入流,然后用BufferedReader 裝飾它,BufferedReader 的readLine()方法能夠讀入一行數(shù)據(jù):n OutputStream socketOut = socket.getOutputStream();n /參數(shù)true 表示每寫一行,PrintWriter緩存就自動溢出,把數(shù)據(jù)寫到目的地n Prin

20、tWriter pw=new PrintWriter(socketOut,true);n InputStream socketIn = socket.getInputStream();n BufferedReader br=new BufferedReader(new InputStreamReader(socketIn);1.5.1 創(chuàng)建EchoServern例程1-2 EchoServer.javanimport java.io.*;nimport java.*;npublic class EchoServer n private int port=8000;n private Serve

21、rSocket serverSocket;n public EchoServer() throws IOException n serverSocket = new ServerSocket(port);n System.out.println(服務(wù)器啟動); n n public String echo(String msg) n return echo: + msg; n n private PrintWriter getWriter(Socket socket)throws IOExceptionn OutputStream socketOut = socket.getOutputStr

22、eam();1.5.1 創(chuàng)建EchoServern return new PrintWriter(socketOut,true);n n private BufferedReader getReader(Socket socket)throws IOExceptionn InputStream socketIn = socket.getInputStream();n return new BufferedReader(new InputStreamReader(socketIn);n n public void service() n while (true) n Socket socket=

23、null;n try n socket = serverSocket.accept(); /等待客戶連接n System.out.println(New connection accepted n +socket.getInetAddress() + : +socket.getPort();n BufferedReader br =getReader(socket);n PrintWriter pw = getWriter(socket);n String msg = null;1.5.1 創(chuàng)建EchoServern while (msg = br.readLine() != null) n

24、System.out.println(msg);n pw.println(echo(msg);n if (msg.equals(bye) /如果客戶發(fā)送消息為“bye”,就結(jié)束通信n break; n catch (IOException e) n e.printStackTrace();n finally n tryn if(socket!=null) socket.close(); /斷開連接n catch (IOException e) e.printStackTrace();n / service() 方法結(jié)束n public static void main(String args)

25、throws IOException n new EchoServer().service();n n1.5.2 創(chuàng)建EchoClientn在EchoClient程序中,為了與EchoServer通信,需要先創(chuàng)建一個Socket 對象:n String host=localhost;n String port=8000;n Socket socket=new Socket(host,port);n當(dāng)參數(shù)host 的取值為“l(fā)ocalhost”,表示EchoClient與EchoServer進(jìn)程運(yùn)行在同一個主機(jī)上。如果Socket對象成功創(chuàng)建,就表示建立了EchoClient與EchoServe

26、r 之間的連接。接下來,EchoClient 從Socket 對象中得到了輸出流和輸入流,就能與EchoServer 交換數(shù)據(jù)。1.5.2 創(chuàng)建EchoClientnimport java.*;nimport java.io.*;nimport java.util.*;npublic class EchoClient n private String host=localhost;n private int port=8000;n private Socket socket;n n public EchoClient()throws IOExceptionn socket=new Socket

27、(host,port); n n public static void main(String args)throws IOExceptionn new EchoClient().talk();n 1.5.2 創(chuàng)建EchoClientnprivate PrintWriter getWriter(Socket socket)throws IOExceptionn OutputStream socketOut = socket.getOutputStream();n return new PrintWriter(socketOut,true);n n private BufferedReader

28、getReader(Socket socket)throws IOExceptionn InputStream socketIn = socket.getInputStream();n return new BufferedReader(new InputStreamReader(socketIn);n n public void talk()throws IOException n tryn BufferedReader br=getReader(socket);n PrintWriter pw=getWriter(socket);n BufferedReader localReader=n

29、ew BufferedReader(new InputStreamReader(System.in);n String msg=null;n while(msg=localReader.readLine()!=null)1.5.2 創(chuàng)建EchoClientn pw.println(msg);n System.out.println(br.readLine();n if(msg.equals(bye)n break;n n catch(IOException e)n e.printStackTrace();n finallyn trysocket.close();catch(IOExceptio

30、n e)e.printStackTrace();n n n運(yùn)行EchoServer和EchoClientn運(yùn)行范例時,需要打開兩個DOS 界面,先在一個DOS 界面中運(yùn)行“java EchoServer命令,再在另一個DOS界面中運(yùn)行“java EchoClient命令。圖1-20 顯示了運(yùn)行這兩個程序的DOS界面。在EchoClient 控制臺,用戶輸入字符串“hi”,程序就會輸出“echo:hi”運(yùn)行EchoServer和EchoClientsocket = serverSocket.accept(); /等待客戶連接System.out.println(New connection ac

31、cepted +socket.getInetAddress() + : +socket.getPort();EchoServer 的控制臺顯示EchoClient 的IP 地址為,端口為1874。 是本地主機(jī)的IP地址,表明EchoClient 與EchoServer 在同一個主機(jī)上。EchoClient作為客戶程序,它的端口是由操作系統(tǒng)隨機(jī)產(chǎn)生的。每當(dāng)客戶程序創(chuàng)建一個Socket對象,操作系統(tǒng)就會為客戶分配一個端口。運(yùn)行EchoServer和EchoClientn假定在客戶程序中先后創(chuàng)建了兩Socket 對象,這意味著客戶與服務(wù)器之間同時建立了兩個連接:n

32、Socket socket1=new Socket(host,port);nSocket socket2=new Socket(host,port);n操作系統(tǒng)為客戶的每個連接分配一個惟一的端口,參見下圖練習(xí)題1n問題:問題:Java網(wǎng)絡(luò)程序位于網(wǎng)絡(luò)程序位于TCP/IP參考模型的哪一層?(單項選擇)參考模型的哪一層?(單項選擇)n選項選項:na) 網(wǎng)絡(luò)層互聯(lián)層網(wǎng)絡(luò)層互聯(lián)層nb) 應(yīng)用層應(yīng)用層nc) 傳輸層網(wǎng)絡(luò)傳輸層網(wǎng)絡(luò)nd) 主機(jī)主機(jī)-網(wǎng)絡(luò)層網(wǎng)絡(luò)層n答案答案: b練習(xí)題2n問題:以下哪些協(xié)議位于傳輸層?(多項選擇)問題:以下哪些協(xié)議位于傳輸層?(多項選擇)n選項選項:na) TCP nb) n

33、c) SMTP nd) UDP nf)IPn答案答案: a,d練習(xí)題3n問題:假定一個進(jìn)程已經(jīng)占用問題:假定一個進(jìn)程已經(jīng)占用TCP的的80端口,它還能端口,它還能否占用否占用UDP的的80端口?(單項選擇)端口?(單項選擇)n選項選項:na)可以可以 nb)不可以不可以n答案答案: a練習(xí)題4n問題:問題:.一個客戶進(jìn)程執(zhí)行以下代碼一個客戶進(jìn)程執(zhí)行以下代碼nSocket socket1=new Socket(host,port);nSocket socket2=new Socket(host,port);n以下哪些說法正確?(多項選擇)以下哪些說法正確?(多項選擇)n選項選項:na)socke

34、t1與與socket2占用不同的本地端口。占用不同的本地端口。nb) Socket構(gòu)造方法中的構(gòu)造方法中的port參數(shù)指定占用的本地端口。參數(shù)指定占用的本地端口。nc) 當(dāng)當(dāng)Socket構(gòu)造方法成功返回,就表明建立了與服務(wù)器的一個構(gòu)造方法成功返回,就表明建立了與服務(wù)器的一個TCP連接。連接。nd) 執(zhí)行第二行程序代碼會拋出異常,因為一個客戶進(jìn)程只能與服執(zhí)行第二行程序代碼會拋出異常,因為一個客戶進(jìn)程只能與服務(wù)器端建立一個務(wù)器端建立一個TCP連接。連接。n答案答案: a,c練習(xí)題5n問題:有一種協(xié)議規(guī)定:如果客戶端發(fā)送一行字符串問題:有一種協(xié)議規(guī)定:如果客戶端發(fā)送一行字符串“date”,服務(wù)器端就返回當(dāng)前日期信息,如果客戶,服務(wù)器端就返回當(dāng)前日期信息,如果客戶端發(fā)送一行字符串端發(fā)送一行字符串“exit”,服務(wù)器端就結(jié)束與客戶,服務(wù)器端就結(jié)束與客戶端的通信。這種協(xié)議應(yīng)該屬于哪一層的協(xié)議?

溫馨提示

  • 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

提交評論