1. 程式人生 > >網路程式設計學習總結1

網路程式設計學習總結1

 

計算機網路

  是指將地理位置不同的具有獨立功能的多臺計算機及其外部裝置,通過通訊線路連線起來,在網絡作業系統,網路管理軟體及網路通訊協議的管理和協調下,實現資源共享和資訊傳遞的計算機系統

網路程式設計

  就是用來實現網路互連的不同計算機上執行的程式間可以進行資料交換

網路模型: 網路通訊的規則

一般有: OSI   open system  interconnect 模型

TCP/IP模型

1.物理層:主要定義物理裝置標準,如網線的介面型別、光纖的介面型別、各種傳輸介質的傳輸速率等。它的主要作用是傳輸位元流(就是由

10轉化為電流強弱來進行傳輸,到達目的地後在轉化為10,也就是我們常說的數模轉換與模數轉換)。這一層的資料叫做位元。

2. 資料鏈路層:主要將從物理層接收的資料進行MAC地址(網絡卡的地址)的封裝與解封裝。常把這一層的資料叫做幀。在這一層工作的裝置是交換機,資料通過交換機來傳輸。

3. 網路層:主要將從下層接收到的資料進行IP地址(例192.168.0.1)的封裝與解封裝。在這一層工作的裝置是路由器,常把這一層的資料叫做資料包。

4. 傳輸層:定義了一些傳輸資料的協議和埠號(WWW80等),如:TCP(傳輸控制協議,傳輸效率低,可靠性強,用於傳輸可靠性要求高,資料量大的資料),

UDP(使用者資料報協議,與TCP特性恰恰相反,用於傳輸可靠性要求不高,資料量小的資料,如QQ聊天資料就是通過這種方式傳輸的)。 主要是將從下層接收的資料進行分段和傳輸,到達目的地址後再進行重組。常常把這一層資料叫做段。

5.會話層:通過傳輸層(埠號:傳輸埠與接收埠)建立資料傳輸的通路。

6.表示層:主要是進行對接收的資料進行解釋、加密與解密、壓縮與解壓縮等(也就是把計算機能夠識別的東西轉換成人能夠能識別的東西(如圖片、聲音等)。

7.應用層: 主要是一些終端的應用

按照TCP/IP規定,IP地址用二進位制來表示,每個IP地址長32bit,位元換算成位元組,就是4個位元組。

IP地址經常被寫成十進位制的形式,中間使用符號“.”分開不同的位元組。

10.0.0.1”IP地址的這種表示法叫做“點分十進位制表示法”,這顯然比10容易記憶得多

IP地址的組成   網路中計算機的唯一識別符號

IP地址 = 網路號碼+主機地址

A類IP地址:第一段號碼為網路號碼,剩下的三段號碼為本地計算機的號碼

B類IP地址:前二段號碼為網路號碼,剩下的二段號碼為本地計算機的號碼

C類IP地址:前三段號碼為網路號碼,剩下的一段號碼為本地計算機的號碼

特殊地址:

127.0.0.1 迴環地址,可用於測試本機的網路是否有問題. ping 127.0.0.1 該地址也是本機地址  

 

DOS命令 ipconfig:檢視本機IP地址

xxx.xxx.xxx.0 網路地址

xxx.xxx.xxx.255 廣播地址

 

A類  1.0.0.1---127.255.255.254  (1)10.X.X.X是私有地址(私有地址就是在網際網路上不使用,而被用在區域網絡中的地址)  (2)127.X.X.X是保留地址,用做迴圈測試用的。

B類  128.0.0.1---191.255.255.254  172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。

C類  192.0.0.1---223.255.255.254  192.168.X.X是私有地址

D類  224.0.0.1---239.255.255.254  

E類  240.0.0.1---247.255.255.254

為了方便我們對IP地址的獲取和操作,java提供了一個類InetAddress 供我們使用

通過主機名獲取ip物件

Socket套接字:

網路上具有唯一標識的IP地址和埠號組合在一起才能構成唯一能識別的識別符號套接字

Socket原理機制:

通訊的兩端都有Socket

網路通訊其實就是Socket間的通訊。

資料在兩個Socket間通過IO傳輸。

//傳送資訊

package web;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class SendDemo {
    public static void main(String[] args) throws IOException {
        //建立Socket
        DatagramSocket ds = new DatagramSocket();
        //建立資訊
        byte[] b="I LOVE YOU, Ye zi!".getBytes();
        int length=b.length;
        InetAddress address = InetAddress.getByName("USER-20140601UG");
        int port=12530;
        //建立Packet
        DatagramPacket packet = new DatagramPacket(b, length, address, port);
        ds.send(packet);
        //釋放資源
        ds.close();

    }
}
//接收資訊

package web;


import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class RecieveDemo {
    public static void main(String[] args) throws IOException {
        //接收端Socket
        DatagramSocket socket = new DatagramSocket(12530);
        //定義接收陣列
        byte[] b = new byte[1024];
        //接收Packet
        DatagramPacket packet = new DatagramPacket(b, b.length);
        socket.receive(packet);
        int len = packet.getLength();
        byte[] bytes = packet.getData();
        String s = new String(bytes, 0, len);
        System.out.println("從" + packet.getAddress().getHostName() + "主機,(" + packet.getAddress().getHostAddress() + ")接收到資訊: " + s);
        //釋放資源
        socket.close();
    }
}