java基礎之網絡

JAVA 的網絡

一.概述:

    1.1 簡介:

        在操做系統中,網絡和文件其實都是經過I/O總線鏈接到系統。都會有一個定位類,例如:file和Url,而後再經過input,output等I/O類才進行數據交互。本文介紹下java的網絡,及其相關類。java

    1.2 網絡協議

        不一樣設備之間、不一樣進程之間的通訊都是須要通訊協議來格式化數據、分裝,而後組裝數據、反格式化數據。算法

        a) 7層協議:數據庫

 

整體劃分:編程

            ISO提出的OSI(Open System Interconnection)模型將網絡分爲七層,即 物理層( Physical )、 數據鏈路層(Data Link)、網絡層(Network)、 傳輸層(Transport)、 會話層(Session)、 表示層(Presentation)和 應用層(Application)。瀏覽器

        1. 物理層服務器

            物理層(Physical layer)是參考模型的最低層。該層是網絡通訊的數據傳輸介質,由鏈接不一樣結點的電纜與設備共同構成。主要功能是:利用傳輸介質爲數據鏈路層提供物理鏈接,負責處理數據傳輸並監控數據出錯率,以便數據流的透明傳輸。網絡

        2. 數據鏈路層socket

            數據鏈路層(Data link layer)是參考模型的第2層。 主要功能是:在物理層提供的服務基礎上,在通訊的實體間創建數據鏈路鏈接,傳輸以「幀」爲單位的數據包,並採用差錯控制與 流量控制方法,使有差錯的物理線路變成無差錯的數據鏈路。tcp

        3. 網絡層加密

            網絡層(Network layer)是參考模型的第3層。主要功能是:爲數據在結點之間傳輸建立邏輯鏈路,經過路由選擇算法爲分組經過通訊子網選擇最適當的路徑,以及實現擁塞控制、 網絡互聯等功能。

        4. 傳輸層

            傳輸層(Transport layer)是參考模型的第4層。主要功能是向用戶提供可靠的端到端(End-to-End)服務,處理數據包錯誤、數據包次序,以及其餘一些關鍵傳輸問題。傳輸層向高層屏蔽了下層數據通訊的細節,所以,它是計算機通訊體系結構中關鍵的一層。

        5. 會話層

            會話層(Session layer)是參考模型的第5層。主要功能是:負責維擴兩個結點之間的傳輸連接,以便確保點到點傳輸不中斷,以及管理數據交換等功能。

        6. 表示層

            表示層(Presentation layer)是參考模型的第6層。主要功能是:用於處理在兩個通訊系統中交換信息的表示方式,主要包括數據格式變換、 數據加密與解密、數據壓縮與恢復等功能。

        7. 應用層

            應用層(Application layer)是參考模型的最高層。主要功能是:爲 應用軟件提供了不少服務,例如文件服務器、數據庫服務、 電子郵件與其餘網絡軟件服務。


        b) 5層協議

 


名稱 功能 協議
應用層 文件傳輸、電子郵件、文件服務、虛擬終端 TFTP(文件傳輸)、HTTP(萬維網)、SNMP、FTP、SMTP、DNS、Telnet(遠程終端接入)
傳輸層 提供端對端的接口 TCP、UDP
網絡層 爲數據包選擇路由 IP、ICMP、OSPF、EIGRP、Lgmp
數據鏈路層 傳送有地址的幀以及錯誤檢測功能 SLIP、CSLIP、PPP、MTU
物理層 以二進制數據形式在物理媒體上傳輸數據 ISO21十、IEEE80二、IEEE802.2


        c)  TCP數據封裝

            tcp封裝數據包的格式爲:

            數據幀:幀頭+IP數據包+幀尾 (幀頭包括源和目標主機MAC地址及類型,幀尾是校驗字)

            IP數據包:IP頭部+TCP數據信息(IP頭包括源和目標主機IP地址、類型、生存期等)

            TCP數據信息:TCP頭部+實際數據 (TCP頭包括源和目標主機端口號、順序號、確認號、校驗字等)


        d)  tcp鏈接《3次握手爲主》

            tcp的3次握手

 

            tcp的4次握手

 

    1.3  java依賴類:

        java.net.InetAddress:ip處理類,將域名或者IP解析爲 ip/域名的形式。

        java.net.URL:網絡鏈接類。封裝了InetAddress和系統網絡鏈接。處理鏈接問題,和File類對文件的做用類似。

        java.net.URLConnection:網絡處理類,鏈接後處理數據交互等功能。

        java.net.ServerSocket:服務器

        java.net.Socket

二.案例

    2.1 InAddress:地址處理

/**
	 * @throws Exception
	 * @see 域名處理:返回域名/IP
	 */
	@Test
	public void intAddress() throws Exception {
		InetAddress local = InetAddress.getLocalHost();
		System.out.println("本地IP:" + local.getHostAddress());//本地IP:192.168.124.1
		System.out.println("本地名稱:" + local.getHostName());//本地名稱:ssHss-PC
		InetAddress[] local2 = InetAddress.getAllByName("www.baidu.com");//IP180.97.33.108
		for (InetAddress ia : local2) {
			System.out.println("IP" + ia.getHostAddress());
			System.out.println("名稱" + ia.getHostName());
			//IP:180.97.33.108
			//名稱:www.baidu.com
			//IP:180.97.33.107
			//名稱:www.baidu.com
		}
	}

    3.2 URLConnection

/**
        * @throws Exception
        * @see URLConnection
        * @see 域名類:URL、處理鏈接前的工做(協議、域名、IP、端口、鏈接)
        * @See 鏈接處理類類:URLConnection、處理鏈接後的工做(讀寫)
        */
public void testURL() throws Exception {
              // 域名
              String urlPath = "http://www.baidu.com";
              // 生成 URL類
              URL url = new URL(urlPath);
              // 鏈接
              URLConnection urlconn = url.openConnection();
              System.out.println("========== head  ===========");
              Map<String, List<String>> map = urlconn.getHeaderFields();
              for (Entry<String, List<String>> entry : map.entrySet()) {
                     String key = entry.getKey();
                     List<String> value = entry.getValue();
                     System.out.println(key + "  :  " + value);
              }
 
              System.out.println("========== inputStream    ================");
              InputStream urlinput = urlconn.getInputStream();
 
              /**
               * 以字符
               */
              BufferedReader r = new BufferedReader(new InputStreamReader(urlinput));
              String readLine = null;
              int line = 1;
              while ((readLine = r.readLine()) != null) {
                     System.out.println(line + "  :" + readLine);
                     line++;
              }
              /**
               * 以字節
               */
              // byte[] tempBytes = new byte[100];
              // int byteRead = 0;
              // while ((byteRead = urlinput.read(tempBytes)) != -1) {
              // System.out.println(tempBytes);
              // }
       }

        鏈接www.baidu.com獲取的信息:

        瀏覽器截圖

        console打印圖:

    3.3 Socket編程(TCP協議)

        a) 監聽80端口:

    /**
     * @throws IOException
     * @see severSocket :服務器Socket
     * @see socket:網絡處理對象
     */
    @Test
    public void serviceSocket() throws IOException {
       // 建立ServerSocket(端口)
       ServerSocket server = new ServerSocket(8080);
       // 監聽--》阻塞(等待鏈接)
       Socket socket = server.accept();
       // 處理數據
       BufferedReader buffer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
       String readline = null;
       while ((readline = buffer.readLine()) != null) {
           System.out.println(readline);
       }
    }

        Console圖

 

        browers圖

b) Server-Clinet實例

server-socket:

	/**
	 * @throws IOException
	 * @see severSocket :服務器Socket
	 * @see socket:網絡處理對象
	 */
	@Test
	public void serviceSocket() throws IOException {
		// 建立ServerSocket(端口)
		ServerSocket server = new ServerSocket(8080);
		// 監聽--》阻塞(等待鏈接)
		Socket socket = server.accept();

		PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
		System.out.println("========== server-write  ===========");
		out.println("你好!--我是server");
		// 處理數據
		BufferedReader buffer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		String readline = null;
		System.out.println("========== server-read  ===========");
		while ((readline = buffer.readLine()) != null) {
			System.out.println(readline);
		}

		out.close();
		socket.close();

	}

client:

/**
     * @throws IOException
     * @See clientSocket
     */
    @Test
    public void clientSocket() throws Exception {
       Socket s = new Socket("localhost", 8080);
       PrintWriter out = new PrintWriter(s.getOutputStream(), true);
       System.out.println("========== client-write  ===========");
       out.println("你好!..我是client");
        BufferedReader buffer = new BufferedReader(new InputStreamReader(s.getInputStream()));
       String readline = null;
       System.out.println("========== client-read  ===========");
       while ((readline = buffer.readLine()) != null) {
           System.out.println(readline);
       }
 
       out.close();
       s.close();
 
    }
相關文章
相關標籤/搜索