第13周-網絡

1. 本週學習總結

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

2. 書面做業

1. 網絡基礎

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

答:
(1)ping www.baidu.com
正則表達式

(2)ping cec.jmu.edu.cn
編程

(3)返回結果的不一樣之處:
——所用時間不一樣。
(4)緣由:IP地址近的耗時短。
www.baidu.com[163.177.151.110]IP地址分佈地:廣東省廣州市 - 聯通
小程序

cec.jmu.edu.cn[210.34.128.152]IP地址分佈地:福建省廈門市 - 集美大學網絡中心
瀏覽器

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

答:
telnet bbs.newsmth.net 命令鏈接的是遠程主機的端口號:23(Telnet默認端口號)服務器

1.3 telnet cec.jmu.edu.cn 80,嘗試回答:你從屏幕看到的是一些什麼內容?返回的內容是否是cec.jmu.edu.cn的主頁內容?嘗試使用GET /index HTTP/1.0命令,會返回什麼?

答:
(1)telnet cec.jmu.edu.cn 80首先看到的內容:
網絡

(2)返回的內容不是cec.jmu.edu.cn的主頁內容(還未發送協議)。
(3)使用GET /index HTTP/1.0命令後返回的內容:
多線程

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

答:
(1)(如下程序均使用TCP協議)架構

程序 本地_本地端口 遠程_遠程端口 狀態
KuGou.exe Asus-pc_61078 Asus-pc_61079 ESTABLISHED
QQ.exe Asus-pc_57937 163.177.71.222_80 ESTABLISHED
QQ.exe Asus-pc_57962 112.90.83.50_ CLOSE_WAIT
wpscloudsvr.exe Asus-pc_65129 111.206.200.2_5222 ESTABLISHED
360tray.exe Asus-pc_50834 111.206.79.114_80 ESTABLISHED
360tray.exe Asus-pc_50301 140.206.78.28_80 ESTABLISHED
360se.exe Asus-pc_58800 203.208.39.205_80 ESTABLISHED

(2)QQ(一些例子)框架

協議 本地_本地端口 遠程_遠程端口 IP分佈地
TCP(HTTP) Asus-pc_55252 163.177.71.201_80 廣東省肇慶市
TCP(HTTPS) Asus-pc_55253 163.177.71.201_443 廣東省肇慶市
TCP(HTTPS) Asus-pc_55255 157.0.149.21_443 江蘇省
TCP(HTTPS) Asus-pc_55262 58.250.137.31_443 廣東省深圳市

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

答:
(1)協議
(2)IP/域名
(3)端口號
(4)信息傳輸方式

2. TCP客戶端程序編寫

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

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

答:
程序的運行結果:

telnet bbs.newsmth.net 23的返回結果:

對比結果:
(1)程序中某些界面信息以亂碼形式呈現。
(2)程序返回的僅僅是界面,並無實現其中的功能;Telnet鏈接到具體端口,實現端口對應功能。

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

答: 由於須要發送協議。(同1.3)

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

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

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

答:
(1)使程序能夠寫信息-使用PW;
(2)利用PW的緩衝區保存到服務器。

2.6 選作:實現2.5

(1)主要代碼:

(2)返回結果:

3. ServerSocket與TCP服務器

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

(1)關鍵代碼:

(2)運行結果:
① 輸入menu:

② 輸入1:

③ 輸入2:

④ 輸入3:(待)

⑤ 輸入4:

⑥ 輸入quit:(鏈接已斷開)

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

(1)多線程關鍵代碼:

(2)運行證實:

(3)使用telnet鏈接:

3.3 選作:圖形界面的MenuServer

4. UDP服務器

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

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

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

答: 根據場景的不一樣,運用相對應的字節流(用於服務器/客戶端的讀取與寫入)和字符流(在socket中用於包裝)。
(1)簡單的文字聊天:須要用到字節流——輸入流InputStream和輸出流OutputStream;以及字符流——PrintWriter(用於向客戶端發送信息)
(2)文件傳輸:須要用到字節流——DataInputStream,FileOutputStream等
(3)應用層協議服務器:須要用到字節流和字符流,還應該會涉及到多線程的應用。

6. 代碼閱讀

——閱讀ServerAndThread目錄中的源代碼

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

(1)運行結果截圖

(2)這個程序的主要功能:實現客戶端與服務端之間的通訊。

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

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

答:
(1)不足之處:
① 客戶端中,不清楚究竟是客戶端發言仍是服務器發言;
② 服務器中,服務器每次發言都不換行。
(2)個人改進方法:
① 客戶端中,在程序中註明是接收方仍是發送方。
② 服務器中,當服務器發言時加上換行符。

選作:7. 網絡爬蟲

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

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

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開發一個查詢成績的程序:用戶輸入用戶名、密碼、驗證碼,便可自動查詢教務處服務器,獲取成績。

相關文章
相關標籤/搜索