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

1. 本週學習總結

2. 書面做業

1. 網絡基礎

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

分析結果:從上圖對比可知,傳輸相同大小(32字節)、相同數量(4個)的數據,丟包率二者均爲0%,可是ping cec.jmu.edu.cn比ping www.baidu.com包的平均傳輸時間更短。
緣由:Ping命令主要用於測試本地主機與遠程主機之間的連通性,而傳輸時間的長短受傳輸介質、網速、對方服務器等因素影響。

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

從上圖知,bbs.newsmth.net的ip地址爲101.200.29.164,遠程端口號爲23

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

什麼都沒有
沒有返回cec.jmu.edu.cn
使用命令GET /index HTTP/1.0後,返回主頁源碼

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

QQ等程序
14311,4300,4301

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

(1)ip地址和域名;
(2)端口;
(3)協議;
(4)數據傳輸方式。

2. 編寫TCP客戶端程序

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

//201521123117
public class Client {
 public static void main(String[] args){
 try{
     Socket s=new Socket("ip",端口號);
     try{
         InputStream inStream =s.getInputStream();
         Scanner in =new Scanner(inStream);
         
         while(in.hasNextLine()){
             String line = in.nextLine();
             System.out.println(line);
             }
         }
     finally
     {
         s.close();
         }
     }catch (IOException e)
 {
         e.printStackTrace();
         }
 }
 }

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

(1)"bbs.newsmth.net" 23

(2)telnet bbs.newsmth.net 23
java

(1)返回"bbs.newsmth.net"的23端口的界面,只是顯示初始界面,沒法輸入代號實現其功能,顏色控制符沒法解析;
(2)telnet bbs.newsmth.net鏈接到"bbs.newsmth.net"的23端口,進入界面,能夠輸入對應字符串實現功能。

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

在cmd中輸入telnet cec.jmu.edu.cn命令,沒有返回任何結果,而這個程序返回的是網址的初始界面,故程序沒有任何返回結果。

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

嘗試使用Client.java鏈接該TCP Server,使用該服務器向Client發送信息。(截圖)
網絡調試助手輸入:

輸出結果:
編程

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

思路:使用Scanner(System.in)在控制檯進行輸入,PrintWriter(s.getOutputStream())得到Socket對象的輸出流,並從控制檯輸出信息,最後要flush(),防止數據丟失。

3. ServerSocket與TCP服務器

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

關鍵代碼:小程序

menu:瀏覽器

out.println("***********************");
out.println( "1.顯示服務器當前時間  " );
out.println( "2.您的IP " );
out.println( "3.文件搜索" );
out.println( "4.退出菜單" );
out.println("***********************");

選擇:服務器

switch(x){
               case 1:{//獲取當前時間
                Date date=new Date();
                DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String time=format.format(date);
                out.println("當前時間:"+time);
                out.println();
                break;
               }
              case 2:{//獲取IP
                out.println("您的IP:"+this.incoming.getInetAddress().toString());
                out.println();
                break;
               }
              case 3:{//文件搜索
                out.println("無文件");
                out.println();
                break;
                }
               case 4:{//退出菜單
                flag=false;
                out.println("退出成功");
                out.println();
                out.println( "輸入menu,選擇菜單" );
                out.println( "輸入quit,退出服務器" );
                out.flush();
                break;
               }
             }

運行結果截圖:
網絡

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

4. UDP服務器

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

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

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

編寫網絡程序時應當選擇InputStream和OutputStream。
關係:客戶端的輸入流鏈接到服務器,服務器和Socket對象之間經過InputStream,讀取客戶端發出的信息;Socket對象經過OutputStream與服務器鏈接,將信息發送出去,服務器的輸出流與客戶端鏈接,實現了客戶端讀取Socket對象發出的信息。從而實現了雙向通訊。

6. 代碼閱讀

閱讀ServerAndThread目錄中的源代碼多線程

6.1 修改程序,在GUI界面中某個地方顯示本身的學號,而後運行該程序(截圖、出現學號)。簡述這個程序的主要功能。

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

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

3. 碼雲

相關文章
相關標籤/搜索