天天看點

201521123074 《Java程式設計》第13周學習總結

1. 本周學習總結

以你喜歡的方式(思維導圖、OneNote或其他)歸納總結多網絡相關内容。

201521123074 《Java程式設計》第13周學習總結

2. 書面作業

Q1. 網絡基礎 參考:實驗任務書-題目1

1.1 比較

ping www.baidu.com

ping cec.jmu.edu.cn

,分析傳回結果有何不同?為什麼會有這樣的不同?

A :

ping www.baidu.com

201521123074 《Java程式設計》第13周學習總結

ping cec.jmu.edu.cn

201521123074 《Java程式設計》第13周學習總結
  • 首先是

    www.a.shifen.com

    jmuweb2.jmu.edu.cn

    的差別。因為ping的是不同的網站,是以肯定顯示的是不同的。然而為什麼不是

    www.baidu.com

    cec.jmu.edu.cn

    呢?(悄悄去百度了一下)大概就是一種防止被黑客用很多殭屍電腦同時攻擊堵住網站的出站口的一種手段,相當與為了維護網站安全的一種僞裝。
  • 其次就是

    112.80.248.74

    210.34.128.152

    的不同。這兩串數字是兩個網站的域名。不同網站擁有不同的域名這是毋庸置疑的。但是一個比較有意思的地方:我同樣的再去ping百度,回報回來的ip是不一樣的。(然後我又去百度了一下)原來類似百度這樣的大型網站是有很多的伺服器的,是以每ping一次回報的ip都不同。
  • 然後是TTL值的不同。TTL是一個ip協定的值,它告訴網絡,資料包在網絡中的時間是否太長而應被丢棄。(這是百度看到的,具體的沒有深究。)
  • 最後就是一些傳送時間的不同。猜想應該是與自己的網速、距離以及正在使用網站的人數有關。

1.2

telnet bbs.newsmth.net

,上面這條指令連接配接的是遠端主機的什麼端口号?

A :23号端口号。因為使用的是Telnet指令。

1.3

telnet cec.jmu.edu.cn 80

,嘗試回答:你從螢幕看到一些什麼内容?傳回的内容是不是cec.jmu.edu.cn的首頁内容?嘗試使用

GET /index HTTP/1.0

指令,會傳回什麼?詳見實驗任務書題目1。

A :首先輸入

telnet cec.jmu.edu.cn 80

。啥也沒看到,一片黑。傳回的不是其首頁内容。使用

GET /index HTTP/1.0

指令後,傳回首頁内容。

1.4 啟動ConnectionWatcher, 然後啟動若幹個可以聯網的程式(如QQ, telnet,浏覽器等),檢視本機上有什麼程式聯網,使用了什麼端口?QQ占用了什麼端口和那些遠端IP進行互動,這些IP分布地在那裡?使用了什麼協定進行通信?

201521123074 《Java程式設計》第13周學習總結
  • 本機有QQ、浏覽器、360安全衛士、電腦管家等程式聯網,分别使用的端口如上圖所示。
  • 看其中第二條。QQ占用本地

    49432端口

    ,與遠端

    163.177.92.121

    TP進行互動,IP分布地去網上查了兩條,如下圖所示。使用TCP協定進行通信。
    201521123074 《Java程式設計》第13周學習總結
    201521123074 《Java程式設計》第13周學習總結

1.5 編寫網絡程式必不可少的幾個資訊是什麼?

A :協定、端口、IP、域名、指令。

**Q2. 編寫TCP用戶端程式**

2.1 參照SocketTest.java編寫一個簡單的連接配接遠端伺服器小程式Client.java,可以接收并顯示伺服器發送的資訊。啟動時需要首先在控制台指定遠端主機IP與端口号。(截圖,出現自己學号)

201521123074 《Java程式設計》第13周學習總結

2.2 将程式中的網址改成bbs.newsmth.net,端口号改為23,再次觀察傳回結果?嘗試執行

telnet bbs.newsmth.net 23

,對比傳回結果。

201521123074 《Java程式設計》第13周學習總結
201521123074 《Java程式設計》第13周學習總結

2.3 将程式中的網址改成cec.jmu.edu.cn,端口号改為80進一步觀察傳回結果。沒有任何傳回結果,為什麼?怎麼操作

A :我們連接配接cec.jmu.edu.cn的80端口,實際上使用了應用層HTTP協定。沒有任何傳回結果是因為沒有使用HTTP協定獲得資料。操作就是建立一條輸出流,用

pw.println("GET / HTTP/1.0")

pw.println()

語句模拟HTTP請求,再重新整理緩沖區即可。

2.4 啟動網絡調試助手,将其設定為TCP Server,并啟動,如下圖所示

201521123074 《Java程式設計》第13周學習總結

嘗試使用

Client.java

連接配接該TCP Server,使用該伺服器向Client發送資訊。(截圖)

201521123074 《Java程式設計》第13周學習總結

2.5 回答:現在的

Client.java

隻能接收資訊,能否改造Client.java使其可以與伺服器進行互動(伺服器可以發送資訊給Client,Client也可發送資訊給伺服器),寫出大概思路即可。

A :先建立Socect對象的輸出流,建立一個PrintWriter對象,調用其println方法向輸出流中寫,此時是寫進了緩沖區裡,再調用flsh方法重新整理即可發資訊給Client。

**Q3. ServerSocket與TCP伺服器**

3.1 簡易單線程MenuServer,題目3.1-3.4。(關鍵代碼及運作截圖,包含學号)可以使用網絡調試助手,将其設定為TCP Client(IP與端口填你的MenuServer的IP與端口),連接配接你的MenuServer。其中的

檔案搜尋功能

為選做。

201521123074 《Java程式設計》第13周學習總結

3.2 多線程MenuServer(截圖證明你這個是多線程伺服器,使用telnet連接配接)。

A :證明是多線程,如下圖。
201521123074 《Java程式設計》第13周學習總結
用telnet連結,如下圖。
201521123074 《Java程式設計》第13周學習總結

**Q4. UDP伺服器**

4.1 改造3.1或3.2,将其改造成基于UDP的MenuServer。(運作界面代碼截圖,包含學号)。可以使用網絡調試助手,将其設定為UDP,要填本機IP與端口也要填遠端伺服器的IP與端口。參考:UDPServer.java

201521123074 《Java程式設計》第13周學習總結
嘗試參考代碼改了一下,如上。但是具體的都不懂,抱歉真的不會做 T T

**Q5. 論述題:網絡程式與流**

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

A :編寫網絡程式時應該選擇

InputStream

OutputStream

這兩個流。java網絡程式設計建立Socket對象後,對其中的流進行操作,完成相應的輸入輸出要求。

**Q6. 代碼閱讀**

閱讀ServerAndThread目錄中的源代碼

6.1 運作該程式(截圖)。簡述這個程式的主要功能。

201521123074 《Java程式設計》第13周學習總結
是一個簡易版的聊天工具吧。服務端用戶端可互動資訊,進行通訊。

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

201521123074 《Java程式設計》第13周學習總結

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

A :不足:如截圖所示,某一個用戶端發送消息後,其他用戶端并不能知道具體是哪一個人發送的消息。

改進方法:某一個用戶端發送資訊時,輸出具體用戶端ID給其他用戶端。

#3. 碼雲

碼雲代碼送出記錄

在碼雲的項目中,依次選擇“統計-Commits曆史-設定時間段”, 然後搜尋并截圖

201521123074 《Java程式設計》第13周學習總結

#4.課外閱讀

4.2 HTTP協定簡介

A :HTML是一種用來定義網頁的文本,HTTP是在網絡上傳輸HTML的協定,用于浏覽器和伺服器的通信。是以例如用URL去浏覽網頁,傳過來的是網站的HTML代碼。

4.3一個簡單的小爬蟲

Java程式設計技巧:小爬蟲程式.docx

A :啊哈哈,這個感覺還挺有意思的。

步驟:1.把所有想要的商品的連結讀到程式中。

  2. 分别打開每一個連結讀取源代碼

  3. 驗證是否是金子商品(源代碼中含有free_msg字元串)

  4. 如果是金子就把該連結用IE打開

  省去了要一個一個自己手動去點去浏覽的過程,代碼直接把免費的東西彈出來,自然比别人慢慢加載來的快很多。