20145320 《Java程式設計》第10周學習總結

20145320周岐浩發表於2016-05-08

20145320 《Java程式設計》第10周學習總結

教材學習內容總結

網路程式設計

計算機網路概述

網路程式設計的實質就是兩個(或多個)裝置(例如計算機)之間的資料傳輸。

按照計算機網路的定義,通過一定的物理裝置將處於不同位置的計算機連線起來組成的網路,這個網路中包含的裝置有:計算機、路由器、交換機等等。

網路最主要的優勢在於共享:共享裝置和資料,現在共享裝置最常見的是印表機,一個公司一般一個印表機即可,共享資料就是將大量的資料儲存在一組機器中,其它的計算機通過網路訪問這些資料,例如網站、銀行伺服器等等。

為了能夠方便的識別網路上的每個裝置,網路中的每個裝置都會有一個唯一的數字標識,這個就是IP地址。在計算機網路中,現在命名IP地址的規定是IPv4協議,該協議規定每個IP地址由4個0-255之間的數字組成,例如10.0.120.34。每個接入網路的計算機都擁有唯一的IP地址,這個IP地址可能是固定的。

在網路中傳輸的資料,全部是以IP地址作為地址標識,所以在實際傳輸資料以前需要將域名轉換為IP地址,實現這種功能的伺服器稱之為DNS伺服器,也就是通俗的說法叫做域名解析。例如當使用者在瀏覽器輸入域名時,瀏覽器首先請求DNS伺服器,將域名轉換為IP地址,然後將轉換後的IP地址反饋給瀏覽器,然後再進行實際的資料傳輸。

IP地址和域名很好的解決了在網路中找到一個計算機的問題,但是為了讓一個計算機可以同時執行多個網路程式,就引入了另外一個概念——埠(port)。

在硬體上規定,埠的號碼必須位於0-65535之間,每個埠唯一的對應一個網路程式,一個網路程式可以使用多個埠。這樣一個網路程式執行在一臺計算上時,不管是客戶端還是伺服器,都是至少佔用一個埠進行網路通訊。在接收資料時,首先傳送給對應的計算機,然後計算機根據埠把資料轉發給對應的程式。

客戶端網路程式設計步驟

客戶端(Client)是指網路程式設計中首先發起連線的程式,客戶端一般實現程式介面和基本邏輯實現,在進行實際的客戶端程式設計時,無論客戶端複雜還是簡單,以及客戶端實現的方式,客戶端的程式設計主要由三個步驟實現:

  • 1、 建立網路連線

客戶端網路程式設計的第一步都是建立網路連線。在建立網路連線時需要指定連線到的伺服器的IP地址和埠號,建立完成以後,會形成一條虛擬的連線,後續的操作就可以通過該連線實現資料交換了。

  • 2、 交換資料

連線建立以後,就可以通過這個連線交換資料了。交換資料嚴格按照請求響應模型進行,由客戶端傳送一個請求資料到伺服器,伺服器反饋一個響應資料給客戶端,如果客戶端不傳送請求則伺服器端就不響應。
根據邏輯需要,可以多次交換資料,但是還是必須遵循請求響應模型。

  • 3、 關閉網路連線

在資料交換完成以後,關閉網路連線,釋放程式佔用的埠、記憶體等系統資源,結束網路程式設計。

最基本的步驟一般都是這三個步驟,在實際實現時,步驟2會出現重複,在進行程式碼組織時,由於網路程式設計是比較耗時的操作,所以一般開啟專門的現場進行網路通訊。

伺服器端網路程式設計步驟

伺服器端(Server)是指在網路程式設計中被動等待連線的程式,伺服器端一般實現程式的核心邏輯以及資料儲存等核心功能。伺服器端的程式設計步驟和客戶端不同,是由四個步驟實現,依次是:

  • 1、 監聽埠

伺服器端屬於被動等待連線,所以伺服器端啟動以後,不需要發起連線,而只需要監聽本地計算機的某個固定埠即可。
這個埠就是伺服器端開放給客戶端的埠,伺服器端程式執行的本地計算機的IP地址就是伺服器端程式的IP地址。

  • 2、 獲得連線

當客戶端連線到伺服器端時,伺服器端就可以獲得一個連線,這個連線包含客戶端的資訊,例如客戶端IP地址等等,伺服器端和客戶端也通過該連線進行資料交換。
一般在伺服器端程式設計中,當獲得連線時,需要開啟專門的執行緒處理該連線,每個連線都由獨立的執行緒實現。

  • 3、 交換資料

伺服器端通過獲得的連線進行資料交換。伺服器端的資料交換步驟是首先接收客戶端傳送過來的資料,然後進行邏輯處理,再把處理以後的結果資料傳送給客戶端。簡單來說,就是先接收再傳送,這個和客戶端的資料交換數序不同。
其實,伺服器端獲得的連線和客戶端連線是一樣的,只是資料交換的步驟不同。
當然,伺服器端的資料交換也是可以多次進行的。
在資料交換完成以後,關閉和客戶端的連線。

  • 4、 關閉連線

當伺服器程式關閉時,需要關閉伺服器端,通過關閉伺服器端使得伺服器監聽的埠以及佔用的記憶體可以釋放出來,實現了連線的關閉。

網路協議

網路協議是指對於網路中傳輸的資料格式的規定。對於網路程式設計初學者來說,沒有必要深入瞭解TCP/IP協議簇,所以對於初學者來說去讀大部頭的《TCP/IP協議》也不是一件很合適的事情,因為深入瞭解TCP/IP協議是網路程式設計提高階段,也是深入網路程式設計底層時才需要做的事情。

對於一般的網路程式設計來說,更多的是關心網路上傳輸的邏輯資料內容,也就是更多的是應用層上的網路協議,所以後續的內容均以實際應用的資料為基礎來介紹網路協議的概念。

這就是一種雙方達成的一種協議約定,其實這種約定的實質和網路協議的實質是一樣的。網路協議的實質也是客戶端程式和伺服器端程式對於資料的一種約定,只是由於以計算機為基礎,所以更多的是使用數字來代表內容,這樣就顯得比較抽象一些。

不管怎麼說,在網路程式設計中,對於同一個網路程式來說,一般都會涉及到兩個網路協議格式:客戶端傳送資料格式和伺服器端反饋資料格式,在實際設計時,需要一一對應。這就是最基本的網路協議的知識。

網路協議設計完成以後,在進行網路程式設計時,就需要根據設計好的協議格式,在程式中進行對應的編碼了。

客戶端程式需要完成的處理為:

  • 1、 客戶端傳送協議格式的生成
  • 2、 伺服器端反饋資料格式的解析

伺服器端程式需要完成的處理為:

  • 1、 伺服器端反饋協議格式的生成
  • 2、 客戶端傳送協議格式的解析
    這裡的生成是指將計算好的資料,轉換成規定的資料格式,這裡的解析指,從反饋的資料格式中拆分出需要的資料。在進行對應的程式碼編寫時,嚴格遵循協議約定即可。

所以,對於程式設計師來說,在進行網路程式編寫時,需要首先根據邏輯的需要設計網路協議格式,然後遵循協議格式約定進行協議生成和解析程式碼的編寫,最後使用網路程式設計技術實現整個網路程式設計的功能。

由於各種網路程式使用不同的協議格式,所以不同網路程式的客戶端之間無法通用。

而對於常見協議的格式,例如HTTP(Hyper Text Transfer Protocol,超文字傳輸協議)、FTP(File Transfer Protocol,檔案傳輸協議),SMTP(Simple Mail Transfer Protocol,簡單郵件傳輸協議)等等,都有通用的規定,具體可以查閱相關的RFC文件。

最後,對於一種網路程式來說,網路協議格式是該程式最核心的技術祕密,因為一旦協議格式洩漏,則任何一個人都可以根據該格式進行客戶端的編寫,這樣將影響伺服器端的實現,也容易出現一些其它的影響。

教材學習中的問題和解決過程

  • 1.這是我執行InetAddressDemo的結果

20145320 《Java程式設計》第10周學習總結

不止使用這個可以得到本機的IP地址,在cmd命令列中輸入ipconfig,也可以得到
20145320 《Java程式設計》第10周學習總結

大家可以看到我的電腦的IP地址為10.43.39.110

  • 2.在執行SimpleSocketClient的時候,發現執行出現錯誤了,上網找了一下發現原來是埠8080被佔用了,更換了埠號10000以後就成功了

20145320 《Java程式設計》第10周學習總結

修改埠為10000後
20145320 《Java程式設計》第10周學習總結

其他(感悟、思考等,可選)

該部分介紹了網路程式設計的基礎知識,以及Java語言對於網路程式設計的支援,網路程式設計的步驟等,並詳細介紹了TCP方式網路程式設計和UDP方式網路程式設計在Java語言中的實現。

我覺得網路協議也是網路程式的核心,所以在實際開始進行網路程式設計時,設計一個良好的協議格式也是必須進行的工作。從我們學的計算機網路這門課程,我們可以得知有許多協議,例如應用層協議、資料層協議、網路差協議等等。

學習進度條

上傳程式碼行數如下
20145320 《Java程式設計》第10周學習總結
| | 程式碼行數(新增/累積)| 部落格量(新增/累積)|學習時間(新增/累積)|
| -------- | :----------------:|:----------------:|:---------------: |
| 目標 | 5000行 | 30篇 | 400小時 | |
| 第一週 | 200/200 | 1/1 | 20/20 | |
| 第二週 | 300/500 | 1/2 | 18/38 | |
| 第三週 | 500/1000 | 1/3 | 22/60 | |
| 第四周 | 500/1500 | 1/4 | 30/90 | |
| 第五週 | 400/1900 | 1/5 | 20/110 | |
| 第六週 | 400/2300 | 2/7 | 20/130 | |
| 第七週 | 300/2600 | 2/9 | 15/145 | |
| 第八週 | 284/2884 | 2/11 | 20/165 |
|
| 第九周 | 923/3807 | 2/13 | 20/185 |
|
| 第十週 | 379/3466 | 2/15 | 20/205 |

參考資料

相關文章