1. 程式人生 > >20165322王瑤佳-java第9周作業

20165322王瑤佳-java第9周作業

信息 pen 分享 分布式 ddt sina 發送 所有 第一個

課本知識總結

第十三章 Java網絡編程

  1. URL類
  • URL類是java.net包中的一個重要的類
  • 一個URL對象包含的三個基本信息:協議、地址和資源
    • 協議:必須是URL對象所在的Java虛擬機支持的協議,常用的有:Http、Ftp、File協議,由參數protocol指定
    • 地址:必須是能連接的有效IP地址或域名,由參數host指定
    • 資源:可以是主機上的任何一個文件,由參數file指定
  • 構造方法
    • public URL (String spec) throws MalformedURLException
    • public URL(String protocol,String host,String file) throws MalformedURLException
  • 調用InputStream openStream()方法返回一個輸入流
  1. InetAddress類
  • Internet上主機表示地址的兩種方式
    • 域名
    • IP地址
  • 獲取地址
    • 獲取Internet上主機地址:getByName(String s)
    • 獲取本地機地址:getLocalHost()
  1. 套接字
  • 是基於TCP協議的網絡通信
  • 客戶端套接字
    • 對象建立方法:使用Socket類
    • Socket構造方法:Socket(String host,int port)
  • ServerSocket對象與服務器端套接字
    • 構造方法:ServerSocket(int port)
  • 使用方法accept()將客戶端的套接字和服務器端的套接字連接起來
try{ Socket sc = serverForClient.accept();
}
catch(IOException e) {}
  • 通信完畢後,套接字使用close()方法關閉套接字連接
  • 多線程技術
    • 服務器端收到一個客戶端的套接字時,就會啟動一個專門為該客戶服務的線程
  • 套接字通信基本原則
    • 服務器應當啟動一個專門的線程,在該線程中和客戶的套接字建立連接
    • 由於套接字的輸入流在讀取信息時可能發生阻塞,客戶端和服務器端都需要在一個單獨的線程中讀取信息
  1. UPD數據報
  • 基於UPD通信的基本模式
    • 將數據打包發往目的地
    • 接收發來的數據包並查看內容
  • 發送數據包
    • 打包:使用DatagramPacket類
DatagramPacket(byte data[],int length,InetAddtress address,int port)
DatagramPack(byte data[],int offset,int length,InetAddtress address,int port)
  • 發送:使用構造方法DatagramSocket()創建一個對象
  • 接收數據包
    • 使用構造方法DatagramSocket(int port)創建一個對象
    • 使用方法receive(DatagramPacket pack)接收數據包
  1. 廣播數據報
  • A類地址:a<128,則b.c.d表示主機
  • B類地址:128<=a<192,則a.b表示網絡地址,c.d表示主機地址
  • C類地址:a>=192,a.b.c表示網絡地址,d表示主機地址
  • D類地址:224.0.0.0~224.255.255.255是保留地址
  • 要廣播或接收廣播的主機都必須加入到同一個D類地址
  1. RMI是一種分布式技術,使用RMI可以讓一個虛擬機(JVM)上的應用程序請求調用位於網絡上另一處JVM上的對象方法

遇到的問題及解決方法

  • 在運行本章第一個代碼時出現技術分享圖片

    解決方法:將兩個程序分別打包在同一文件夾下,通過輸入javac -encoding gbk Example13_1.java,然後成功編譯並運行。

代碼托管

技術分享圖片

上周錯題總結

  1. 技術分享圖片

    解析:技術分享圖片

  2. 技術分享圖片

    解析:當main方法中沒有創建其他的線程,main方法返回時,JVM就會結束Java應用程序;當main方法中創建了其他線程,要等到所有線程都結束,JVM才會結束Java應用程序

  3. 技術分享圖片

    解析:C項:先前的實體會成為“垃圾”,並且不會被垃圾收集器收集。D項:當線程進入死亡狀態後,線程就還可以調用isAlive()方法,並且返回值為false。

20165322王瑤佳-java第9周作業