1. 本週學習總結
1.以你喜歡的方式(思惟導圖、OneNote或其餘)概括總結多網絡相關內容。
2. 書面做業
1. 網絡基礎
1.1 比較ping www.baidu.com
與ping cec.jmu.edu.cn
,分析返回結果有何不一樣?爲何會有這樣的不一樣?
不一樣在於:javascript
- 他們的IP不一樣,
ping www.baidu.com
爲:163.177.151.110;ping cec.jmu.edu.cn
爲:210.34.128.152。
- 完成一次網絡交互的時間不一樣,
ping www.baidu.com
爲:19ms完成一次網絡交互;ping cec.jmu.edu.cn
爲:小於等於1ms完成一次網絡交互。
- TTL的值不一樣,
ping www.baidu.com
爲:51,中間通過了13個網絡設備;ping www.baidu.com
爲:61,表示中間通過了3個網絡設備。
- 返還行程的時間不一樣,
ping www.baidu.com
爲:最短19ms,最長19ms,平均19ms; ping cec.jmu.edu.cn
爲:最短0ms,最長1ms,平均0ms。
由於IP地址: 163.177.151.110
在廣東省廣州市 聯通,而IP地址:210.34.128.152
在福建省廈門市 教育網。而210.34.128.152
離咱們的距離更近,因此它的速度更快,進過的網絡設備更少,本質上是由於他們的IP地址不一樣。html
1.2 telnet bbs.newsmth.net
,上面這條命令鏈接的是遠程主機的什麼端口號?
這條命令鏈接的是遠程主機的23端口號。java
1.3 telnet cec.jmu.edu.cn 80
,嘗試回答:你從屏幕看到一些什麼內容?返回的內容是否是cec.jmu.edu.cn的主頁內容?嘗試使用GET /index HTTP/1.0
命令,會返回什麼?詳見實驗任務書題目1。
- 沒有如何結果,因此返回的內容不是cec.jmu.edu.cn的主頁內容。
1.4 啓動ConnectionWatcher, 而後啓動若干個能夠聯網的程序(如QQ, telnet,瀏覽器等),查看本機上有什麼程序聯網,使用了什麼端口?QQ佔用了什麼端口和那些遠程IP進行交互,這些IP分佈地在那裏?使用了什麼協議進行通訊?
- 360程序聯網,使用了80端口。
- UC瀏覽器聯網,使用了80端口。
- 搜狐新聞聯網,使用了80端口。
- QQ使用了80,443端口和那些遠程IP進行交互,這些IP分佈地:例如:
183.61.38.217
來自廣東省深圳市 電信,110.81.153.148
來自福建省泉州市 電信等。使用了TCP協議和UDP協議進行通訊。
1.5 編寫網絡程序必不可少的幾個信息是什麼?
編寫網絡程序必不可少的幾個信息是:正則表達式
- 套接字,即須要掌握和了解應用程序和網絡協議的接口。
- TCP協議和UDP協議的掌握和使用。
- 以及須要瞭解IP,端口,域名等基礎知識。
2. 編寫TCP客戶端程序
2.1 參照SocketTest.java編寫一個簡單的鏈接遠程服務器小程序Client.java,能夠接收並顯示服務器發送的信息。啓動時須要首先在控制檯指定遠程主機IP與端口號。(截圖,出現本身學號)
2.2 將程序中的網址改爲bbs.newsmth.net,端口號改成23,再次觀察返回結果?嘗試執行telnet bbs.newsmth.net 23
,對比返回結果。
兩個返回結果基本上是一致的,只是eclipse上有的字符不可以識別,不能顯示出來。編程
2.3 將程序中的網址改爲cec.jmu.edu.cn,端口號改成80進一步觀察返回結果。沒有任何返回結果,爲何?怎麼操做?
- 由於只是輸入了網址和端口號,並無使用
GET / HTTP/1.0
發出讀取請求,來得到此網頁的數據,因此沒有任何返回結果。
- 再添上
GET / HTTP/1.0
就好了。
2.4 啓動網絡調試助手,將其設置爲TCP Server,並啓動,以下圖所示
嘗試使用Client.java
鏈接該TCP Server,使用該服務器向Client發送信息。(截圖)
2.5 回答:如今的Client.java
只能接收信息,可否改造Client.java
使其能夠與服務器進行交互(服務器能夠發送信息給Client,Client也可發送信息給服務器),寫出大概思路便可。
使用Socket中的getOutputStream類,並對其進行包裝,可使用PrintWriter類,由於其輸出的是字符文本。而且是從客戶端輸入到服務器端,因此咱們就可使用Scanner類,在控制檯輸入,並使用println輸出到服務器端。最後由於PrintWriter類有使用到緩衝區,這時就須要咱們使用flush()釋放緩衝區。小程序
2.6 選作:實現2.5
3. ServerSocket與TCP服務器
- 能夠控制服務器的啓動中止、查看客戶端連接的基本信息(IP、端口、連接時間)
- 拓展:在服務器端斷開某個客戶端的連接、查看客戶端發送的給服務器端的日誌記錄
- 參考:實驗任務書-題目3
- 參考:
EchoServer.java
,ThreadedEchoServer.java (多線程服務器)
4. UDP服務器
5.論述題: 網絡程序與流
5.1 前面編寫的程序用到了大量的流的相關知識。簡述,編寫網絡程序時應當選擇什麼樣的流?Java網絡編程、流之間的關係。場景如:簡單的文字聊天、文件傳輸、應用層協議服務器,如QQ、聊天室、網絡遊戲。
- 編寫網絡程序時應當選擇可以進行數據交換的流或者是與程序相關的流。例如:當咱們進行簡單的文字聊天時,咱們應該選擇輸入流和輸出流對咱們之間的交流文字進行交換,已達到咱們之間可以進行交流的目的。此時的輸入流和輸出流是字節流,再用字符流包裝。
- Java網絡編程、流之間的關係:例如:咱們使用java進行客戶端的編程,咱們使用Socket套接字創建客戶端對象,當客戶端對象創建後,則完成了客戶端編程的第一步,緊接着的步驟就是按照「請求-響應」模型進行網絡數據交換,在Java語言中,數據傳輸功能由Java IO實現,也就是說只須要從鏈接中得到輸入流和輸出流便可,而後將須要發送的數據寫入鏈接對象的輸出流中,在發送完成之後從輸入流中讀取數據便可。因此,咱們能夠認爲流是用來解決java網絡編程中的數據交換問題的,用來進行網絡數據交換。
6. 代碼閱讀
閱讀ServerAndThread目錄中的源代碼 **瀏覽器
6.1 修改程序,在GUI界面中某個地方顯示本身的學號,而後運行該程序(截圖、出現學號)。簡述這個程序的主要功能。
這個程序的主要功能就是服務端和客戶端之間的交流或者說是他倆之間的通訊。服務器
6.2 畫出源代碼的結構圖(各個類的依賴關係)。並簡要說明各個類的功能。
ServerChart |
設置服務端的顯示界面 |
ServerReadThread |
服務端讀取線程 |
SeverActionListener |
監聽服務端 |
MainThread |
創建鏈接;監聽到客戶端鏈接後,把線程放到列表中;服務端讀取線程 |
ClientChart |
設置客戶端的顯示界面 |
ClientReadThread |
客戶端讀取線程 |
ClientListener |
監聽客戶端 |
6.3 簡述這個程序有什麼不足之處及改進方法.
- 不足之處:客戶端發送到服務器的消息並不能區分出是哪一個服務器發的。服務器發送的消息不可以換行,會和下一則客戶端消息合併到一塊兒。
- 改進方法:若是信息中不包含標記的字符串就加上「服務端說:」,這樣就能夠區分哪一個是服務端發的了。在服務端顯示消息的那行代碼上添上換行符就好了。
選作:7. 網絡爬蟲
使用Socket、URL、正則表達式、流等編寫一個網絡爬蟲能夠將cec.jmu.edu.cn及其所包含連接上的全部網址的圖片都下載下來,抓取深到不超過5。
選作:8. 簡易搜索引擎(進階)
8.1 寫出設計思路便可。該搜索引擎包含幾部分?裏面核心的實現思路?若是能用框架圖、流程圖畫出架構
8.2 以計算機學院網站爲例,進行測試。好比,輸入ACM後搜索,能夠將包含ACM
的的網頁抽取出來。(可做爲課程設計題目)
3. 碼雲
3.1 碼雲代碼提交記錄
- 在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖
4. 課外閱讀
4.1 Java Tutorial:Custom Networking
Trail: Custom Networking
主要看Overview of Networking,Working With URLs,All About Sockets,All About Datagrams
Overview of Networking:其有兩部分,首先,描述了Java平臺的網絡功能,其次咱們須要瞭解如何使用URLs,sockets和datagrams。咱們從網絡中下載applet,此時運行的程序中引用了一個特殊的標記——一個HTML文件的
markdown