第十一週java學習總結

第十一週java學習總結

學習內容

第13章 Java網絡編程
主要內容
URL類
InetAdress類
套接字
UDP數據報
廣播數據報
Java遠程調用(RMI)git

重點和難點
重點: URL的使用和套接字鏈接機制
難點:套接字鏈接機制編程

  • 1.URL類
    URL類是java.net包中的一個重要的類,URL的實例封裝着一個統一資源定位符(Uniform Resource Locator),使用URL建立對象的應用程序稱做客戶端程序。
    一個URL對象一般包含最基本的三部分信息:協議、地址、資源。
    URL的構造方法
    URL類一般使用以下的構造方法建立一個URL對象:
public URL(String spec) throws MalformedURLException 
public URL(String protocol, String host,String file) throws MalformedURLException

讀取URL中的資源
URL對象調用
InputStream openStream()
方法能夠返回一個輸入流,該輸入流指向URL對象所包含的資源。經過該輸入流能夠將服務器上的資源讀入到客戶端。服務器

  • 2.InetAdress類
    地址的表示
    Internet上的主機有兩種方式表示地址:
    域名
    例如 www.tsinghua.edu.cn
    IP地址
    例如 202.108.35.210
    java.net包中的InetAddress類對象含有一個Internet主機地址的域名和IP地址,例如 www.sina.com.cn/202.108.37.40 。
package inetaddressdemo;

import java.net.*;

/**

 * 演示InetAddress類的基本使用

 */

public class InetAddressDemo {

         public static void main(String[] args) {

                   try{

                            //使用域名建立對象

                            InetAddress inet1 = InetAddress.getByName("www.163.com");

                            System.out.println(inet1);

                            //使用IP建立對象

                            InetAddress inet2 = InetAddress.getByName("127.0.0.1");

                            System.out.println(inet2);

                            //得到本機地址對象

                            InetAddress inet3 = InetAddress.getLocalHost();

                            System.out.println(inet3);

                            //得到對象中存儲的域名

                            String host = inet3.getHostName();

                            System.out.println("域名:" + host);

                            //得到對象中存儲的IP

                            String ip = inet3.getHostAddress();

                            System.out.println("IP:" + ip);

                   }catch(Exception e){}

         }

}

獲取地址
獲取Internet上主機的地址
可使用InetAddress類的靜態方法getByName(String s);
得到一個InetAddress對象,該對象含有主機地址的域名和IP地址,該對象用以下格式表示它包含的信息:
www.sina.com.cn/202.108.37.40
獲取本地機的地址
咱們可使用InetAddress類的靜態方法getLocalHost()得到一個InetAddress對象,該對象含有本地機的域名和IP地址。網絡

  • 3.套接字
    IP地址標識Internet上的計算機,端口號標識正在計算機上運行的進程(程序)。端口號被規定爲一個16位的0~65535之間的整數。
    當兩個程序須要通訊時,它們能夠經過使用Socket類創建套接字對象並鏈接在一塊兒(端口號與IP地址的組合得出一個網絡套接字)。socket

  • 4.客戶端套接字
    客戶端的程序使用Socket類創建負責鏈接到服務器的套接字對象。
    創建鏈接到服務器的套接字對象:
try{  Socket mysocket=new Socket(「http://192.168.0.78」,1880);
     }
    catch(IOException e)
    {  }

與mysocket相關的方法
getInputStream()得到一個輸入流
getOutputStream()得到一個輸出流
用getInputStream()獲得的輸入流接到另外一個DataInputStream數據流上
用getOutputStream()獲得的輸出流接到另外一個DataOutputStream數據流上tcp

  • 5.UDP數據報
    基於UDP的通訊和基於TCP的通訊不一樣,基於UDP的信息傳遞更快,但不提供可靠性保證。
    基於UDP通訊的基本模式是:
    將數據打包,稱爲數據包(比如將信件裝入信封同樣),而後將數據包發往目的地。
    接受別人發來的數據包(比如接收信封同樣),而後查看數據包中的內容。分佈式

  • 6發送數據包
    用DatagramPacket類將數據打包,即用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);
  • 7.RMI的設計細節
    擴展Remote接口
    定義一個接口是java.rmi包中Remote的子接口,即擴展Remote接口。
    RemoteSubject.java
    Java遠程調用,RMI(Remote Method Invocation)是一種分佈式技術,使用RMI可讓一個虛擬機(JVM)上的應用程序請求調用位於網絡上另外一處的JVM上的對象方法。習慣上稱發出調用請求的虛擬機(JVM)爲(本地)客戶機,稱接受並執行請求的虛擬機(JVM)爲(遠程)服務器。
    遠程對象
    建立遠程對象的類必需要實現Remote接口,RMI使用Remote接口來標識遠程對象,可是Remote中沒有方法,所以建立遠程對象的類須要實現Remote接口的一個子接口。RemoteConcreteSubject.java
    存根(Stub)與代理:RMI使用rmic命令生成存根
    RemoteConcreteSubject_Stub.class
    啓動註冊rmiregistry: 執行rimregistry命令
    啓動遠程對象服務:遠程服務器使用java.rmi包中的Naming類調用其類方法rebind(String name, Remote obj)綁定一個遠程對象到rmiregistry所管理的註冊表中,該方法的name參數是URL格式,obj參數是遠程對象,未來客戶端的代理會經過name 找到遠程對象obj。 BindRemoteObject.java
    運行客戶端程序:遠程服務器啓動遠程對象服務後,客戶端就能夠運行有關程序,訪問使用遠程對象。 ClientApplication.java
  • 8.echo服務器
    package tcp;

import java.io.*;

import java.net.*;

/**

 * echo服務器

 * 功能:將客戶端發送的內容反饋給客戶端

 */

public class SimpleSocketServer {

         public static void main(String[] args) {

                   ServerSocket serverSocket = null;

                   Socket socket = null;

                   OutputStream os = null;

                   InputStream is = null;

                   //監聽端口號

                   int port = 10000;

                   try {

                            //創建鏈接

                            serverSocket = new ServerSocket(port);

                            //得到鏈接

                            socket = serverSocket.accept();

                            //接收客戶端發送內容

                            is = socket.getInputStream();

                            byte[] b = new byte[1024];

                            int n = is.read(b);

                            //輸出

                            System.out.println("客戶端發送內容爲:" + new String(b,0,n));

                            //向客戶端發送反饋內容

                            os = socket.getOutputStream();

                            os.write(b, 0, n);

                   } catch (Exception e) {

                            e.printStackTrace();

                   }finally{

                            try{

                                     //關閉流和鏈接

                                     os.close();

                                     is.close();

                                     socket.close();

                                     serverSocket.close();

                            }catch(Exception e){}

                   }

         }

}

學習總結

理解 URL類是對統一資源定位符的抽象,使用URL建立對象的應用程序稱做客戶端程序。
網絡套接字是基於TCP協議的有鏈接通訊,套接字鏈接就是客戶端的套接字對象和服務器端的套接字對象經過輸入、輸出流鏈接在一塊兒。
基於UDP的通訊和基於TCP的通訊不一樣,基於UDP的信息傳遞更快,但不提供可靠性保證。
設計廣播數據報網絡程序時,必須將要廣播或接收廣播的主機加入到同一個D類地址。D類地址也稱做個組播地址。
RMI是一種分佈式技術,使用RMI可讓一個虛擬機(JVM)上的應用程序請求調用位於網絡上另外一處的JVM上的對象方法RMI是一種分佈式技術。

提交代碼截圖

代碼推送

代碼託管學習

相關文章
相關標籤/搜索