201521123098 《Java程序設計》第13周學習總結
1. 本周學習總結
以你喜歡的方式(思維導圖、OneNote或其他)歸納總結多網絡相關內容。
1. TCP的特征:
①可靠:具有失敗重傳的功能;
②開銷大:需要建立通路以維持通信;
③控制能力較強:有效維持網絡秩序,防止網絡本貴。
2. UDP的特征:
①開銷小:無建立特定通路維持通訊,報字段比TCP小;
②不可靠:因為沒有通路,所以傳輸數據是隨機的,不一定能送達。
3. ①Socket:作為網頁和運輸層之間的接口,達成網頁數據瀏覽和變更的目的;
②ServerSocket:不是Socket!把使用TCP協議的Socket封裝成流;
③DatagramSocket:把使用UDP協議的Socket封裝成流。
2. 書面作業
1. 網絡基礎
-
1.1 比較ping www.baidu.com與ping cec.jmu.edu.cn,分析返回結果有何不同?為什么會有這樣的不同?
![]()
![]()
數據發送和接受往返的時間不同,因為集大教育網相對于百度官網距離我們會更加近一些。 -
1.2 telnet bbs.newsmth.net,上面這條命令連接的是遠程主機的什么端口號?
![]()
23端口為telnet的默認端口。 -
1.3 telnet cec.jmu.edu.cn 80,嘗試回答:你從屏幕看到一些什么內容?返回的內容是不是cec.jmu.edu.cn的主頁內容?嘗試使用GET / HTTP/1.0命令,會返回什么?詳見實驗任務書題目1。
輸入telnet cec.jmu.edu.cn 80后是黑屏=-=,在執行GET / HTTP/1.0命令后會返回網頁內容,如下:

-
1.4 啟動ConnectionWatcher, 然后啟動若干個可以聯網的程序(如QQ, telnet,瀏覽器等),查看本機上有什么程序聯網,使用了什么端口?QQ占用了什么端口和那些遠程IP進行交互,這些IP分布地在那里?使用了什么協議進行通信?
![]()
如圖標識 -
1.5 編寫網絡程序必不可少的幾個信息是什么?
1. 通信雙方甚至多方的IP地址; 2. 通信所用的協議; 3. 該程序所充當的身份:服務器或客戶端等。
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進一步觀察返回結果。沒有任何返回結果,為什么?怎么操作
此時沒有任何返回結果,因為該網站需要輸入get命令請求數據才會返回結果,如圖:

-
2.4 啟動網絡調試助手,將其設置為TCP Server,并啟動,嘗試使用Client.java連接該TCP Server,使用該服務器向Client發送信息。(截圖)
![]()
-
2.5 回答:現在的Client.java只能接收信息,能否改造Client.java使其可以與服務器進行交互(服務器可以發送信息給Client,Client也可發送信息給服務器),寫出大概思路即可。
在Client.java中多寫一個線程,用于發送消息即可進行交互,在接收的同時支持發送消息。
3. ServerSocket與TCP服務器
-
3.1 簡易單線程MenuServer,題目3.1-3.4。(關鍵代碼及運行截圖,包含學號)可以使用網絡調試助手,將其設置為TCP Client(IP與端口填你的MenuServer的IP與端口),連接你的MenuServer。其中的文件搜索功能為選做。
![]()
![]()
-
3.2 多線程MenuServer(截圖證明你這個是多線程服務器,使用telnet連接)。
![]()
4. UDP服務器
-
4.1 改造3.1或3.2,將其改造成基于UDP的MenuServer。(運行界面代碼截圖,包含學號)。可以使用網絡調試助手,將其設置為UDP,要填本機IP與端口也要填遠程服務器的IP與端口。
代碼有點混亂,無從下手。
5. 論述題:網絡程序與流
-
5.1 前面編寫的程序用到了大量的流的相關知識。簡述,編寫網絡程序時應當選擇什么樣的流?Java網絡編程、流之間的關系。場景如:簡單的文字聊天、文件傳輸、應用層協議服務器,如QQ、聊天室、網絡游戲。
具體需要選擇什么樣的流需要根據我們所編寫的程序性質來選擇; ①有的程序允許數據的部分丟失:比如語音聊天室,語音中如果存在重發數據會造成通話時序混亂,影響溝通,但是和延遲之類的并不矛盾; 有的程序不允許丟失數據:比如文件發送,郵件的發送等。 ②有的程序對及時性要求就很高:比如一些“團戰”游戲,如果再選擇傳輸慢開銷大的那八成是“團滅”了=-=
6. 代碼閱讀
閱讀ServerAndThread目錄中的源代碼
-
6.1 修改程序,在GUI界面中某個地方顯示自己的學號,然后運行該程序(截圖、出現學號)。簡述這個程序的主要功能。
![]()
達到客戶端與服務端之間相互通信的目的。 -
6.2 畫出源代碼的結構圖(各個類的依賴關系)。并簡要說明各個類的功能。
![]()
ServerChart:設置服務端界面 ServerReadThread:服務端讀取線程 SeverActionListener:服務端的監聽器 ClientChart:設置客戶端界面 ClientReadThread:客戶端讀取線程 ClientListener:客戶端的監聽器 -
6.3 簡述這個程序有什么不足之處及改進方法.
客戶端和服務端的語言沒有明確區分,換行還會出現失誤。
3. 碼云
碼云代碼提交記錄
-
在碼云的項目中,依次選擇“統計-Commits歷史-設置時間段”, 然后搜索并截圖
提交失敗我也很絕望啊。













浙公網安備 33010602011771號