《Java 實用程序的設計第1章 Java網(wǎng)絡程序的設計》由會員分享,可在線閱讀,更多相關《Java 實用程序的設計第1章 Java網(wǎng)絡程序的設計(42頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、1 1第 11 章 Java 網(wǎng)絡程序設計第第 11 11 章章 Java Java 網(wǎng)絡程序設計網(wǎng)絡程序設計11.1 網(wǎng)絡程序設計概述11.2 有連接的Socket通信11.3 無連接的Socket通信11.4 URL通信2 2第 11 章 Java 網(wǎng)絡程序設計11.1 網(wǎng)絡程序設計概述Internet上的通信協(xié)議是以TCP/IP協(xié)議簇為基礎的。TCP/IP協(xié)議簇通常分為4層:網(wǎng)絡接口層、網(wǎng)絡層、傳輸層和應用層,如圖11-1所示。 3 3第 11 章 Java 網(wǎng)絡程序設計圖11-1 TCP/IP協(xié)議簇的4層模型4 4第 11 章 Java 網(wǎng)絡程序設計 11.2 有連接的Socket通信
2、有連接的Socket通信主要使用包中的Socket類和ServerSocket類,Socket類的對象主要用于標識一個通信Socket連接的客戶端和服務器端,而ServerSocket類的對象主要用于監(jiān)聽客戶端的連接并建立通信Socket連接。 5 5第 11 章 Java 網(wǎng)絡程序設計1. IP地址類InetAddressInetAddress類在包中,用來定義一個IP地址。該類能夠完成解析IP地址、查詢主機名等功能。InetAddress類沒有public的構造方法,一般需要通過調用該類的靜態(tài)方法返回具體的InetAddress對象。InetAddress的主要接口方法及其含義如表11-1
3、所示。6 6第 11 章 Java 網(wǎng)絡程序設計7 7第 11 章 Java 網(wǎng)絡程序設計8 8第 11 章 Java 網(wǎng)絡程序設計9 9第 11 章 Java 網(wǎng)絡程序設計10 10第 11 章 Java 網(wǎng)絡程序設計2. 有連接的通信模型在Java中,有連接的通信采用流式I/O模型,通信模型見圖11-2??蛻舳薙ocket的典型構造方法形如:Socket(InetAddress address,int port ,InetAddress localAddr,int localPort)或 Socket(String host,int port ,InetAddress localAddr,
4、int localPort)11 11第 11 章 Java 網(wǎng)絡程序設計圖11-2 有連接的客戶端/服務器通信模型12 12第 11 章 Java 網(wǎng)絡程序設計其中,address為遠端IP,port為遠端端口號,host為遠端主機名,可選的localAddr為本地IP地址,可選的localPort為與當前Socket綁定的本地端口號。Socket類的主要接口方法及其含義如表11-2所示。ServerSocket的構造方法形如:ServerSocket(int port ,int backlog)13 13第 11 章 Java 網(wǎng)絡程序設計14 14第 11 章 Java 網(wǎng)絡程序設計3.
5、 有連接的通信示例在例11-3中,TCPClient與TCP-Server進行有連接的通信。在連接建立后,雙方各自獲得對方的IP地址字符串和端口號并在控制臺顯示。在獲得各自I/O流之后,TCPClient接受從鍵盤輸入的語句,并發(fā)送給TCPServer。TCPServer接收到消息后,判斷其是否為“quit”命令,如果不是,則將收到的消息顯示在控制臺。此后,TCPServer在收到的消息之前加上字符串“Server reply:”之后,發(fā)送回TCPClient。TCPClient在接收到消息后在控制臺將消息打印出來。 15 15第 11 章 Java 網(wǎng)絡程序設計16 16第 11 章 Jav
6、a 網(wǎng)絡程序設計17 17第 11 章 Java 網(wǎng)絡程序設計18 18第 11 章 Java 網(wǎng)絡程序設計19 19第 11 章 Java 網(wǎng)絡程序設計4. Socket選項Socket類還有一些與Socket選項相關的接口方法,其中的一些主要方法及含義見表11-3。 2020第 11 章 Java 網(wǎng)絡程序設計21 21第 11 章 Java 網(wǎng)絡程序設計11.3 無連接的Socket通信無連接的Socket通信主要使用包中的DatagramSocket類,而被發(fā)送的數(shù)據(jù)報則是DatagramPacket類的對象。數(shù)據(jù)報是一種在網(wǎng)絡上獨立傳播的包含兩端地址信息的消息。數(shù)據(jù)報無法保證消息的可
7、靠到達和及時到達,與面向連接的通信方式相比,服務質量較差但開銷較小。對于不需要高質量通信服務的應用程序來說,使用無連接的數(shù)據(jù)報通信方式是簡便易行的。2222第 11 章 Java 網(wǎng)絡程序設計1. DatagramPacket類創(chuàng)建DatagramPacket的目的可能有兩個:使用UDP發(fā)送數(shù)據(jù)到遠端機器;使用UDP從遠端機器接收數(shù)據(jù)。DatagramPacket的構造方法至少都包含兩個參數(shù),其中一個是字符數(shù)組參數(shù),用于存儲UDP包的內容,另一個是數(shù)據(jù)包的長度。DatagramPacket的不同構造方法可用于發(fā)送和接收的不同場景。當構造的DatagramPacket用于接收UDP包時,則應使用
8、以下構造方法:DatagramPacket(byte buffer,int length)2323第 11 章 Java 網(wǎng)絡程序設計其中,buffer為存放接收到的數(shù)據(jù)報的字節(jié)數(shù)組,length為接收數(shù)據(jù)的長度。當構造的DatagramPacket用于發(fā)送UDP包到一個遠程主機時,則應使用以下構造方法:DatagramPacket(byte buffer,int length,InetAddress dest_addr,int dest_port)其中,buffer中保存用于填充數(shù)據(jù)報的內容,length為數(shù)據(jù)長度,dest_addr為目的主機地址,dest_port為目的端口地址。Data
9、gramPacket類的主要接口方法及其含義如表11-4所示。2424第 11 章 Java 網(wǎng)絡程序設計2525第 11 章 Java 網(wǎng)絡程序設計2. 無連接的通信模型無連接的通信模型相比有連接的通信模型來說更為簡單,其通信模型如圖11-3所示。在無連接通信過程中,數(shù)據(jù)收發(fā)的主體是DatagramSocket類的對象實例。服務器和客戶端首先均應創(chuàng)建DatagramSocket用以發(fā)送或接收DatagramPacket,DatagramSocket的典型構造方法為:DatagramSocket()或 DatagramSocket(int port)2626第 11 章 Java 網(wǎng)絡程序設計
10、圖11-3 無連接的客戶端/服務器通信模型2727第 11 章 Java 網(wǎng)絡程序設計2828第 11 章 Java 網(wǎng)絡程序設計2929第 11 章 Java 網(wǎng)絡程序設計3. 無連接的通信示例以下通過一個例子說明無連接通信的基本方法。在例11-4中,UDPServer首先創(chuàng)建一個接收數(shù)據(jù)報的DatagramPacket,接收UDPClient發(fā)送的空數(shù)據(jù)報,獲得UDPClient的IP地址和端口號。然后,UDPServer從控制臺接收一句輸入,將其轉化為字節(jié)數(shù)組,并創(chuàng)建用于發(fā)送的DatagramPacket,發(fā)送回UDPClient。UDPClient在收到數(shù)據(jù)報后在控制臺上打印其內容。3
11、030第 11 章 Java 網(wǎng)絡程序設計31 31第 11 章 Java 網(wǎng)絡程序設計3232第 11 章 Java 網(wǎng)絡程序設計3333第 11 章 Java 網(wǎng)絡程序設計11.4 URL通信基于Socket的通信方式允許用戶設計自己的應用層協(xié)議,實現(xiàn)更為廣泛和靈活的應用程序。而在實際應用中,很多時候利用已有的應用層通信協(xié)議已經(jīng)足夠程序員解決問題。例如當我們希望訪問互聯(lián)網(wǎng)上的一些資源時,可以直接使用HTTP和FTP。這時,可以直接使用基于URL的通信方式。3434第 11 章 Java 網(wǎng)絡程序設計統(tǒng)一資源定位符(Uniform Resource Locator,URL)是互聯(lián)網(wǎng)上資源的統(tǒng)
12、一地址形式,URL可以指向互聯(lián)網(wǎng)上的文件、web站點、ftp站點、新聞組、E-mail地址等資源。使用URL訪問網(wǎng)絡資源時,只需要在URL中標識清楚訪問資源使用的應用層協(xié)議,而不再需要考慮這些協(xié)議的具體處理過程。URL通常是由一個字符串描述的,其基本形式如下:協(xié)議標識:/主機名:端口號路徑名#引用3535第 11 章 Java 網(wǎng)絡程序設計1. URL類在Java中,URL由包中的URL類表示。URL類的構造方法的一般形式主要有以下兩種:URL(String protocol,String host,int port, String file)或 URL(URL context, String
13、 spec)3636第 11 章 Java 網(wǎng)絡程序設計3737第 11 章 Java 網(wǎng)絡程序設計3838第 11 章 Java 網(wǎng)絡程序設計3939第 11 章 Java 網(wǎng)絡程序設計4040第 11 章 Java 網(wǎng)絡程序設計2. 基于URL的網(wǎng)絡資源檢索若想要讀取URL所指向的網(wǎng)絡資源,可以采用兩種方式:直接使用URL類或者使用URLConnection類。例11-6給出了第一種檢索方式的典型示例,通過URL類的openStream()方法即可得到讀取URL資源的InputStream,然后將其封裝到過濾流中逐行讀取資源內容,將讀取的內容在控制臺打印并保存到本地文件xidian_home.html中。41 41第 11 章 Java 網(wǎng)絡程序設計4242第 11 章 Java 網(wǎng)絡程序設計