2016-2017-20155329 《Java程序設計》第十週學習總結

學號 2016-2017-20155329 《Java程序設計》第十週學習總結

教材學習內容總結

學習目標html

  • 瞭解計算機網絡基礎
 

OSI分層(7層):物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。java

1 物理層:RJ4五、CLOCK、IEEE802.3 (中繼器,集線器,網關)git

2 數據鏈路:PPP、FR、HDLC、VLAN、MAC (網橋,交換機)編程

3 網絡層:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)數組

4 傳輸層:TCP、UDP、SPX服務器

5 會話層:NFS、SQL、NETBIOS、RPC網絡

6 表示層:JPEG、MPEG、ASII多線程

7 應用層:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFSsocket

一般OSI參考模型第一層到第三層稱爲底層(lower layer),又叫介質層(media layer),底層負責數據在網絡中的傳送,網絡互連設備每每位於下三層,以硬件和軟件的方式來實現。OSI參考模型的第五層到第七層稱爲高層(upper layer),又叫住幾層(host layer),高層用於保障數據的正確傳輸,以軟件方式來實現。tcp

  • 掌握Ja Socket編程

    InetAddress

    //獲取本機的InetAddress實例
    InetAddress address =InetAddress.getLocalHost();
    address.getHostName();//獲取計算機名
    address.getHostAddress();//獲取IP地址
    byte[] bytes = address.getAddress();//獲取字節數組形式的IP地址,以點分隔的四部分

//獲取其餘主機的InetAddress實例
InetAddress address2 =InetAddress.getByName("其餘主機名");
InetAddress address3 =InetAddress.getByName("IP地址");

URL類
  • URL(Uniform Resource Locator)統一資源定位符,表示Internet上某一資源的地址,協議名:資源名稱
  • //建立一個URL的實例
    URL baidu =new URL("http://www.baidu.com");
    URL url =new URL(baidu,"/index.html?username=tom#test");//?表示參數,#表示錨點
    url.getProtocol();//獲取協議
    url.getHost();//獲取主機
    url.getPort();//若是沒有指定端口號,根據協議不一樣使用默認端口。此時getPort()方法的返回值爲 -1
    url.getPath();//獲取文件路徑
    url.getFile();//文件名,包括文件路徑+參數
    url.getRef();//相對路徑,就是錨點,即#號後面的內容
    url.getQuery();//查詢字符串,即參數
TCP編程
  • TCP協議是面向鏈接的、可靠的、有序的、以字節流的方式發送數據,經過三次握手方式創建鏈接,造成傳輸數據的通道,在鏈接中進行大量數據的傳輸,效率會稍低
  • Java中基於TCP協議實現網絡通訊的類
    客戶端的Socket類
    服務器端的ServerSocket類
  • Socket通訊的步驟
    ① 建立ServerSocket和Socket
    ② 打開鏈接到Socket的輸入/輸出流
    ③ 按照協議對Socket進行讀/寫操做④ 關閉輸入輸出流、關閉Socket
  • 服務器端:
    ① 建立ServerSocket對象,綁定監聽端口
    ② 經過accept()方法監聽客戶端請求
    ③ 鏈接創建後,經過輸入流讀取客戶端發送的請求信息
    ④ 經過輸出流向客戶端發送鄉音信息
    ⑤ 關閉相關資源
  • /**
  • 基於TCP協議的Socket通訊,實現用戶登陸,服務端
    */
  • //一、建立一個服務器端Socket,即ServerSocket,指定綁定的端口,並監聽此端口
    ServerSocket serverSocket =newServerSocket(10086);//1024-65535的某個端口
  • //二、調用accept()方法開始監聽,等待客戶端的鏈接
    Socket socket = serverSocket.accept();
  • //三、獲取輸入流,並讀取客戶端信息
    InputStream is = socket.getInputStream();
    InputStreamReader isr =newInputStreamReader(is);
    BufferedReader br =newBufferedReader(isr);
    String info =null;
    while((info=br.readLine())!=null){
    System.out.println("我是服務器,客戶端說:"+info);
    }
    socket.shutdownInput();//關閉輸入流
  • //四、獲取輸出流,響應客戶端的請求
    OutputStream os = socket.getOutputStream();
    PrintWriter pw = new PrintWriter(os);
    pw.write("歡迎您!");
    pw.flush();

  • //五、關閉資源
    pw.close();
    os.close();
    br.close();
    isr.close();
    is.close();
    socket.close();
    serverSocket.close();
  • 客戶端:

    ① 建立Socket對象,指明須要鏈接的服務器的地址和端口號
    ② 鏈接創建後,經過輸出流想服務器端發送請求信息
    ③ 經過輸入流獲取服務器響應的信息
    ④ 關閉響應資源
  • 理解混合密碼系統
  • 掌握Java 密碼技術相關API的使用
    //客戶端
  • //一、建立客戶端Socket,指定服務器地址和端口
    Socket socket =newSocket("localhost",10086);
  • //二、獲取輸出流,向服務器端發送信息
    OutputStream os = socket.getOutputStream();//字節輸出流
    PrintWriter pw =newPrintWriter(os);//將輸出流包裝成打印流
    pw.write("用戶名:admin;密碼:123");
    pw.flush();
    socket.shutdownOutput();
  • //三、獲取輸入流,並讀取服務器端的響應信息
    InputStream is = socket.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String info = null;
    while((info=br.readLine())!null){
    System.out.println("我是客戶端,服務器說:"+info);
    }

  • //四、關閉資源
    br.close();
    is.close();
    pw.close();
    os.close();
    socket.close();
  • 應用多線程實現服務器與多客戶端之間的通訊

① 服務器端建立ServerSocket,循環調用accept()等待客戶端鏈接
② 客戶端建立一個socket並請求和服務器端鏈接
③ 服務器端接受苦讀段請求,建立socket與該客戶創建專線鏈接
④ 創建鏈接的兩個socket在一個單獨的線程上對話
⑤ 服務器端繼續等待新的鏈接

  • /服務器線程處理
  • //和本線程相關的socket
    Socket socket =null;
  • //
    public serverThread(Socket socket){
    this.socket = socket;
    }

    publicvoid run(){服務器處理代碼
      }

//============================================

  • //服務器代碼
    ServerSocket serverSocket =newServerSocket(10086);
    Socket socket =null;
    int count =0;//記錄客戶端的數量
    while(true){
    socket = serverScoket.accept();
    ServerThread serverThread =newServerThread(socket);
    serverThread.start();
    count++;
    System.out.println("客戶端鏈接的數量:"+count);
    }

    教材學習中的問題和解決過程

教材學習有問題先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,若是別人沒有提出相同問題,能夠編輯文檔添加,而後把本身提出的問題複製到下面:

  • 問題1:多線程的優先級問題
  • 問題1解決方案:可適當的下降優先級,否側可能會有程序運行效率低的狀況
  • 問題2:是否關閉輸出流和輸入流
  • 問題2解決方案:對於同一個socket,若是關閉了輸出流,則與該輸出流關聯的socket也會被關閉,因此通常不用關閉流,直接關閉socket便可
  • ...

代碼調試中的問題和解決過程

教材中代碼調試有問題先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,若是別人沒有提出相同問題,能夠編輯文檔添加,而後把本身提出的問題複製到下面:

  • 問題1:XXXXXX
  • 問題1解決方案:XXXXXX
  • 問題2:XXXXXX
  • 問題2解決方案:XXXXXX
  • ...

代碼託管

(statistics.sh腳本的運行結果截圖)

上週考試錯題總結

結對及互評

我與20155327李百乾結對學習,在一塊兒學習的時間甚少,沒有過多評論。

評分標準

  1. 正確使用Markdown語法(加1分):
    • 不使用Markdown不加分
    • 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
    • 排版混亂的不加分
  2. 模板中的要素齊全(加1分)
    • 缺乏「教材學習中的問題和解決過程」的不加分
    • 缺乏「代碼調試中的問題和解決過程」的不加分
    • 代碼託管不能打開的不加分
    • 缺乏「結對及互評」的不能打開的不加分
    • 缺乏「上週考試錯題總結」的不能加分
    • 缺乏「進度條」的不能加分
    • 缺乏「參考資料」的不能加分
  3. 教材學習中的問題和解決過程, 一個問題加1分

  4. 代碼調試中的問題和解決過程, 一個問題加1分

  5. 本週有效代碼超過300分行的(加2分)
    • 一週提交次數少於20次的不加分
  6. 其餘加分:
    • 週五前發博客的加1分
    • 感想,體會不假大空的加1分
    • 排版精美的加一分
    • 進度條中記錄學習時間與改進狀況的加1分
    • 有動手寫新代碼的加1分
    • 課後選擇題有驗證的加1分
    • 代碼Commit Message規範的加1分
    • 錯題學習深刻的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 結對學習狀況真實可信的加1分
  7. 扣分:
    • 有抄襲的扣至0分
    • 代碼做弊的扣至0分
    • 遲交做業的扣至0分

點評模板:

  • 博客中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 代碼中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 基於評分標準,我給本博客打分:XX分。得分狀況以下:xxx

  • 參考示例

點評過的同窗博客和代碼

其餘(感悟、思考等,可選)

這兩週在補書上代碼,一個一個的敲,枯燥無味,在敲代碼的過程當中雖然發現了一些問題,也學習到不少。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 3000行 30篇 400小時
第十週 200/200 15/30 19/211

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

  • 計劃學習時間:14小時

  • 實際學習時間:19小時

  • 改進狀況:

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索