20145202馬超 2016-2017-2 《Java程序設計》第10周學習總結

學號 2016-2017-2 《Java程序設計》第X周學習總結

教材學習內容總結

1、網絡編程html

1.網絡概述
網絡編程就是在兩個或兩個以上的設備(例如計算機)之間傳輸數據。程序員所做的事情就是把數據發送到指定的位置,或者接收到指定的數據,這個就是狹義的網絡編程範疇。在發送和接收數據時,大部分的程序設計語言都設計了專門的API實現這些功能,程序員只須要調用便可。
網絡編程技術是當前一種主流的編程技術,隨着聯網趨勢的逐步加強以及網絡應用程序的大量出現,因此在實際的開發中網絡編程技術得到了大量的使用。java

2.計算機網絡概述:
按照計算機網絡的定義,經過必定的物理設備將處於不一樣位置的計算機鏈接起來組成的網絡,這個網絡中包含的設備有:計算機、路由器、交換機等等。git

爲了可以方便的識別網絡上的每一個設備,網絡中的每一個設備都會有一個惟一的數字標識,這個就是IP地址。在計算機網絡中,如今命名IP地址的規定是IPv4協議,每一個接入網絡的計算機都擁有惟一的IP地址,這個IP地址多是固定的,也能夠是動態的。程序員

域名:例如sohu.com,一個IP地址能夠對應多個域名,一個域名只能對應一個IP地址。算法

DNS服務器是在實際傳輸數據之前將域名轉換爲IP地址的服務器,當用戶在瀏覽器輸入域名時,瀏覽器首先請求DNS服務器,將域名轉換爲IP地址,而後將轉換後的IP地址反饋給瀏覽器,而後再進行實際的數據傳輸。數據庫

端口是爲了讓一個計算機能夠同時運行多個網絡程序,在同一個計算機中每一個程序對應惟一的端口,這樣一個計算機上就能夠經過端口區分發送給每一個端口的數據了,換句話說,也就是一個計算機上能夠併發運行多個網絡程序,而不會在互相之間產生干擾。編程

3.網絡編程概述:
網絡通信基於「請求-響應」模型,在網絡通信中,第一次主動發起通信的程序被稱做客戶端(Client)程序,簡稱客戶端,而在第一次通信中等待鏈接的程序被稱做服務器端(Server)程序,簡稱服務器。一旦通信創建,則客戶端和服務器端徹底同樣,沒有本質的區別。數組

網絡編程中常見的兩種結構:C/S結構和B/S結構。C/S結構即客戶端/服務器結構,在開發時須要分別開發客戶端和服務器端,這種結構的優點在於因爲客戶端是專門開發的,能夠根據須要實現各類效果,它的缺點在於通用性查,維護壓力大。B/S結構即瀏覽器/服務器結構,在開發時只須要開發服務器端便可,這種結構的優點在於開發的壓力比較小,不須要維護客戶端,可是覽器的限制比較大,表現力不強。瀏覽器

P2P程序是一種特殊的程序,應該一個P2P程序中既包含客戶端程序,也包含服務器端程序,例如BT,使用客戶端程序部分鏈接其它的種子(服務器端),而使用服務器端向其它的BT客戶端傳輸數據。服務器

在實際進行數據交換時,爲了讓接收端理解該數據,計算機比較笨,什麼都不懂的,那麼就須要規定該數據的格式,這個數據的格式就是協議。

4.網絡通信方式:
網絡通信的方式主要有兩種:TCP(傳輸控制協議)方式和UDP(用戶數據報協議)方式。

TCP方式須要創建專門的虛擬鏈接,而後進行可靠的數據傳輸,若是數據發送失敗,則客戶端會自動重發該數據。而UDP方式就相似於發送短信,使用這種方式進行網絡通信時,不須要創建專門的虛擬鏈接,傳輸也不是很可靠,若是發送失敗則客戶端沒法得到。

重要的數據通常使用TCP方式進行數據傳輸,而大量的非核心數據則都經過UDP方式進行傳遞,在一些程序中甚至結合使用這兩種方式進行數據的傳遞。
網絡編程技術。

5.客戶端網絡編程步驟:
創建網絡鏈接:客戶端網絡編程的第一步都是創建網絡鏈接。在創建網絡鏈接時須要指定鏈接到的服務器的IP地址和端口號,創建完成之後,會造成一條虛擬的鏈接,後續的操做就能夠經過該鏈接實現數據交換了。

6.交換數據:鏈接創建之後,就能夠經過這個鏈接交換數據了。交換數據嚴格按照請求響應模型進行,由客戶端發送一個請求數據到服務器,服務器反饋一個響應數據給客戶端,若是客戶端不發送請求則服務器端就不響應。

7.關閉網絡鏈接:在數據交換完成之後,關閉網絡鏈接,釋放程序佔用的端口、內存等系統資源,結束網絡編程。

8.服務器端網絡編程步驟:
(1)、監聽端口:服務器端屬於被動等待鏈接,因此服務器端啓動之後,不須要發起鏈接,而只須要監聽本地計算機的某個固定端口便可,這個端口就是服務器端開放給客戶端的端口,服務器端程序運行的本地計算機的IP地址就是服務器端程序的IP地址。
(2)、得到鏈接:當客戶端鏈接到服務器端時,服務器端就能夠得到一個鏈接,這個鏈接包含客戶端的信息,例如客戶端IP地址等等,服務器端和客戶端也經過該鏈接進行數據交換,通常在服務器端編程中,當得到鏈接時,須要開啓專門的線程處理該鏈接,每一個鏈接都由獨立的線程實現。
(3)、交換數據:服務器端經過得到的鏈接進行數據交換。服務器端的數據交換步驟是首先接收客戶端發送過來的數據,而後進行邏輯處理,再把處理之後的結果數據發送給客戶端。簡單來講,就是先接收再發送,這個和客戶端的數據交換數序不一樣。
(4)、關閉鏈接:當服務器程序關閉時,須要關閉服務器端,經過關閉服務器端使得服務器監聽的端口以及佔用的內存能夠釋放出來,實現了鏈接的關閉。

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


2、TCP編程
1.在客戶端網絡編程中,首先須要創建鏈接,在Java API中以java.net.Socket類的對象表明網絡鏈接,因此創建客戶端網絡鏈接,也就是建立Socket類型的對象,該對象表明網絡鏈接,示例以下:Socket socket = new Socket(「192.168.1.103」,10000);
2.鏈接創建以後,而後按照「請求-響應」模型進行網絡數據交換,在Java語言中,數據傳輸功能由Java IO實現,也就是說只須要從鏈接中得到輸入流和輸出流便可,而後將須要發送的數據寫入鏈接對象的輸出流中,在發送完成之後從輸入流中讀取數據便可:OutputStream os = socket1.getOutputStream();
3.最後當數據交換完成之後,關閉網絡鏈接,釋放網絡鏈接佔用的系統端口和內存等資源,完成網絡操做:socket.close();

TCP服務器編程:
1.在服務器端程序編程中,因爲服務器端實現的是被動等待鏈接,因此服務器端編程的第一個步驟是監聽端口,也就是監聽是否有客戶端鏈接到達:ServerSocket ss = new ServerSocket(10000);
2.而後是得到鏈接,當有客戶端鏈接到達時,創建一個和客戶端鏈接對應的Socket連 接對象,從而釋放客戶端鏈接對於服務器端端口的佔用:Socket socket = ss.accept();
3.鏈接得到之後,後續的編程就和客戶端的網絡編程相似了,這裏得到的Socket類型的鏈接就和客戶端的網絡鏈接同樣了,只是服務器端須要首先讀取發送過來的數據,而後進行邏輯處理之後再發送給客戶端,也就是交換數據的順序和客戶端交換數據的步驟恰好相反。
4.最後,在服務器端通訊完成之後,關閉服務器端鏈接:ss.close();

3、UDP編程
1.使用UDP方式無需創建專用的虛擬鏈接,因爲無需創建專用的鏈接,因此對於服務器的壓力要比TCP小不少,可是使用該種方式最大的不足是傳輸不可靠,因此在網絡編程中,必需要求可靠傳輸的信息通常使用TCP方式實現,通常的數據才使用UDP方式實現。

2.UDP方式的網絡編程也在Java語言中得到了良好的支持,因爲其在傳輸數據的過程當中不須要創建專用的鏈接等特色,因此在Java API中設計的實現結構和TCP方式不太同樣。固然,須要使用的類仍是包含在java.net包中。

3.在Java API中,實現UDP方式的編程,包含客戶端網絡編程和服務器端網絡編程,主要由兩個類實現:
DatagramSocket:DatagramSocket實現的是發送數據時的發射器,以及接收數據時的監聽器的角色。類比於TCP中的網絡鏈接,該類既能夠用於實現客戶端鏈接,也能夠用於實現服務器端鏈接。
DatagramPacket:類的對象表明網絡中交換的數據。在UDP方式的網絡編程中,不管是須要發送的數據仍是須要接收的數據,都必須被處理成DatagramPacket類型的對象,該對象中包含發送到的地址、發送到的端口號以及發送的內容等。

UDP客戶端編程:
1.UDP方式的創建鏈接和TCP方式不一樣,只須要創建一個鏈接對象便可,不須要指定服務器的IP和端口號碼,示例以下:DatagramSocket ds = new DatagramSocket();
2.使用UDP在發送數據時,須要將須要發送的數據內容首先轉換爲byte數組,而後將數據內容、服務器IP和服務器端口號一塊兒構形成一個DatagramPacket類型的對象,這樣數據的準備就完成了,發送時調用網絡鏈接對象中的send方法發送該對象便可,一樣,UDP方式在進行網絡通信時,也遵循「請求-響應」模型。
3.UDP的接收數據是這樣實現的:首先構造一個數據緩衝數組,該數組用於存儲接收的服務器端反饋數據,該數組的長度必須大於或等於服務器端反饋的實際有效數據的長度。而後以該緩衝數組爲基礎構造一個DatagramPacket數據包對象,最後調用鏈接對象的receive方法接收數據便可。接收到的服務器端反饋數據存儲在DatagramPacket類型的對象內部。
4.UDP關閉鏈接,使用鏈接對象中的close方法便可:ds.close();

UDP方式的網絡編程因爲不創建虛擬的鏈接,因此在實際使用時和TCP方式存在不少的不一樣,最大的一個不一樣就是「無狀態」。該特色指每次服務器端都收到信息,可是這些信息和鏈接無關,換句話說,也就是服務器端只是從信息是沒法識別出是誰發送的,這樣就要求發送信息時的內容須要多一些,屢次發送客戶端:實現的原理和TCP方式相似,在客戶端將數據的發送和接收放入循環中,而服務器端則將接收到的每一個數據包啓動一個專門的線程進行處理。併發處理數據包的服務器:用一個循環來接收客戶端發送過來的數據包,當接收到數據包之後啓動一個LogicThread線程處理該數據包。這樣服務器端就能夠實現同時處理多個數據包了。

4、網絡協議
網絡協議是指對於網絡中傳輸的數據格式的規定,其實質也是客戶端程序和服務器端程序對於數據的一種約定。

對於同一個網絡程序來講,通常都會涉及到兩個網絡協議格式:客戶端發送數據格式和服務器端反饋數據格式,在實際設計時,須要一一對應。

客戶端程序須要完成的處理爲:
1.客戶端發送協議格式的生成
2.服務器端反饋數據格式的解析
服務器端程序須要完成的處理爲:
1.服務器端反饋協議格式的生成
2.客戶端發送協議格式的解析

教材學習有問題先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,若是別人沒有提出相同問題,能夠編輯文檔添加,而後把本身提出的問題複製到下面:

  • 問題1:加密算法雖然可以加密可是對於緩衝區溢出的攻擊貌似加密算法並不能解決
  • 問題1解決方案:能夠直接設置成錐堆棧不能修改,或者處理好邊界問題就能夠。

    代碼調試中的問題和解決過程

教材中代碼調試有問題先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,若是別人沒有提出相同問題,能夠編輯文檔添加,而後把本身提出的問題複製到下面:

  • 此次的代碼基本上都是找的成品,沒啥問題

代碼託管

上週考試錯題總結

結對及互評

評分標準

  1. 正確使用Markdown語法(加1分):
  2. 模板中的要素齊全(加1分)
  3. 教材學習中的問題和解決過程, 一個問題加1分,1分
  4. 其餘加分:
    • 感想,體會不假大空的加1分
    • 排版精美的加一分
    • 進度條中記錄學習時間與改進狀況的加1分
    • 有動手寫新代碼的加1分
    • 課後選擇題有驗證的加1分
    • 代碼Commit Message規範的加1分
    • 錯題學習深刻的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 結對學習狀況真實可信的加1分
  • 基於評分標準,我給本博客打分:12分。

  • 參考示例

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20155303
    • 結對照片

    • 結對學習內容
      • 研究邊界的問題。
  • 上週博客互評狀況()

  • 只有一我的回覆博客互評那個活動,因此我也就之評論了一我的。

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

xxx
xxx

學習進度條

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

  • 計劃學習時間:20小時

  • 實際學習時間:14小時

  • 改進狀況:

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索