20145229 《Java程序設計》第10周學習總結

20145229 《Java程序設計》第10周學習總結

教材學習內容總結html

Java網絡編程技術java

數據交換

在計算機網絡中,如今命名IP地址的規定是IPv4協議,該協議規定每一個IP地址由4個0-255之間的數字組成,例如10.0.120.34。每一個接入網絡的計算機都擁有惟一的IP地址。程序員

一個IP地址能夠對應多個域名,一個域名只能對應一個IP地址。編程

在網絡中傳輸的數據,所有是以IP地址做爲地址標識,因此在實際傳輸數據之前須要將域名轉換爲IP地址,實現這種功能的服務器稱之爲DNS服務器,也就是通俗的說法叫作域名解服務器

爲了可以方便的識別網絡上的每一個設備,網絡中的每一個設備都會有一個惟一的數字標識,這個就是IP地址。在計算機網絡中,如今命名IP地址的規定是IPv4協議,該協議規定每一個IP地址由4個0-255之間的數字組成,例如10.0.120.34。每一個接入網絡的計算機都擁有惟一的IP地址,這個IP地址多是固定的,也能夠是動態的。網絡

經過IP地址查找到該臺計算機,而後經過端口標識這臺計算機上的一個惟一的程序。這樣就能夠進行網絡數據的交換了。框架

網絡編程概述

網絡編程就是兩個或多個程序之間的數據交換,和普通的單機程序相比,網絡程序最大的不一樣就是須要交換數據的程序運行在不一樣的計算機上。socket

網絡通信基於「請求-響應」模型。也就是通信的一端發送數據,另一端反饋數據,網絡通信都基於該模型。tcp

在網絡通信中,第一次主動發起通信的程序被稱做客戶端(Client)程序,簡稱客戶端,而在第一次通信中等待鏈接的程序被稱做服務器端(Server)程序,簡稱服務器。學習

P2P程序是一種特殊的程序,應該一個P2P程序中既包含客戶端程序,也包含服務器端程序。

協議:規定了傳輸數據格式。

網絡通信方式

在現有的網絡中,網絡通信的方式主要有兩種:

一、 TCP(傳輸控制協議)方式
二、 UDP(用戶數據報協議)方式

客戶端網絡編程步驟

一、 創建網絡鏈接
二、 交換數據
三、 關閉網絡鏈接

網絡編程的步驟:

一、 監聽端口
服務器端屬於被動等待鏈接,因此服務器端啓動之後,不須要發起鏈接,而只須要監聽本地計算機的某個固定端口便可。
這個端口就是服務器端開放給客戶端的端口,服務器端程序運行的本地計算機的IP地址就是服務器端程序的IP地址。
二、 得到鏈接
當客戶端鏈接到服務器端時,服務器端就能夠得到一個鏈接,這個鏈接包含客戶端的信息,例如客戶端IP地址等等,服務器端和客戶端也經過該鏈接進行數據交換。
通常在服務器端編程中,當得到鏈接時,須要開啓專門的線程處理該鏈接,每一個鏈接都由獨立的線程實現。
三、 交換數據
服務器端經過得到的鏈接進行數據交換。服務器端的數據交換步驟是首先接收客戶端發送過來的數據,而後進行邏輯處理,再把處理之後的結果數據發送給客戶端。簡單來講,就是先接收再發送,這個和客戶端的數據交換數序不一樣。

Java網絡編程技術

和網絡編程有關的基本API位於java.net包中。基礎的網絡類——InetAddress類。該類的功能是表明一個IP地址,而且將IP地址和域名相關的操做方法包含在該類的內部。

代碼實例:

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){}
    }
    }

/127.0.0.1
chen/192.168.1.100
域名:chen
IP:192.168.1.100
TCP編程

TCP方式的網絡編程實現時,以java.net.Socket類表明客戶端鏈接,以java.net.ServerSocket類表明服務器端鏈接。因爲高度的封裝,程序員實際編程時,只須要指定IP地址和端口號碼就能夠創建鏈接了。一方面簡化了Java語言網絡編程的難度,另外也使得Java語言進行網絡底層系統編程很困難,具體點說,Java語言沒法實現底層的網絡嗅探以及得到IP包結構等信息。

代碼示例以下:

OutputStream os = socket1.getOutputStream(); //得到輸出流

InputStream is = socket1.getInputStream(); //得到輸入流

TDP編程

實現UDP方式的編程,包含客戶端網絡編程和服務器端網絡編程,主要由兩個類實現,分別是:

①DatagramSocket:實現「網絡鏈接」,包括客戶端網絡鏈接和服務器端網絡鏈接。DatagramSocket實現的就是發送數據時的發射器,以及接收數據時的監聽器的角色。類比於TCP中的網絡鏈接,該類既能夠用於實現客戶端鏈接,也能夠用於實現服務器端鏈接。

②DatagramPacket:實現對於網絡中傳輸的數據封裝,該類的對象表明網絡中交換的數據。在UDP方式的網絡編程中,不管是須要發送的數據仍是須要接收的數據,都必須被處理成DatagramPacket類型的對象,該對象中包含發送到的地址、發送到的端口號以及發送的內容等。和TCP方式的網絡傳輸相比,IO編程在UDP方式的網絡編程中變得不是必須的內容,結構也要比TCP方式的網絡編程簡單一些。

在使用TCP方式進行網絡編程時,須要按照前面介紹的網絡編程的步驟進行,下面分別介紹一下在Java語言中客戶端和服務器端的實現步驟。
在客戶端網絡編程中,首先須要創建鏈接,在Java API中以java.net.Socket類的對象表明網絡鏈接,因此創建客戶端網絡鏈接,也就是建立Socket類型的對象,該對象表明網絡鏈接。

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

問題:如何實現兩臺電腦之間的數據傳輸?

解決方法:以一個簡單的網絡客戶端程序示例

package tcp;
import java.io.;
import java.net.
;
/**

  • 簡單的Socket客戶端
  • 功能爲:發送字符串「Hello」到服務器端,並打印出服務器端的反饋
    */
    public class SimpleSocketClient {
    public static void main(String[] args) {
    Socket socket = null;
    InputStream is = null;
    OutputStream os = null;
    //服務器端IP地址
    String serverIP = "127.0.0.1";
    //服務器端端口號
    int port = 10000;
    //發送內容
    String data = "Hello";
    try {
    //創建鏈接
    socket = new Socket(serverIP,port);
    //發送數據
    os = socket.getOutputStream();
    os.write(data.getBytes());
    //接收數據
    is = socket.getInputStream();
    byte[] b = new byte[1024];
    int n = is.read(b);
    //輸出反饋數據
    System.out.println("服務器反饋:" + new String(b,0,n));
    } catch (Exception e) {
    e.printStackTrace(); //打印異常信息
    }finally{
    try {
    //關閉流和鏈接
    is.close();
    os.close();
    socket.close();
    } catch (Exception e2) {}
    }
    }
    }

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

這周學的是比較基礎的網絡編程,瞭解了一個大致的框架,可是其中的精髓沒有了解,在之後的學習中愈來愈好吧

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 1/1 15/15
第二週 200/200 1/1 18/18
第三週 380/380 1/1 17/17
第四周 300/300 1/1 18/18
第五週 320/320 3/3 16/16
第六週 360/360 3/3 15/15
第七週 580/580 2/3 16/16
第八週 460/460 2/3 15/15
第九周 220/220 2/2 14/14
第十週 120/120 2/2 13/13

參考資料

相關文章
相關標籤/搜索