20145227《Java程式設計》第10周學習總結
教材學習内容總結
網絡程式設計
- 就是在兩個或兩個以上的裝置(例如計算機)之間傳輸資料。程式員所作的事情就是把資料發送到指定的位置,或者接收到指定的資料,這個就是狹義的網絡程式設計範疇。在發送和接收資料時,大部分的程式設計語言都設計了專門的API實作這些功能,程式員隻需要調用即可。
計算機網絡概述
- 計算機網絡:通過一定的實體裝置将處于不同位置的計算機連接配接起來組成的網絡,這個網絡中包含的裝置有:計算機、路由器、交換機等等。
- IP位址:網絡中的每個裝置都會有一個唯一的數字辨別,命名IP位址的規定是IPv4協定,該協定規定每個IP位址由4個0-255之間的數字組成
- 域名:一個IP位址可以對應多個域名,一個域名隻能對應一個IP位址。
- 域名解析:通過DNS伺服器将域名轉換為IP位址。
- 端口:在同一個計算機中每個程式對應唯一的端口,這樣一個計算機上就可以通過端口區分發送給每個端口的資料了,也就是一個計算機上可以并發運作多個網絡程式,而不會在互相之間産生幹擾。
- 有了IP位址和端口的概念以後,在進行網絡通訊交換時,就可以通過IP位址查找到該台計算機,然後通過端口辨別這台計算機上的一個唯一的程式。這樣就可以進行網絡資料的交換了。
網絡程式設計概述
- 網絡通訊基于“請求-響應”模型,通訊的一端發送資料,另外一端回報資料。
- C/S結構:用戶端與伺服器端:網絡程式設計中的兩種程式就分别是用戶端和伺服器端,第一次主動發起通訊的程式被稱作用戶端(Client)程式,簡稱用戶端,而在第一次通訊中等待連接配接的程式被稱作伺服器端(Server)程式,簡稱伺服器。一旦通訊建立,則用戶端和伺服器端完全一樣,沒有本質的差別,這種網絡程式設計的結構被稱作用戶端/伺服器結構,簡稱C/S結構。
- B/S結構:沒有必要使用專用的用戶端,而需要使用通用的用戶端,例如浏覽器,使用浏覽器作為用戶端的結構被稱作浏覽器/伺服器結構,也叫做Browser/Server結構,簡稱為B/S結構。在開發時隻需要開發伺服器端即可,這種結構的優勢在于開發的壓力比較小,不需要維護用戶端。這種結構也存在着很多不足,例如浏覽器的限制比較大,表現力不強,無法進行系統級操作等。
- P2P程式:一個P2P程式中既包含用戶端程式,也包含伺服器端程式。
- 在實際的網絡程式程式設計中,最麻煩的内容不是資料的發送和接收,因為這個功能在幾乎所有的程式語言中都提供了封裝好的API進行調用,最麻煩的内容就是協定的設計以及協定的生産和解析,這個才是網絡程式設計中最核心的内容。
網絡通訊方式
- 現有的網絡中,網絡通訊的方式主要有兩種:
TCP(傳輸控制協定)方式
UDP(使用者資料報協定)方式
- TCP方式需要建立專門的虛拟連接配接,然後進行可靠的資料傳輸,如果資料發送失敗,則用戶端會自動重發該資料。
- UDP方式不需要建立專門的虛拟連接配接,傳輸也不是很可靠,如果發送失敗則用戶端無法獲得。
網絡程式設計步驟
- 用戶端的程式設計主要由三個步驟實作:
建立網絡連接配接:建立網絡連接配接時需要指定連接配接到的伺服器的IP位址和端口号。
交換資料
關閉網絡連接配接
- 伺服器端一般實作程式的核心邏輯以及資料存儲等核心功能四個步驟:
監聽端口
獲得連接配接
交換資料
關閉連接配接
Java網絡程式設計技術
- 和網絡程式設計有關的基本API位于java.net包中,該包中包含了基本的網絡程式設計實作,該包是網絡程式設計的基礎。該包中既包含基礎的網絡程式設計類,也包含封裝後的專門處理WEB相關的處理類。
- InetAddress類:該類的功能是代表一個IP位址,并且将IP位址和域名相關的操作方法包含在該類的内部。關于該類的使用,下面通過一個基礎的代碼示例示範該類的使用。運作結果如下:

TCP程式設計
-
TCP方式的網絡程式設計,以java.net.Socket類代表用戶端連接配接,以java.net.ServerSocket類代表伺服器端連接配接,程式員實際程式設計時,隻需要指定IP位址和端口号碼就可以建立連接配接了
連接配接一旦建立,緊接着的步驟就是按照“請求-響應”模型進行網絡資料交換,在Java語言中,資料傳輸功能由Java IO實作,也就是說隻需要從連接配接中獲得輸入流和輸出流即可,然後将需要發送的資料寫入連接配接對象的輸出流中,在發送完成以後從輸入流中讀取資料即可。資料交換完成以後,關閉網絡連接配接,釋放網絡連接配接占用的系統端口和記憶體等資源,完成網絡操作。
-
TCP類型的伺服器端的編寫:
1.伺服器端程式設計的第一個步驟是監聽端口,如ServerSocket ss = new ServerSocket(10000)。
2.伺服器端程式設計的第二個步驟是獲得連接配接,該步驟的作用是當有用戶端連接配接到達時,建立一個和用戶端連接配接對應的Socket連接配接對象,進而釋放用戶端連接配接對于伺服器端端口的占用,實作獲得連接配接的代碼是:Socket socket = ss.accept()。
3.連接配接獲得以後,後續的程式設計就和用戶端的網絡程式設計類似了,這裡獲得的Socket類型的連接配接就和用戶端的網絡連接配接一樣了,隻是伺服器端需要首先讀取發送過來的資料,然後進行邏輯處理以後再發送給用戶端,也就是交換資料的順序和用戶端交換資料的步驟剛好相反。
4.在伺服器端通信完成以後,關閉伺服器端連接配接。實作的代碼為:ss.close()。```
- 下面以一個簡單的echo服務實作為例子,介紹綜合使用示例。echo的意思就是“回聲”,echo伺服器端實作的功能就是将用戶端發送的内容再原封不動的回報給用戶端。實作結果如下:
- 如何實作建立一次連接配接,進行多次資料交換呢?其實很簡單,建立連接配接以後,将資料交換的邏輯寫到一個循環中就可以了。這樣隻要循環不結束則連接配接就不會被關閉。按照這種思路,可以改造一下上面的代碼,讓該程式可以在建立連接配接一次以後,發送三次資料,實作結果如下:
- 下面例子是UDP用戶端程式設計中發送資料的實作。
網絡協定
- 網絡協定是指對于網絡中傳輸的資料格式的規定。對于網絡程式設計初學者來說,沒有必要深入了解TCP/IP協定簇,是以對于初學者來說去讀大部頭的《TCP/IP協定》也不是一件很合适的事情,因為深入了解TCP/IP協定是網絡程式設計提高階段,也是深入網絡程式設計底層時才需要做的事情。
- 網絡協定的實質也是用戶端程式和伺服器端程式對于資料的一種約定,隻是由于以計算機為基礎,是以更多的是使用數字來代表内容,這樣就顯得比較抽象一些。
質數判别示例運作結果如下:
- 代碼托管截圖
- 新增代碼行數
學習進度條
代碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小時 |
第一周 | 200/200 | 2/2 | 20/20 |
第二周 | 200/400 | 1/3 | 20/40 |
第三周 | 500/900 | 1/4 | 30/70 |
第四周 | 1072/1972 | 1/5 | 30/100 |
第五周 | 953/2925 | 1/6 | 40/140 |
第六周 | 1082/4007 | 2/8 | 50/190 |
第七周 | 656/4663 | 2/10 | 30/220 |
第八周 | 456/5119 | 2/12 | 30/250 |
第九周 | 1310/6429 | 2/14 | 30/280 |
第十周 | 947/7376 | 2/16 | 30/310 |
參考資料
- Java學習筆記(第8版)
- 《Java學習筆記(第8版)》學習指導