201521123077 《Java程序設計》第13周學習總結

1. 本週學習總結

1.1以你喜歡的方式(思惟導圖、OneNote或其餘)概括總結多網絡相關內容。

介紹的傳輸層協議 :java

  • TCP
    可靠:具備失敗重傳功能
    開銷較大:須要創建鏈路 須要維持傳輸中的關係
    控制能力較強:具備例如窗口技術這樣控制流量的技術 能夠有效地防止整個網絡癱瘓
  • UDP
    開銷小:UDP報字段比TCP的更小 開銷也更小
    不可靠:UDP盡力幫你傳輸數據,能不能到達目的地就看天意了(x

相應的介紹了java中的套接字 :
socket 相似於應用層與運輸層之間的接口編程

  • ServerSocket與Socket
    將java中的使用TCP協議的socket封裝成流的形式
    用戶只須要將該socket看作一個延遲較高的流來操做就行 隱藏了具體的網絡細節
  • DatagramSocket
    將java中的使用UDP協議的socket封裝成流的形式小程序

    2. 書面做業

  1. 網絡基礎瀏覽器

    1.1 比較ping www.baidu.com與ping cec.jmu.edu.cn,分析返回結果有何不一樣?爲何會有這樣的不一樣?

回覆的ip地址不一樣,數據包往返時間也不一樣
由於這兩個域名並不指向同一個ip
能夠看到學校的網站比百度搜索頁所耗費的時間更短,由於地理上學校網站主機應該會離本機更近,通過的網絡環境也更簡單服務器

1.2 telnet bbs.newsmth.net,上面這條命令鏈接的是遠程主機的什麼端口號?

23 telnet命令默認端口號23網絡

1.3 telnet cec.jmu.edu.cn 80,嘗試回答:你從屏幕看到一些什麼內容?返回的內容是否是cec.jmu.edu.cn的主頁內容?嘗試使用GET / HTTP/1.0命令,會返回什麼?詳見實驗任務書題目1。

看到網頁源代碼
多線程

渲染後就是咱們平常看到的網頁socket

1.4 啓動ConnectionWatcher, 而後啓動若干個能夠聯網的程序(如QQ, telnet,瀏覽器等),查看本機上有什麼程序聯網,使用了什麼端口?QQ佔用了什麼端口和那些遠程IP進行交互,這些IP分佈地在那裏?使用了什麼協議進行通訊?

大部分都是使用了1024以上的端口
QQ佔用了幾個1024以上的端口,例如與qq好友對話那目標IP地址就是好友的因特網地址
QQ有的服務使用了TCP,有的服務使用了UDP,像語音通話這樣容許必定程度的丟包而且對延遲比較不能容忍的的使用的就是雖然不可靠可是快的UDP協議tcp

1.5 編寫網絡程序必不可少的幾個信息是什麼?

  • 通訊的各方的ip地址
  • 鏈接的通訊方式(主要是應用層協議
  • 該程序的定位(是做爲客戶端仍是服務器等

2. 編寫TCP客戶端程序

2.1 參照SocketTest.java編寫一個簡單的鏈接遠程服務器小程序Client.java,能夠接收並顯示服務器發送的信息。啓動時須要首先在控制檯指定遠程主機IP與端口號。(截圖,出現本身學號)

2.2 將程序中的網址改爲bbs.newsmth.net,端口號改成23,再次觀察返回結果?嘗試執行telnet bbs.newsmth.net 23,對比返回結果。

IDE內部的控制檯顯示的不是彩色的界面函數

2.3 將程序中的網址改爲cec.jmu.edu.cn,端口號改成80進一步觀察返回結果。沒有任何返回結果,爲何?怎麼操做

要先服務器發出GET請求才會有返回結果

2.4 啓動網絡調試助手,將其設置爲TCP Server,並啓動,以下圖所示

同2.1

2.5 回答:如今的Client.java只能接收信息,可否改造Client.java使其能夠與服務器進行交互(服務器能夠發送信息給Client,Client也可發送信息給服務器),寫出大概思路便可。

使用多線程再創建一個專門用於讀取用戶控制檯輸入並將其發往套接字的線程

2.6 選作:實現2.5

參考:實驗任務書-題目2

3. ServerSocket與TCP服務器

3.1 簡易單線程MenuServer,題目3.1-3.4。(關鍵代碼及運行截圖,包含學號)可使用網絡調試助手,將其設置爲TCP Client(IP與端口填你的MenuServer的IP與端口),鏈接你的MenuServer。其中的文件搜索功能爲選作。

見3.2多線程服務器

3.2 多線程MenuServer(截圖證實你這個是多線程服務器,使用telnet鏈接)。

main函數負責處理接入的socket,對於每一個接入創建一個線程來處理該socket的交互,每一個處理線程又有對應的一個接受控制檯輸入的線程用於服務器與客戶端們交互

4. UDP服務器

4.1 改造3.1或3.2,將其改形成基於UDP的MenuServer。(運行界面代碼截圖,包含學號)。可使用網絡調試助手,將其設置爲UDP,要填本機IP與端口也要填遠程服務器的IP與端口。

除了一些方法不同之外其它操做基本相同

5. 論述題:網絡程序與流

5.1 前面編寫的程序用到了大量的流的相關知識。簡述,編寫網絡程序時應當選擇什麼樣的流?Java網絡編程、流之間的關係。場景如:簡單的文字聊天、文件傳輸、應用層協議服務器,如QQ、聊天室、網絡遊戲。

要根據咱們要寫的程序自己的定位來決定要使用什麼樣的流

具體看程序的幾個特性 :

  • 是否容許少許的丟失數據
    好比郵件傳輸就不容許丟失數據
    而語音通話之類的能夠容許少許的丟失,實際上若是在語音通話中對丟失的包進行重發飯反而會致使通話混亂的狀況(忽然聽見對方在10秒前說的話)
  • 是否對時間很敏感
    例如網遊之類的程序,尤爲是FPS遊戲,對即時性比較看重,傳輸較慢開銷較大的協議就不太適合

等等

6. 代碼閱讀

閱讀ServerAndThread目錄中的源代碼

6.1 修改程序,在GUI界面中某個地方顯示本身的學號,而後運行該程序(截圖、出現學號)。簡述這個程序的主要功能。

用簡單UI的作一個多線程的服務器-客戶端模式的程序,服務器能夠在客戶端之間傳遞數據

6.2 畫出源代碼的結構圖(各個類的依賴關係)。並簡要說明各個類的功能。

6.3 簡述這個程序有什麼不足之處及改進方法.

UI比較粗糙 還不支持ip地址的動態使用,源代碼中只是用了環回地址,也就是說只能本地使用

相關文章
相關標籤/搜索