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

1. 本週學習總結

思惟導圖:
html


2. 書面做業

Q1. 網絡基礎

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


cec.jmu.edu.cn的訪問速度更快一些,由於它的IP地址在廈門市,而本機的IP地址也在廈門市。java

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

telnet的默認端口號爲23.

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

沒有內容。嘗試使用GET /index HTTP/1.0命令會返回主頁的源碼。

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

網易雲音樂,360瀏覽器,QQ 443,80http端口。使用TCP協議.如119.145.235.91在廣東省深圳市 電信。編程

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

IP,端口,協議,輸入輸出流。

Q2. 編寫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請求獲取html文檔,要GET/HTTP/1.0.瀏覽器

2.4 啓動網絡調試助手,將其設置爲TCP Server,並啓動

嘗試使用Client.java鏈接該TCP Server,使用該服務器向Client發送信息。(截圖)
緩存

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

服務器能夠發送信息給Client,Client也可發送信息給服務器,主要是獲得Socket對象的輸出流getOutputStream(),才能從控制檯輸出信息到服務器,控制檯的輸入Scanner(System.in)實現,PrintWriter從控制檯輸出信息,最主要的是在輸出後,調用flush()方法起到緩存做用,避免數據丟失。

2.6 選作:實現2.5

Q3. ServerSocket與TCP服務器

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

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

Q4. UDP服務器

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

//201521123014
          try {
                InetAddress address = InetAddress.getLocalHost();
                int port = 8190;

                DatagramSocket socket = new DatagramSocket(port, address);

                byte[] buf = new byte[1024];  
                DatagramPacket packet = new DatagramPacket(buf, buf.length); 

                socket.receive(packet);  

                String getMsg = new String(buf, 0, packet.getLength());
                System.out.println("客戶端發送的數據爲:" + getMsg);

                Menu();
                BufferedReader in=new BufferedReader(new InputStreamReader((socket).getInputStream()));
                String line=null;
                while(!(line=in.readLine()).equals("quit"))
                {
                    if(line.equals("1"))
                    {
                        Date date=new Date();
                        DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        String time=format.format(date);
                        writer.println(time);
                    }
                    else if(line.equals("2"))
                    {
                        String ip = InetAddress.getLocalHost().getHostAddress();
                        writer.println(ip);
                    }
                    else if(line.equals("4"))
                    {
                        return;
                    }


                InetAddress clientAddress = packet.getAddress();
                int clientPort = packet.getPort();  
                SocketAddress sendAddress = packet.getSocketAddress();
                String feedback = "Received";
                byte[] backbuf = feedback.getBytes();
                DatagramPacket sendPacket = new DatagramPacket(backbuf, backbuf.length, sendAddress);
                socket.send(sendPacket);  

                socket.close();   

            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch(IOException e) {
                e.printStackTrace();
            }


        }

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

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

InputStream和OutputStream,用於服務器(客戶端)信息的寫入和讀取,達到通訊的效果。
socket的輸入輸出流是字節流,而後用字符流來包裝。
服務器從客戶端得到輸入流或輸出流而後向用戶讀取或者輸出。服務器

Q6. 代碼閱讀

閱讀ServerAndThread目錄中的源代碼網絡

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

  • 主要功能:客戶端和服務端實現信息的傳遞,通訊做用多線程

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

  • 客戶端
    socket

  • 服務端

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

三個客戶端共享所有的信息,殊不知道誰發了這些信息,只有從服務端才能夠,能夠在程序中加入客戶端的名稱。


3. 碼雲

碼雲代碼提交記錄


4.課外閱讀

4.1 Java Tutorial:Custom Networking

Networking Basics:
在網上運行的電腦都是用TCP和UDP來進行互相通訊的。當咱們寫網絡程序的時候,都是在應用層上操做。通常來講,咱們都不用關心TCP和UDP層。可使用java.net包。這些類提供獨立於系統地網絡通訊。
URL統一資源定位符是對能夠從互聯網上獲得的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每一個文件都有一個惟一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。

4.2 HTTP協議簡介

在Web應用中,服務器把網頁傳給瀏覽器,實際上就是把網頁的HTML代碼發送給瀏覽器,讓瀏覽器顯示出來。而瀏覽器和服務器之間的傳輸協議是HTTP,因此:

  • HTML是一種用來定義網頁的文本,會HTML,就能夠編寫網頁;
  • HTTP是在網絡上傳輸HTML的協議,用於瀏覽器和服務器的通訊。
相關文章
相關標籤/搜索