201521123082 《Java程序設計》第13周學習總結

201521123082 《Java程序設計》第13周學習總結

標籤(空格分隔): javahtml


1. 本週學習總結

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

Answer:
基本框架:
java


2. 書面做業

1. 網絡基礎(參考:實驗任務書-題目1)

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

Answer:
結果分別以下:


分析:
1.回覆的地址不一樣:


2.回覆時間不一樣:
在集美離廈門市的服務器的距離近,因此回覆的時間比較快。百度的服務器在廣州,因此回覆時間比較慢。web

3.www.a.shifen.com和jmuweb2.jmu.edu.cn
打開地址結果分別以下:

爲何打不開百度?
這涉及cname解析和DNS解析的內容。
給個問題回答連接:十分系統(www.a.shifen.com)是幹什麼的?和百度有什麼關係?

根本不是咱們學院的主頁,這是爲何?
cec.jmu.edu.cn和jmuweb2.jmu.edu.cn使用的同一臺主機210.34.128.152。編程


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

Answer:
這個是常識。telnet的端口號就是23。
若是不知道的話,能夠嘗試在命令提示符窗口用netstat命令查詢。小程序


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

Answer:
1.telnet cec.jmu.edu.cn 80 後無任何返回結果;
2.GET /index HTTP/1.0命令,獲得結果以下:
瀏覽器


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

Answer:
部分截圖以下:

1.其實不管是QQ仍是其餘的一些軟件,都用443(https)、80(http)端口與遠程IP交互。
2.QQIP分佈在哪裏,查詢以下:

3.使用了TCP協議服務器


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

參考:實驗任務書-題目1
Socket;域名;輸入與輸出流;TCP和UDP協議;網絡


2. TCP客戶端程序編寫(參考:實驗任務書-題目2)

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

Answer:
多線程

要控制檯輸入,好吧,在下面:
併發


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

Answer:
顯示內容實際上是同樣的,以下:


***

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

Answer:
沒有任何返回結果。

改進後:

//沒有發送Get得到網站文檔,因此改進代碼以下:
pw.println("GET / HTTP/1.0");
pw.println("");


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


嘗試使用Client.java鏈接該TCP Server,併發送信息。
回答:如今的Client.java只能發送信息或者接收信息,可否改造Client.java使其能夠與服務器進行交互(服務器能夠發送信息給Client,Client也可發送信息給服務器),寫出大概思路便可。
Answer:
如題目一同樣。


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

Answer:


3. ServerSocket與TCP服務器

參考:實驗任務書-題目3
參考:EchoServer.java,ThreadedEchoServer.java (多線程服務器)

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

Answer:
主界面:

查詢時間:

查詢IP:

退出:


4. UDP服務器

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

(參考:UDPServer.java)
Answer:
主界面和操做1:

操做2:

操做4(退出):


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

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

Answer:
編寫網絡程序涉及到了輸入流和輸出流。QQ、聊天室、網絡遊戲收發數據選擇字符流,達到服務器與客戶端的通訊。


6. 代碼閱讀

閱讀ServerAndThread目錄中的源代碼

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

Answer:
功能:實現客戶端與服務端之間的通訊。


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

Answer:

ClientChart ClientListener ClientReadThread
設置客戶端界面 客戶端的監聽器 客戶端讀取線程
ServerChart ServerReadThread SeverActionListener
設置服務端界面 服務端讀取線程 服務端的監聽器

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

Answer:
如圖客戶端沒法辨別哪一個是本身仍是服務器發送的信息。而服務端的輸出格式不美觀。


3. 碼雲

在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖
Answer:


4.課外閱讀

4.1 Java Tutorial:Custom Networking

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

Overview of Networking:
網絡的概述有兩個部分。第一部分描述java平臺的網絡功能,介紹了applet和從url加載圖片的內容。第二部分介紹網絡基礎知識,瞭解TCP與UDP的不一樣(TCP:是一個面向鏈接的協議,它提供了一個可靠的兩臺計算機之間的數據流;UDP:是一種協議,獨立數據包發送的數據,稱爲數據報,從一臺計算機到另外一個沒有擔保的到來),瞭解了端口。
在互聯網上互相交流使用傳輸控制協議(TCP)和用戶數據報協議(UDP)的關係圖以下:

Working With URLs:
基本概念:可使用URL來訪問互聯網上的信息,一個URL(統一資源定位器)是資源在互聯網上的地址。
文章思路:網址是什麼——>建立URL——>解析URL——>用BufferedReader直接從URL讀取——>鏈接URL——>讀入和寫入URLConnection

All About Sockets:
介紹了套結字。套接字,是支持TCP/IP的網絡通訊的基本操做單元,能夠看作是不一樣主機之間的進程進行雙向通訊的端點,簡單的說就是通訊的兩方的一種約定,用套接字中的相關函數來完成通訊過程。
讀取和寫入套接字的源碼:

String hostName = args[0];
int portNumber = Integer.parseInt(args[1]);

try (
    Socket echoSocket = new Socket(hostName, portNumber);
    PrintWriter out =
        new PrintWriter(echoSocket.getOutputStream(), true);
    BufferedReader in =
        new BufferedReader(
            new InputStreamReader(echoSocket.getInputStream()));
    BufferedReader stdIn =
        new BufferedReader(
            new InputStreamReader(System.in))
)

後面還有編寫一個客戶端/服務器的介紹。

All About Datagrams:
數據包簡介:一個自我完備的獨立資料實體,攜帶着足夠的資訊,它可以從源頭,選取路徑,最終到達目的電腦,而不用依賴起始電腦、目的電腦以及傳輸網絡預先交換的資訊。
後面還講解了如何寫一個數據的客戶端和服務器,最後講怎麼廣播到各個接受者。


4.2 HTTP協議簡介

Answer:
廖雪峯網站上的只是http協議的簡介,想深刻了解能夠閱讀《HTTP權威指南》。若是以爲權威指南生澀,能夠看我以前看過的是圖解HTTP,加上火狐的幾個插件,去操做而後分析就行了。

固然用Google瀏覽器直接按F12啓動開發者工具去學習也不錯。


4.3 其餘閱讀資料

Java編程技巧:小爬蟲程序.docx
Answer:
做者的思路:
  1. 把全部想要的商品的連接讀到程序中。
  2. 分別打開每個連接讀取源代碼
  3. 驗證是不是金子商品(源代碼中含有free_msg字符串)
  4. 若是是金子就把該連接用IE打開
代碼主體就是URL類實現得到連接和連接上的輸出流,Digger類實現判斷是否爲金子,而後打開連接。


4.4 進階:HTTPComponent的使用

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

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

Answer:
工欲善其事,必先利其器。先留下個學習網站:HttpClient 教程

相關文章
相關標籤/搜索