1. 程式人生 > >20165228 2017-2018-2 《Java程序設計》第9周學習總結

20165228 2017-2018-2 《Java程序設計》第9周學習總結

conn 語句 ref 我認 str java 服務器 ESS 設計

20165228 2017-2018-2 《Java程序設計》第9周學習總結

教材學習內容總結

  • URL類是java.net包中的一個重要的類,URL的實例封裝著一個統一資源定位符(Uniform Resource Locator),使用URL創建對象的應用程序稱作客戶端程序
  • URL對象最基本的信息:協議、地址、資源
  • 創建一個URL對象
public URL(String spec) throws MalformedURLException 
public URL(String protocol, String host,String file) throws MalformedURLException 
  • 讀取URL中的資源:
    URL對象調用
InputStream openStream()

返回一個輸入流,該輸入流指向URL對象所包含的資源

  • Internet上的主機的兩種方式表示地址:域名、IP地址
  • 獲取地址
  • Internet上主機的地址:
    1.InetAddress類的靜態方法getByName(String s);
    2.獲得一個InetAddress對象,該對象含有主機地址的域名和IP地址
  • 獲取本地機的地址:通過InetAddress類的靜態方法getLocalHost()
  • 套接字:IP地址標識Internet上的計算機,端口號標識正在計算機上運行的進程(程序)。端口號被規定為一個16位的0~65535之間的整數,端口號與IP地址的組合得出一個網絡套接字。當兩個程序需要通信時,它們可以通過使用Socket類建立套接字對象並連接在一起。
  • 建立連接到服務器的套接字對象:

    try{  Socket mysocket=new Socket(“http://192.168.0.78”,1880);
     }
    catch(IOException e) { 
     } 
  • mysocket相關的方法
  • getInputStream()獲得一個輸入流
  • getOutputStream()獲得一個輸出流
  • 用getInputStream()得到的輸入流接到另一個DataInputStream數據流上
  • 用getOutputStream()得到的輸出流接到另一個DataOutputStream數據流上
  • 服務器必須建立一個ServerSocket對象,該對象通過將客戶端的套接字對象和服務器端的一個套接字對象連接起來,從而達到連接的目的

      try{  ServerSocket  serverForClient =new ServerSocket(2010);
      }
      catch(IOException e){
      } 
  • accept()將客戶的套接字和服務器端的套接字連接起來:
    ···
    try{ Socket sc= serverForClient .accept();
    }
    catch(IOException e){}
    ···
  • 接收客戶的套接字連接:accept()方法會返回一個和客戶端Socket對象相連接的Socket對象
  • 客戶端的套接字獲得的輸入\輸出流和服務器端的套接字獲得的輸出\輸入流互相連接.
  • 使用Socket類不帶參數的構造方法Socket()創建一個套接字對象,該對象需調用

    public void connect(SocketAddress endpoint) throws IOException
  • 請求和參數SocketAddress指定地址的套接字建立連接
  • 為了使用connect方法,可以使用SocketAddress的子類InetSocketAddress創建一個對象,InetSocketAddress的構造方法是:

    InetSocketAddress(InetAddress addr, int port) 
  • 基於UDP通信的基本模式是:
    1.將數據打包,稱為數據包(好比將信件裝入信封一樣),然後將數據包發往目的地。
    2.接受別人發來的數據包(好比接收信封一樣),然後查看數據包中的內容。
  • 用DatagramPacket類創建一個對象,稱為數據包
  • DatagramPacket的以下兩個構造方法創建待發送的數據包:

    DatagramPacket(byte data[],int length,InetAddtress address,int port)
    DatagramPack(byte data[],int offset,int length,InetAddtress address,int port)
  • 用DatagramSocket類的不帶參數的構造方法:DatagramSocket()創建一個對象,該對象負責發送數據包。

    DatagramSocket  mail_out=new DatagramSocket();
    mail_out.send(data_pack); 
  • 接受數據包:
  • DatagramSocket的另一個構造方法DatagramSocket(int port) 創建一個對象,其中的參數必須和待接收的數據包的端口號相同

    DatagramSocket mail_in=new DatagramSocket(端口號); 
  • 然後對象mail_in使用方法receive(DatagramPacket pack)接受數據包。
  • 用 DatagramPack類的另外一個構造方法: DatagramPack(byte data[],int length)創建一個數據包,用於接收數據包

    byte data[]=new byte[100];
     int length=90;
           DatagramPacket pack=new DatagramPacket(data,length);
     mail_in.receive(pack); 
  • 遠程對象:
    駐留在(遠程)服務器上的對象是客戶要請求的對象,稱作遠程對象。
  • 代理的特點是它與遠程對象實現了相同的接口。
  • 存根(Stub):一種特殊的字節碼,並讓這個存根產生的對象為作為遠程對象的代理
  • Remote接口:RMI為了標識一個對象是遠程對象,即可以被客戶請求的對象,要求遠程對象必須實現java.rmi包中的Remote接口

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

  • 問題1:基於UDP的通信和基於TCP的通信不同點是什麽?
  • 問題1解決方案:基於UDP的信息傳遞更快,但不提供可靠性保證

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

  • 問題1:敲代碼的時候出現了這樣的差錯,在沒仔細看程序的情況下,沒能根據錯誤提示排除原因技術分享圖片
  • 問題1解決方案:仔細閱讀代碼後,發現這是一句輸出語句,system中間誤輸了一個空格

    代碼托管

    技術分享圖片

這周好像修改了部分之前的代碼,所以算到這周的代碼量了。實際上代碼量為516
(statistics.sh腳本的運行結果截圖)

上周考試錯題總結

  • 錯題1:對於下列程序,哪個敘述是正確的? A
    A.JVM認為這個應用程序共有兩個線程。
    B.JVM認為這個應用程序只有一個主線程。
    C.JVM認為這個應用程序只有一個thread線程。
    D.程序有編譯錯誤,無法運行。
  • 錯題2:進程的基本狀態有:新建、運行、阻塞、死亡。 A
    A.true
    B.false

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

本周學習的知識讓我認識到java不限於本地的應用,除了數據庫外,還可以通過網絡傳輸和接受數據包並且實現一些操作。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 25篇 400小時
第一周 235/235 1/1 15/15
第二周 224/459 2/3 15/30
第三周 443/902 1/4 15/73
第四周 577/1479 2/6 17/90
第五周 1222/2360 1/7 14/104
第六周 1527/3294 1/8 14/118
第七周 591/3883 1/9 14/132
第八周 1705/5158 1/10 12/144
第九周 516/5674 1/11 14/158

20165228 2017-2018-2 《Java程序設計》第9周學習總結