1. 程式人生 > >作業11-網絡

作業11-網絡

遠程服務 網絡相關 udp服務器 任務管理器 一個 get 線程 lock wsm

參考資料

本次作業參考文件
正則表達式參考資料

1. 本周學習總結

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

2. 為你的系統增加網絡功能(購物車、圖書館管理、鬥地主等)-分組完成

為了讓你的系統可以被多個用戶通過網絡同時使用,需要為你的系統增加網絡功能。
2.1 簡述你想為你的系統增加什麽網絡功能?設計思路是什麽?
2.2 系統通過網絡傳遞了些什麽信息?信息的格式是什麽?
2.3 你的網絡模塊使用了TCP還是UDP技術?為什麽要做出這樣的選擇?網絡模塊中常用的網絡相關的類是什麽?
2.4 截圖網絡通訊部分的運行界面與源代碼,並進行簡單說明。
註意:如果不會編寫客戶端,可以使用telnet

或者**網絡調試助手*做客戶端。
2.5 特別加分:使用自己編寫的客戶端訪問系統。要求該客戶端既可以向服務器發送信息,也可以從服務器接收信息。簡述裏面的核心代碼。
2.6 選做:簡述系統中可能會出現的多線程沖突或者同步問題嗎?

選做:3. 嘗試為計算機學院網站設計一個搜索引擎系統(組隊完成)

一開始可以只用控制臺,不一定要用Web。
3.1 系統大概分為幾部分,每個部分要完成什麽功能?
3.2 系統的整個工作流程是什麽。各個部分之間的關系是什麽。可嘗畫圖描述。
3.3 為了完成該系統需要什麽方面的知識?

3. 碼雲與PTA

3.1 統計本周完成的代碼量

需要將每周的代碼統計情況融合到一張表中。

4. 網絡學習指導(實驗課考核2、3)

本節內容不必寫成博客,但是實驗課需要考核。

1. 網絡基礎(自行完成,具體完成步驟請參見參考文件中的實驗任務書)

1.1 比較ping www.baidu.comping cec.jmu.edu.cn,分析返回結果有何不同?為什麽會有這樣的不同?
1.2 telnet bbs.newsmth.net,上面這條命令連接的是遠程主機的什麽端口號?//在控制面板-啟用或關閉Windows功能中選擇Telnet客戶端
1.3 telnet cec.jmu.edu.cn 80,嘗試回答:你從屏幕看到一些什麽內容?返回的內容是不是cec.jmu.edu.cn的主頁內容?嘗試使用GET /index HTTP/1.0

命令,會返回什麽?詳見實驗任務書題目1。
1.4 啟動ConnectionWatcher, 然後啟動若幹個可以聯網的程序(如QQ, telnet,瀏覽器等),查看本機上有什麽程序聯網,使用了什麽端口?QQ占用了什麽端口和那些遠程IP進行交互,這些IP分布地在那裏?使用了什麽協議進行通信?註意:windows 10下可以使用系統內置工具查看。?打開路徑:任務管理器-性能-打開資源監視器-網絡。
1.5 編寫網絡程序必不可少的幾個信息是什麽?

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

2. 編寫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進一步觀察返回結果。沒有任何返回結果,為什麽?怎麽修改代碼才能正常顯示?選做:為什麽會返回亂碼?如何解決?
2.4 啟動網絡調試助手,將其設置為TCP Server,並啟動,如下圖所示(作業中不要出現下圖)
技術分享圖片
註意:網絡調試助手中應設置Server的IP為實際IP,不要設置為localhost或者127.0.0.1否則有可能出現Connection Refused

嘗試使用Client.java連接該TCP Server,使用該服務器向Client發送信息。(截圖關鍵代碼與運行結果)
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 多線程MenuServer(截取關鍵代碼證明你這個是多線程服務器,請使用多個telnet連接測試)。
3.3 選做:圖形界面的MenuServer

  • 可以控制服務器的啟動停止、查看客戶端鏈接的基本信息(IP、端口、鏈接時間)
  • 拓展:在服務器端斷開某個客戶端的鏈接、查看客戶端發送的給服務器端的日誌記錄
  • 參考:實驗任務書-題目3
  • 參考:EchoServer.java,ThreadedEchoServer.java (多線程服務器)

4. UDP服務器

4.1 改造3.1或3.2,將其改造成基於UDP的MenuServer。(區別於題目3的TCP服務器的關鍵代碼,需截大圖、包含學號,無需截圖運行界面)。可以使用網絡調試助手模擬UDP客戶端,將其設置為UDP,要填本機IP與端口也要填遠程服務器的IP與端口
4.2 對比相應的基於TCP的MenuServer,主要有何不同?為了連接多個客戶端,一定要通過多線程技術嗎?如果不使用,怎麽區分不同的客戶端呢?

  • 參考:UDPServer.java

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

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

6. 代碼閱讀

閱讀ServerAndThread目錄中的源代碼
6.1 修改程序,在GUI界面中某個地方顯示自己的學號,然後運行該程序(截圖、出現學號)。簡述這個程序的主要功能。
6.2 畫出源代碼的結構圖(各個類的依賴關系)。並簡要說明各個類的功能。
6.3 簡述這個程序有什麽不足之處及改進方法.

選做:7. 網絡爬蟲

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

選做:8. 簡易搜索引擎(進階)

8.1 寫出設計思路即可。該搜索引擎包含幾部分?裏面核心的實現思路?如果能用框架圖、流程圖畫出架構
8.2 以計算機學院網站為例,進行測試。比如,輸入ACM後搜索,可以將包含ACM的的網頁抽取出來。(可作為課程設計題目)

5.課外閱讀

5.1 Java Tutorial:Custom Networking

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

5.2 HTTP協議簡介

5.3一個簡單的小爬蟲

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

5.4 進階:HTTPComponent的使用

使用java中的Socket、URL、URLConnection,然後遵循HTTP協議也可以編寫一個小程序,和可以查詢成績的HTTP服務器進行交流。然而直接使用Socket編程較麻煩,這時候我們可以使用HTTPComponent。
HTTPComponent相比傳統JDK自帶的URLConnection,增加了易用性和靈活性

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

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

  • 參考資料:用Java的HttpClient寫一個簡單的http請求和返回,HttpClient使用詳解,HttpClient 教程, HTTP Client官網

作業11-網絡