網絡編程的實質就是兩個(或多個)設備(例如計算機)之間的數據傳輸。html
路由器和交換機組成了核心的計算機網絡,計算機只是這個網絡上的節點以及控制等,經過光纖、網線等鏈接將設備鏈接起來,從而造成了一張巨大的計算機網絡。
共享 網絡最主要的優點在於共享:共享設備和數據,如今共享設備最多見的是打印機。java
對於網絡編程來講,最主要的是計算機和計算機之間的通訊,這樣首要的問題就是如何找到網絡上的計算機呢?這就須要瞭解IP地址的概念。網絡中的每一個設備都會有一個惟一的數字標識,這個就是IP地址。在計算機網絡中,如今命名IP地址的規定是IPv4協議,該協議規定每一個IP地址由4個0-255之間的數字組成,例如10.0.120.34。每一個接入網絡的計算機都擁有惟一的IP地址,這個IP地址多是固定的,也能夠是動態的。編程
因爲IP地址不容易記憶,因此爲了方便記憶,有創造了另一個概念——域名(Domain Name),例如sohu.com等。一個IP地址能夠對應多個域名,一個域名只能對應一個IP地址。在網絡中傳輸的數據,所有是以IP地址做爲地址標識,因此在實際傳輸數據之前須要將域名轉換爲IP地址,實現這種功能的服務器稱之爲DNS服務器,也就是通俗的說法叫作域名解析。IP地址的使用要比域名通用一些。瀏覽器
有了端口的概念之後,在同一個計算機中每一個程序對應惟一的端口,這樣一個計算機上就能夠經過端口區分發送給每一個端口的數據了,換句話說,也就是一個計算機上能夠併發運行多個網絡程序,而不會在互相之間產生干擾。有了IP地址和端口的概念之後,在進行網絡通信交換時,就能夠經過IP地址查找到該臺計算機,而後經過端口標識這臺計算機上的一個惟一的程序。這樣就能夠進行網絡數據的交換了。服務器
網絡通信基於「請求-響應」模型。在網絡通信中,第一次主動發起通信的程序被稱做客戶端(Client)程序,簡稱客戶端,而在第一次通信中等待鏈接的程序被稱做服務器端(Server)程序,簡稱服務器。一旦通信創建,則客戶端和服務器端徹底同樣,沒有本質的區別。網絡
網絡編程中的兩種程序就分別是客戶端和服務器端。這種網絡編程的結構被稱做客戶端/服務器結構,也叫作Client/Server結構,簡稱C/S結構;使用瀏覽器做爲客戶端的結構被稱做瀏覽器/服務器結構,也叫作Browser/Server結構,簡稱爲B/S結構。總之C/S結構和B/S結構是如今網絡編程中常見的兩種結構,B/S結構其實也就是一種特殊的C/S結構。P2P程序中既包含客戶端程序,也包含服務器端程序。併發
編寫協議格式呢?答案是隨意。只要按照這種協議格式可以生成惟一的編碼,按照該編碼能夠惟一的解析出發送數據的內容便可。在實際的網絡程序編程中,最麻煩的內容不是數據的發送和接收,由於這個功能在幾乎全部的程序語言中都提供了封裝好的API進行調用。tcp
網絡通信的方式主要有兩種: 在網絡通信中,TCP方式就相似於撥打電話,使用該種方式進行網絡通信時,須要創建專門的虛擬鏈接,而後進行可靠的數據傳輸,若是數據發送失敗,則客戶端會自動重發該數據。而UDP方式就相似於發送短信,使用這種方式進行網絡通信時,不須要創建專門的虛擬鏈接,傳輸也不是很可靠,若是發送失敗則客戶端沒法得到。因爲TCP須要創建專用的虛擬鏈接以及確認傳輸是否正確,因此使用TCP方式的速度稍微慢一些,並且傳輸時產生的數據量要比UDP稍微大一些。論使用TCP方式仍是UDP方式進行網絡通信,網絡編程都是由客戶端和服務器端組成。編程語言
客戶端的編程主要由三個步驟實現:一、 創建網絡鏈接二、 交換數據三、 關閉網絡鏈接學習
服務器端的編程步驟和客戶端不一樣,是由四個步驟實現,依次是:一、 監聽端口二、 得到鏈接三、 交換數據四、 關閉鏈接
和網絡編程有關的基本API位於java.net包中,該包中包含了基本的網絡編程實現,該包是網絡編程的基礎。該包中既包含基礎的網絡編程類,也包含封裝後的專門處理WEB相關的處理類
一個基礎的網絡類——InetAddress類。該類的功能是表明一個IP地址,而且將IP地址和域名相關的操做方法包含在該類的內部。在Java語言中,對於TCP方式的網絡編程提供了良好的支持,在實際實現時,以java.net.Socket類表明客戶端鏈接,以java.net.ServerSocket類表明服務器端鏈接。
屢次數據交換那麼如何實現創建一次鏈接,進行屢次數據交換呢?其實很簡單,創建鏈接之後,將數據交換的邏輯寫到一個循環中就能夠了。這樣只要循環不結束則鏈接就不會被關閉。按照客戶端實現的邏輯,也能夠複用服務器端的鏈接,實現的原理也是將服務器端的數據交換邏輯寫在循環中便可,
UDP方式UDP方式的網絡編程也在Java語言中得到了良好的支持,因爲其在傳輸數據的過程當中不須要創建專用的鏈接等特色,因此在Java API中設計的實現結構和TCP方式不太同樣。固然,須要使用的類仍是包含在java.net包中。
本週的學習咱們學到不少新知識,咱們掌握了大量的基礎知識,可是想要把Java知識充分學透,仍是須要不停努力敲代碼,在敲代碼中學習提升。學習並無什麼途徑,不停地爲之奮鬥,一直堅持下去,相信咱們終究可以精通java這門編程語言。學Java不能靠一時的興趣,而須要咱們不停地探索,纔能有必定的收穫。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 200/200 | 2/2 | 20/20 | |
第二週 | 200/400 | 1/3 | 18/38 | |
第三週 | 200/600 | 1/4 | 22/60 | |
第四周 | 200/800 | 1/5 | 30/90 | |
第五週 | 200/1000 | 1/6 | 30/120 | |
第六週 | 200/1200 | 2/8 | 30/150 | |
第七週 | 400/1600 | 2/10 | 30/180 | |
第八週 | 400/2000 | 2/12 | 30/210 | |
第九周 | 400/2400 | 2/14 | 30/240 | |
第十週 | 400/2800 | 2/16 | 30/280 |