第13周-网络
1. 本周學習總結(jié)
——以你喜歡的方式(思維導圖、OneNote或其他)歸納總結(jié)多網(wǎng)絡(luò)相關(guān)內(nèi)容。
2. 書面作業(yè)
1. 網(wǎng)絡(luò)基礎(chǔ)
1.1 比較ping www.baidu.com與ping cec.jmu.edu.cn,分析返回結(jié)果有何不同?為什么會有這樣的不同?
答:
(1)ping www.baidu.com
(2)ping cec.jmu.edu.cn
(3)返回結(jié)果的不同之處:
——所用時間不同。
(4)原因:IP地址近的耗時短。
www.baidu.com[163.177.151.110]IP地址分布地:廣東省廣州市 - 聯(lián)通
cec.jmu.edu.cn[210.34.128.152]IP地址分布地:福建省廈門市 - 集美大學網(wǎng)絡(luò)中心
1.2 telnet bbs.newsmth.net,上面這條命令連接的是遠程主機的什么端口號?
答:
telnet bbs.newsmth.net 命令連接的是遠程主機的端口號:23(Telnet默認端口號)
1.3 telnet cec.jmu.edu.cn 80,嘗試回答:你從屏幕看到的是一些什么內(nèi)容?返回的內(nèi)容是不是cec.jmu.edu.cn的主頁內(nèi)容?嘗試使用GET /index HTTP/1.0命令,會返回什么?
答:
(1)telnet cec.jmu.edu.cn 80首先看到的內(nèi)容:
(2)返回的內(nèi)容不是cec.jmu.edu.cn的主頁內(nèi)容(還未發(fā)送協(xié)議)。
(3)使用GET /index HTTP/1.0命令后返回的內(nèi)容:
1.4 啟動ConnectionWatcher, 然后啟動若干個可以聯(lián)網(wǎng)的程序(如QQ, telnet,瀏覽器等),查看本機上有什么程序聯(lián)網(wǎng),使用了什么端口?QQ占用了什么端口和哪些遠程IP進行交互,這些IP分布地在哪里?使用了什么協(xié)議進行通信?
答:
(1)(以下程序均使用TCP協(xié)議)
| 程序 | 本地_本地端口 | 遠程_遠程端口 | 狀態(tài) |
|---|---|---|---|
| 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(一些例子)
| 協(xié)議 | 本地_本地端口 | 遠程_遠程端口 | 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 編寫網(wǎng)絡(luò)程序必不可少的幾個信息是什么?
答:
(1)協(xié)議
(2)IP/域名
(3)端口號
(4)信息傳輸方式
2. TCP客戶端程序編寫
2.1 參照SocketTest.java編寫一個簡單的連接遠程服務(wù)器小程序Client.java,可以接收并顯示服務(wù)器發(fā)送的信息。啟動時需要首先在控制臺指定遠程主機IP與端口號。(截圖,出現(xiàn)自己學號)
2.2 將程序中的網(wǎng)址改成bbs.newsmth.net,端口號改為23,再次觀察返回結(jié)果?嘗試使用telnet bbs.newsmth.net 23。對比返回結(jié)果
答:
程序的運行結(jié)果:
telnet bbs.newsmth.net 23的返回結(jié)果:
對比結(jié)果:
(1)程序中某些界面信息以亂碼形式呈現(xiàn)。
(2)程序返回的僅僅是界面,并沒有實現(xiàn)其中的功能;Telnet連接到具體端口,實現(xiàn)端口對應(yīng)功能。
2.3 將程序中的網(wǎng)址改成cec.jmu.edu.cn,端口號改為80進一步觀察返回結(jié)果。沒有任何返回結(jié)果,為什么?
答: 因為需要發(fā)送協(xié)議。(同1.3)
2.4 啟動網(wǎng)絡(luò)調(diào)試助手,將其設(shè)置為TCP Server,并啟動,如下圖所示
嘗試使用Client.java連接該TCP Server,使用該服務(wù)器向Client發(fā)送信息。(截圖)
2.5 回答:現(xiàn)在的Client.java只能接收信息,能否改造Client.java使其可以與服務(wù)器進行交互(服務(wù)器可以發(fā)送信息給Client,Client也可發(fā)送信息給服務(wù)器),寫出大概思路即可。
答:
(1)使程序可以寫信息-使用PW;
(2)利用PW的緩沖區(qū)保存到服務(wù)器。
2.6 選做:實現(xiàn)2.5
(1)主要代碼:
(2)返回結(jié)果:
3. ServerSocket與TCP服務(wù)器
3.1 簡易單線程MenuServer,題目3.1-3.4。(關(guān)鍵代碼及運行截圖,包含學號)可以使用網(wǎng)絡(luò)調(diào)試助手,將其設(shè)置為TCP Client(IP與端口填你的MenuServer的IP與端口),連接你的MenuServer。其中的文件搜索功能為選做。
(1)關(guān)鍵代碼:
(2)運行結(jié)果:
① 輸入menu:
② 輸入1:
③ 輸入2:
④ 輸入3:(待)
⑤ 輸入4:
⑥ 輸入quit:(連接已斷開)
3.2 多線程MenuServer。(截圖證明你這個是多線程服務(wù)器,使用telnet連接)
(1)多線程關(guān)鍵代碼:
(2)運行證明:
(3)使用telnet連接:
3.3 選做:圖形界面的MenuServer
4. UDP服務(wù)器
4.1 改造3.1或3.2,將其改造成基于UDP的MenuServer。(運行界面代碼截圖,包含學號)。可以使用網(wǎng)絡(luò)調(diào)試助手,將其設(shè)置為UDP,要填本機IP與端口也要填遠程服務(wù)器的IP與端口。
5. 論述題:網(wǎng)絡(luò)程序與流
5.1 前面編寫的程序用到了大量的流的相關(guān)知識。簡述,編寫網(wǎng)絡(luò)程序時應(yīng)當選擇什么樣的流?場景如:簡單的文字聊天、文件傳輸、應(yīng)用層協(xié)議服務(wù)器,如QQ、聊天室、網(wǎng)絡(luò)游戲。
答: 根據(jù)場景的不同,運用相對應(yīng)的字節(jié)流(用于服務(wù)器/客戶端的讀取與寫入)和字符流(在socket中用于包裝)。
(1)簡單的文字聊天:需要用到字節(jié)流——輸入流InputStream和輸出流OutputStream;以及字符流——PrintWriter(用于向客戶端發(fā)送信息)
(2)文件傳輸:需要用到字節(jié)流——DataInputStream,F(xiàn)ileOutputStream等
(3)應(yīng)用層協(xié)議服務(wù)器:需要用到字節(jié)流和字符流,還應(yīng)該會涉及到多線程的應(yīng)用。
6. 代碼閱讀
——閱讀ServerAndThread目錄中的源代碼
6.1 運行該程序(截圖)。簡述這個程序的主要功能。
(1)運行結(jié)果截圖
(2)這個程序的主要功能:實現(xiàn)客戶端與服務(wù)端之間的通信。
6.2 畫出源代碼的結(jié)構(gòu)圖(各個類的依賴關(guān)系)。并簡要說明各個類的功能。
6.3 簡述這個程序有什么不足之處及改進方法。
答:
(1)不足之處:
① 客戶端中,不清楚到底是客戶端發(fā)言還是服務(wù)器發(fā)言;
② 服務(wù)器中,服務(wù)器每次發(fā)言都不換行。
(2)我的改進方法:
① 客戶端中,在程序中注明是接收方還是發(fā)送方。
② 服務(wù)器中,當服務(wù)器發(fā)言時加上換行符。
選做:7. 網(wǎng)絡(luò)爬蟲
——使用Socket、URL、正則表達式、流等編寫一個網(wǎng)絡(luò)爬蟲,可以將cec.jmu.edu.cn及其所包含鏈接上的所有網(wǎng)址的圖片都下載下來,抓取深到不超過5.
選做:8. 簡易搜索引擎(進階)
8.1 寫出設(shè)計思路即可。該搜索引擎包含幾部分?里面核心的實現(xiàn)思路?如果能用框架圖、流程圖畫出架構(gòu)
8.2 以計算機學院網(wǎng)站為例,進行測試。比如,輸入ACM后搜索,可以將包含ACM的的網(wǎng)頁抽取出來。(可作為課程設(shè)計題目)
3. 碼云
——在碼云的項目中,依次選擇“統(tǒng)計-Commits歷史-設(shè)置時間段”, 然后搜索并截圖
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協(xié)議簡介
4.3 其他閱讀資料
Java編程技巧:小爬蟲程序.docx
4.4 進階:HTTPComponent的使用
使用java中的Socket、URL、URLConnection,然后遵循HTTP協(xié)議也可以編寫一個小程序,和可以查詢成績的HTTP服務(wù)器進行交流。然而直接使用Socket編程較麻煩,這時候我們可以使用HTTPComponent。
HTTPComponent相比傳統(tǒng)JDK自帶的URLConnection,增加了易用性和靈活性
1: 閱讀HttpClient 教程,使用HTTPComponent編寫一些與HTTP服務(wù)器交換的示例程序
2: 使用HTTPComponent開發(fā)一個查詢成績的程序:用戶輸入用戶名、密碼、驗證碼,即可自動查詢教務(wù)處服務(wù)器,獲取成績。
總結(jié)
- 上一篇: linux 创建路径函数,Linux函数
- 下一篇: vivo X90 推出“v 我 50”肯