學號 2017-2018-2 《Java程序設計》第九周學習總結
教材學習內容總結
- 13.1 URL類:URL類是java.net包中的一個類,用URL建立的對象能夠獲取URL中的資,其包括三部分信息:協議、地址和資源。注意,協議必須被Java虛擬機所支持,地址必須是能連接的IP地址或域名。
- URL類有兩個構造方法來建立URL對象:①
public URL [連接名] throws MalformedURLException
;②public URL([協議],[地址],[資源]) throws Exception
- URL對象調用InputStream()方法返回一個指向對象包含的資源的輸入流,能夠用來讀取信息。
- 13.2 InetAddress類
- Internet上的主機有兩種方式來表示地址:①地址(如www.******.com)②IP地址(如202.***)。InetAdress類對象含有一個Internet主機地址的域名和IP地址。域名服務器(DNS)負責將域名轉化爲IP地址,而後與主機創建鏈接。
- InetAdress類的兩個靜態方法:①getByName(String s),其中s是域名或者IP地址,調用此方法能夠得到InetAdress對象,含有主機地址的域名與IP地址,表示信息的格式爲[域名]/[IP地址];②getLocalHost()得到一個InetAdress對象,該對象還有本地機器的域名和IP地址。同時,IntAdress類中還有兩個實例方法:①
public String getHostName()
獲取對象所含的域名;②public String getHostAdress()
獲取對象所含的IP地址。
- 13.3 套接字:IP地址表示計算機,端口號表示進程(線程),Socket類建立套接字對象並鏈接在一塊兒(端口號與IP地址組合)。
- 客戶端程序用Socket類建立負責鏈接到服務器的套接字對象,其構造方法爲Socket([IP地址],[端口號])(可能拋出IOException異常)。對套接字對象創建後,可使用①getInputStream()得到一個輸入流來讀取服務器寫入到輸出流中的數據;②getOutputStream()得到一個輸出流,服務器能夠用輸入流來讀取客戶寫入到輸出流中的數據。
- 客戶負責創建鏈接到服務器的套接字對象。服務器須要建立一個ServerSocket對象來將客戶端的套接字對象與服務器的套接字對象鏈接起來。ServerSocket的構造方法是ServerSocket([端口號])(當端口已被佔用會拋出IOException異常)。接着,ServerSocket對象調用accept()方法再次返回一個與客戶端對象相鏈接的新的Socket對象。一樣的,它也具備上述的兩個方法。
- 從套接字鏈接中讀取數據,可能在另外一端數據發送以前就已經開始讀取了,並且會阻塞本線程,直到成功讀取到信息。同時,accept方法也會阻塞線程的執行,直到收到客戶的呼叫。爲了解決「收不到呼叫而致使程序沒法繼續運行」的狀況,ServerSocket對象在調用accept方法以前能夠先調用setTimeout(s)方法來使得在調用accept方法時若是超過s毫秒沒有收到呼叫,就拋出SocketTimeoutException異常。
- 雙方通訊完畢,套接字要使用close()方法關閉套接字鏈接。
- 使用多線程技術:因爲使用套接字鏈接中讀取數據時,可能會阻塞本線程直到成功讀取到信息。爲了不這種狀況,須要啓動一個專門爲該客戶服務的線程。Socket的構造方法Socket()能夠建立一個套接字對象,該對象調用
public void connect(SocketAddress endpoint) throws IOException
來與指定的套接字建立鏈接。這裏的參數可使用InetSocketAddress的構造方法public InetSocketAdress(InetAdress addr,int port)
來得到。套接字通訊的兩個基本原則:
- ①服務器要啓動一個專門的線程與客戶的套接字創建鏈接;
- ②套接字的輸入流在讀取信息時可能發生阻塞,因此客戶端與服務器端都須要在一個單獨的線程中讀取信息。
- 13.4 UDP數據報
- 比較UDP協議與TCP協議:UDP速度較快,但沒法保證可否送到目的地且沒法保證送達時的順序。
- 數據包的發送與接收:使用DatagramPacked類的構造方法
DatagramPacket([字節數組],[長度],[地址],[端口])
建立數據包對象,使用DatagramSocket類建立的對象調用send([數據包])
方法來發送數據包。要接收數據包以前,首先要用使用DatagramSocket類建立的對象,調用構造方法DatagramSocket(端口號)
與被髮送的數據包建立鏈接,而後這個建立的對象調用receive([數據包])
方法來接收數據包,其中數據包對象能夠用DatagramSocket類獲得構造方法DatagramPacket([字節數組],[長度])
來建立數據包對象。
- 注意事項:receive方法可能引發阻塞,直到收到數據包,且數據包的長度不能超過8192KB
- 13.5 廣播數據報
- Internet的地址是a.b.c.d的形式,計算機地址分爲四大類:
- ②A類:a<128,則a表示網絡地址,b,c,d表示主機地址;
- ②B類:128<=a<192,則a,b表示網絡地址,c,d表示主機地址;
- ②B類:192<=a則a,b,c表示網絡地址,d表示主機地址;
- ②B類:224.0.0.0~224.255.255.255是保留地址,稱爲D類地址。
- 要廣播或者接收廣播的主機都必須加入到同一個D類地址,注意D類地址並不表明某個特定主機的位置。
- 13.6 Java遠程調用
- 遠程調用的基本步驟是:客戶程序請求遠程對象調用方法,而後遠程對象調用方法並返回必要的結果。
- 代理與存根:RMI會生成一個存根(Stub)(使用rmic命令來產生。),並讓存根產生的對象做爲遠程對象的代理(存根的命名爲[字節碼文件_Stub].java)。代理與遠程對象實現了相同的接口。客戶端平時是跟代理打交道。
- RMI爲標誌遠程對象,實現了java.rmi包中的Remote接口,注意必須擴展這個接口,同時遠程對象的類必需要實現Remote接口。
- 遠程對象建立以前,RMI要求遠程服務器必須先啓動註冊rmiregistry。而後遠程服務器使用java.rmi包中的Naming類調用類方法
rebind(String name.Remote obj)
綁定一個遠程對象到rmiregistry所管理的註冊表中。
教材學習中的問題和解決過程
在本章的學習中,因爲跟着教材走,遇到不懂的內容也及時往回翻書看懂,因此基本上沒有什麼大問題。html
- 問題1:在學到Java遠程調用的時候,我在想:咱們平時生活中的一些通訊也是經過這樣來實現的嗎?用的也是Java語言嗎?雖然瞭解了這些內容的原理,可是仍是想知道,到底是如何把這些東西實現到實處的?
代碼調試中的問題和解決過程

上週考試錯題總結
結對及互評
其餘
這周的學習任務感受比較抽象一些,不過我以爲本週學的內容應該是和咱們的生活比較接近了,我瞭解了像「聊天室」,「廣播臺」這種平時常見的東西的原理,收穫仍是很大的~
不過感受有點遺憾的是四則運算的多種語言尚未弄好。。發覺本身這幾天有點偷懶了。應該及時調整一下狀態。
補充~後來仍是完成了四則運算的多種語言,略微開心學習
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
第一週 |
36/36 |
1/1 |
8/8 |
第二週 |
432/468 |
2/3 |
15/23 |
第三週 |
964/1432 |
1/4 |
16/39 |
第四周 |
725/2157 |
1/5 |
14/53 |
第五週 |
1428/3585 |
3/8 |
18/71 |
第六週 |
1323/4908 |
1/9 |
17/88 |
第七週 |
960/5868 |
3/12 |
22/110 |
第八週 |
993/6861 |
2/14 |
23/133 |
第九周 |
2073/8934 |
2/16 |
20/153 |
計劃學習時間:18小時.net
實際學習時間:20小時線程