201521123007《Java程序设计》第13周学习总结
1. 本周學(xué)習(xí)總結(jié)
以你喜歡的方式(思維導(dǎo)圖、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é)果有何不同?為什么會有這樣的不同?
IP地址: 163.177.151.110 IP所在位置:廣東省廣州市北京百度網(wǎng)訊科技有限公司聯(lián)通節(jié)點IP地址: 210.34.128.152 IP所在位置:福建省廈門市集美大學(xué)網(wǎng)絡(luò)中心從IP所在位置來看cec.jmu.edu.cn[210.34.128.152]服務(wù)器離我們更近,所以數(shù)據(jù)包往返事件更短。
1.2 telnet bbs.newsmth.net,上面這條命令連接的是遠(yuǎn)程主機(jī)的什么端口號?
Telnet是遠(yuǎn)程連接服務(wù),它工作于在tcp/ip協(xié)議的應(yīng)用層。為了區(qū)分這些服務(wù)器,每個服務(wù)器均分配一個標(biāo)準(zhǔn)端口值,其中telnet的標(biāo)準(zhǔn)端口值為23。
1.3 telnet cec.jmu.edu.cn 80,嘗試回答:你從屏幕看到一些什么內(nèi)容?返回的內(nèi)容是不是cec.jmu.edu.cn的主頁內(nèi)容?嘗試使用GET /index HTTP/1.0命令,會返回什么?詳見實驗任務(wù)書題目1。
以上是執(zhí)行telnet cec.jmu.edu.cn 80語句后“CTRL+]”屏幕顯示的內(nèi)容,直接執(zhí)行telnet命令則什么都沒有顯示,不是cec.jmu.edu.cn的主頁內(nèi)容。
上圖是使用GET /index HTTP/1.0命令屏幕顯示的內(nèi)容,是cec.jmu.edu.cn的主頁內(nèi)容。
1.4 啟動ConnectionWatcher, 然后啟動若干個可以聯(lián)網(wǎng)的程序(如QQ, telnet,瀏覽器等),查看本機(jī)上有什么程序聯(lián)網(wǎng),使用了什么端口?QQ占用了什么端口和那些遠(yuǎn)程IP進(jìn)行交互,這些IP分布地在那里?使用了什么協(xié)議進(jìn)行通信?
從上圖中可以看到QQ使用的本地端口分別與遠(yuǎn)程IP交互的有:
| 49489 | 183.3.253.61 | TCP |
| 49490 | 183.3.253.68 | TCP |
| 58219 | 125.78.252.155 | TCP |
IP分布地查詢結(jié)果:
| 14.18.245.239 | 廣東省廣州市, 電信 |
| 180.163.255.159 | 上海市, 電信 |
| 180.163.251.158 | 上海市, 電信 |
| 140.206.78.9 | 上海市, 聯(lián)通 |
| 183.3.253.61 | 廣東省廣州市, 電信 |
| 125.78.252.155 | 福建省莆田市 |
| 180.163.255.159 | 上海市, 電信 |
1.5 編寫網(wǎng)絡(luò)程序必不可少的幾個信息是什么?
IP,協(xié)議,域名,端口號。
2. 編寫TCP客戶端程序
2.1 參照SocketTest.java編寫一個簡單的連接遠(yuǎn)程服務(wù)器小程序Client.java,可以接收并顯示服務(wù)器發(fā)送的信息。啟動時需要首先在控制臺指定遠(yuǎn)程主機(jī)IP與端口號。(截圖,出現(xiàn)自己學(xué)號)
2.2 將程序中的網(wǎng)址改成bbs.newsmth.net,端口號改為23,再次觀察返回結(jié)果?嘗試執(zhí)行telnet bbs.newsmth.net 23,對比返回結(jié)果。
發(fā)現(xiàn)返回結(jié)果相差不多。
2.3 將程序中的網(wǎng)址改成cec.jmu.edu.cn,端口號改為80進(jìn)一步觀察返回結(jié)果。沒有任何返回結(jié)果,為什么?怎么操作
因為沒有發(fā)送get請求獲取html文檔
改進(jìn)版:
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ù)器進(jìn)行交互(服務(wù)器可以發(fā)送信息給Client,Client也可發(fā)送信息給服務(wù)器),寫出大概思路即可。
3. ServerSocket與TCP服務(wù)器
3.1 簡易單線程MenuServer,題目3.1-3.4。(關(guān)鍵代碼及運行截圖,包含學(xué)號)可以使用網(wǎng)絡(luò)調(diào)試助手,將其設(shè)置為TCP Client(IP與端口填你的MenuServer的IP與端口),連接你的MenuServer。其中的文件搜索功能為選做。
關(guān)鍵代碼:
運行截圖:
3.2 多線程MenuServer(截圖證明你這個是多線程服務(wù)器,使用telnet連接)。
下圖是用cmd操作臺和網(wǎng)絡(luò)調(diào)試助手同時開啟不同線程的運行結(jié)果:
4. UDP服務(wù)器
4.1 改造3.1或3.2,將其改造成基于UDP的MenuServer。(運行界面代碼截圖,包含學(xué)號)。可以使用網(wǎng)絡(luò)調(diào)試助手,將其設(shè)置為UDP,要填本機(jī)IP與端口也要填遠(yuǎn)程服務(wù)器的IP與端口。
5. 論述題:網(wǎng)絡(luò)程序與流
5.1 前面編寫的程序用到了大量的流的相關(guān)知識。簡述,編寫網(wǎng)絡(luò)程序時應(yīng)當(dāng)選擇什么樣的流?Java網(wǎng)絡(luò)編程、流之間的關(guān)系。場景如:簡單的文字聊天、文件傳輸、應(yīng)用層協(xié)議服務(wù)器,如QQ、聊天室、網(wǎng)絡(luò)游戲。
編寫網(wǎng)路程序時應(yīng)當(dāng)選擇網(wǎng)絡(luò)上的數(shù)據(jù)流,過濾流DataInputStream和DataOutputStream,分別實現(xiàn)了接口DataInput 和DataOutput。接口DataInput 中定義的主要包括從流中讀取基本類型的數(shù)據(jù)、讀取一行數(shù)據(jù)、或者讀取指定長度的字節(jié)數(shù),接口DataOutput中定義的方法主要是向流中寫入基本類型的數(shù)據(jù)或者寫入一定長度的字節(jié)數(shù)組。DataInputStream可以從所連接的輸入流中讀取與機(jī)器無關(guān)的基本類型數(shù)據(jù),用以實現(xiàn)一種獨立于具體平臺的輸入方式;DataOutputStream可以向所連接的輸出流寫入基本類型的數(shù)據(jù)。用于實現(xiàn)網(wǎng)絡(luò)編程最合適不過。
6. 代碼閱讀
閱讀ServerAndThread目錄中的源代碼
6.1 運行該程序(截圖)。簡述這個程序的主要功能。
這個程序?qū)崿F(xiàn)了多個客戶端同時連接服務(wù)端的數(shù)據(jù)傳送,即通信。
6.2 畫出源代碼的結(jié)構(gòu)圖(各個類的依賴關(guān)系)。并簡要說明各個類的功能。
ClientChart:設(shè)置客戶端界面
ClientReadThread:客戶端讀取線程
ClientListener:客戶端的監(jiān)聽器
SeverActionListener:服務(wù)端的監(jiān)聽器
ServerReadThread:服務(wù)端讀取線程
ServerChart:設(shè)置服務(wù)端界面
MainThread:啟動服務(wù)端;監(jiān)聽到客戶端連接后,加入客戶端的列表中;啟動服務(wù)端讀取線程。
6.3 簡述這個程序有什么不足之處及改進(jìn)方法.
這個程序運行時,服務(wù)器端不能單獨相應(yīng)單個客戶端,且不同客戶端之間可以互看通信,然后客戶端無法區(qū)分自己還是對方發(fā)的消息。
3. 碼云
碼云代碼提交記錄
在碼云的項目中,依次選擇“統(tǒng)計-Commits歷史-設(shè)置時間段”, 然后搜索并截圖
轉(zhuǎn)載于:https://www.cnblogs.com/ty1213/p/6870008.html
總結(jié)
以上是生活随笔為你收集整理的201521123007《Java程序设计》第13周学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Random类
- 下一篇: AC_Automata模板