201711671125 《Java程式設計》第12周學習總結(第十三章)
教材學習內容總結
第十三章
- URL類
URL類是java.net包中的一個重要的類,使用URL建立物件的應用程式稱為客戶端程式。
1.1URL的構造方法
建立一個URL物件:public URL (String spec)throws MalformedURLException
1.2讀取URL中的資源
URL物件呼叫InputStream openStream()方法可以返回一個輸入流,該輸入流指向URL資源所包含的資源。
- InetAddress類
2.1地址的表示
(1)域名
(2)IP地址
2.2獲取地址
(1)獲取Internet上主機的地址
InetAddress類中的兩個例項方法
public String getHostName()獲取物件所含的域名。
public String getHostAddress()獲取物件所含的IP地址。
(2)獲取本機的地址
使用getLocalHost()獲得一個InetAddress物件,該物件含有本地機器的域名和IP地址。
- 套接字
3.1套接字概述
當兩個程式需要通訊時,它們可以通過使用Socket類建立套接字物件並連線在一起。
3.2客戶端套接字
客戶端的程式使用Socket類建立負責連線到伺服器的套接字物件。
Socket的構造方法是Socket(String host,int port),引數host是伺服器的IP地址,port是一個埠號。
3.3ServerSocket物件與伺服器端套接字
伺服器必須建立一個ServerSocket物件,該物件通過將客戶端的套接字物件和伺服器端的一個套接字物件連線起來,從而達到連線的目的。
3.4使用多執行緒技術
為了防止堵塞執行緒,伺服器端收到一個客戶的套接字後,就應該啟動一個專門為該客戶服務的執行緒。
可以用Socket類不帶引數的構造方法Socket()建立一個套接字物件,該物件需呼叫public void connect(SocketAddress endpoint) throws IOException請求和引數SocketAddress指定地址的套接字建立連線。
套接字通訊兩個基本原則:
- 伺服器應當啟動一個專門的執行緒,在該執行緒中和客戶的套接字建立連線。
- 由於套接字的輸入流在讀取資訊時可能發生阻塞,客戶端和伺服器端都需要在一個單獨的執行緒中讀取資訊。
4.UDP資料報
基於UDP的通訊和基於TCP的通訊不同,基於UDP的資訊傳遞更快,但不提供可靠性保證。
基於UDP通訊的基本模式是:
(1)將資料打包,稱為資料包(好比將信件裝入信封一樣),然後將資料包發往目的地。
(2)接受別人發來的資料包(好比接收信封一樣),然後檢視資料包中的內容。
4.1傳送資料包
用DatagramPacket類將資料打包,即用DatagramPacket類建立一個物件,稱為資料包。
構造方法:
DatagramPacket(byte data[],int length,InetAddtress address,int port)
DatagramPack(byte data[],int length,InetAddtress address,int port)
4.2接受資料包
首先用DatagramSocket的另一個構造方法DatagramSocket(int port) 建立一個物件,其中的引數必須和待接收的資料包的埠號相同。然後物件mail_in使用方法receive(DatagramPacket pack)接受資料包。
5.廣播資料包
要廣播或接收廣播的主機都必須加入到同一個D類地址。
6.遠端呼叫
習慣上稱發出呼叫請求的虛擬機器(JVM)為(本地)客戶機,稱接受並執行請求的虛擬機器(JVM)為(遠端)伺服器。
6.1遠端物件及其代理
(1)遠端物件:
駐留在(遠端)伺服器上的物件是客戶要請求的物件,稱作遠端物件。即客戶程式請求遠端呼叫方法,然後遠端物件呼叫方法並返回必要的結果。
(2)代理與存根(Stub):
代理的特點是它與遠端物件實現了相同的介面。
存根(Stub):一種特殊的位元組碼,並讓這個存根產生的物件為作為遠端物件的代理。
(3)Remote介面
RMI為了標識一個物件是遠端物件,即可以被客戶請求的物件,要求遠端物件必須實現java.rmi包中的Remote介面,也就是說只有實現該介面的類的例項才被RMI認為是一個遠端物件。Remote介面中沒有方法,該介面僅僅起到一個標識作用。
6.2RMI的設計細節
(1)擴充套件Remote介面
定義一個介面是java.rmi包中Remote的子介面,即擴充套件Remote介面。
(2)遠端物件
建立遠端物件的類必須要實現Remote介面,RMI使用Remote介面來標識遠端物件。
6.3存根(Stub)與代理
RMI負責產生存根,如果建立遠端物件的位元組碼是RemoteConcrete Subject.class,那麼存根的位元組碼是RemoteConcreteSubject_Stub.class,即字尾改為“_Stub”。
RMI使用rmic命令生成存根RemoteConcreteSubject_Stub.class。
6.4啟動註冊:rmiregistry
6.5啟動遠端物件服務
遠端伺服器啟動註冊rmiregistry後,遠端伺服器就可以啟動遠端物件服務了,即編寫程式來建立和註冊遠端物件,並執行該程式。
6.6執行客戶端程式
遠端伺服器啟動遠端物件服務後,客戶端就可以執行有關程式,訪問使用遠端物件。
教材學習中的問題和解決過程
注意 區分客戶端和伺服器端的區別以及呼叫的方法。
程式碼除錯中的問題和解決過程
多看例子,能更好的深入理解方法的使用。
其他
還是要多敲程式碼才可以啊。
學習進度條
|
程式碼行數(新增/累積) |
部落格量(新增/累積) |
學習時間(新增/累積) |
重要成長 |
目標 |
2000行 |
10篇 |
80小時 |
|
第一週 |
67/67 |
1/1 |
8/8 |
|
… |
… |
… |
… |
|
第十二週 |
350/3391 |
1/12 |
7/95 |
|
參考資料
《Java2實用教程(第5版)》