201521123081《java程序設計》 第13周學習總結

本次做業參考文件

正則表達式參考資料

1. 本週學習總結

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

參考資料:XMind

2. 書面做業

Q1. 網絡基礎

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

  • 從圖片中能夠看出,ping www.baidu.com比ping cec.jmu.edu.cn數據包的時間要更長;
  • 猜測可能與其服務器位置有關,查看IP位置

推測二者返回數據包時間不一樣是由於其服務器距離個人遠近的關係。php

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

  • 首先用過ping命令查看IP地址

使用netstat -ano命令查看端口號爲23。html

Telnet命令默認的端口號爲23。java

------引用自《如何查看網絡端口?正則表達式

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

  • 由下圖,並無返回什麼東西;
    apache

  • 使用GET /index HTTP/1.0命令:編程

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

  • 以QQ爲例,使用了本地的2279六、3008三、3008四、3008五、4300、4301端口與遠程80端口,與183.3.253.7七、125.78.252.**網段經過TCP協議交互。
    小程序

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

  • IP、端口以及協議是最基本的,也是必不可少的。

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

Q2. 編寫TCP客戶端程序

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

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

  • 二者的返回結果實質上是一致的,可是前者沒有具體的實現效果。

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

  • 返回結果如圖:瀏覽器

80端口是爲HTTP(HyperText Transport Protocol)即超文本傳輸協議開放的,此爲上網衝浪使用次數最多的協議,主要用於WWW(World Wide Web)即萬維網傳輸信息的協議。服務器

-----摘自360百科網絡

  • 沒有使用HTTP協議進行交互。

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

嘗試使用Client.java鏈接該TCP Server,使用該服務器向Client發送信息。(截圖)

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

  • 獲得Socket對象的輸出流getOutputStream(),從客戶端輸出信息到服務端,客戶端的輸入Scanner(System.in)實現,PrintWriter從客戶端輸出信息,調用flush()方法清空緩衝區,將數據送往服務端。

2.6 選作:實現2.5

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

Q3. ServerSocket與TCP服務器

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

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

- 能夠控制服務器的啓動中止、查看客戶端連接的基本信息(IP、端口、連接時間)

- 拓展:在服務器端斷開某個客戶端的連接、查看客戶端發送的給服務器端的日誌記錄

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

- 參考:EchoServer.java,ThreadedEchoServer.java (多線程服務器)

Q4. UDP服務器

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

- 參考:UDPServer.java

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

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

  • 使用InputStream和OutputStream,用於服務器與客戶端信息的寫入和讀取,實現通信。

Q6. 代碼閱讀

閱讀ServerAndThread目錄中的源代碼

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

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

  • 說明
功能
ClientChart 設置客戶端的界面
ClientReadThread 客戶端讀取線程
ClientListener 客戶端的監聽器
ServerChart 設置服務端的界面
ServerReadThread 服務端讀取線程
SeverActionListener 服務端的監聽器
MainThread 啓動服務端

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

  • 多個客戶端發送消息,沒法區分是哪一個客戶端發出的哪條信息。
    能夠在客戶端發送的時候註明。

選作:Q7. 網絡爬蟲

使用Socket、URL、正則表達式、流等編寫一個網絡爬蟲能夠將cec.jmu.edu.cn及其所包含連接上的全部網址的圖片都下載下來,抓取深到不超過5。

選作:Q8. 簡易搜索引擎(進階)

8.1 寫出設計思路便可。該搜索引擎包含幾部分?裏面核心的實現思路?若是能用框架圖、流程圖畫出架構

8.2 以計算機學院網站爲例,進行測試。好比,輸入ACM後搜索,能夠將包含ACM的的網頁抽取出來。(可做爲課程設計題目)

3. 碼雲

碼雲代碼提交記錄

  • 在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖

4.課外閱讀

4.1 Java Tutorial:Custom Networking

Trail: Custom Networking

主要看Overview of Networking,Working With URLs,All About Sockets,All About Datagrams

4.2 HTTP協議簡介

4.3一個簡單的小爬蟲

Java編程技巧:小爬蟲程序.docx

4.4 進階:HTTPComponent的使用

使用java中的Socket、URL、URLConnection,而後遵循HTTP協議也能夠編寫一個小程序,和能夠查詢成績的HTTP服務器進行交流。然而直接使用Socket編程較麻煩,這時候咱們可使用HTTPComponent。

HTTPComponent相比傳統JDK自帶的URLConnection,增長了易用性和靈活性

1. 閱讀HttpClient 教程,使用HTTPComponent編寫一些與HTTP服務器交換的示例程序

2. 選作:使用HTTPComponent開發一個查詢成績的程序:用戶輸入用戶名、密碼、驗證碼,便可自動查詢教務處服務器,獲取成績。

相關文章
相關標籤/搜索