天天看點

網絡程式設計網絡程式設計

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

就是用來實作網絡互連的不同計算機上運作的程式間可以進行資料交換.

計算機網絡之間以何種規則進行通信,就是網絡模型研究問題。

網絡模型一般是指

OSI(Open System Interconnection開放系統互連)七層參考模型

TCP/IP四層參考模型

主機至網絡層(實體層 , 資料鍊路層) , 網際層 , 傳輸層 , 應用層(應用層 , 表示層 , 會話層)

網絡模型7層概述:

1.實體層:主要定義實體裝置标準,如網線的接口類型、光纖的接口類型、各種傳輸媒體的傳輸速率等。

它的主要作用是傳輸比特流(就是由1、0轉化為電流強弱來進行傳輸,到達目的地後在轉化為1、0)。

這一層的資料叫做比特。

資料鍊路層:主要将從實體層接收的資料進行MAC位址(網卡的位址)的封裝與解封裝。常把這一層的資料叫做幀。在這一層工作的裝置是交換機,資料通過交換機來傳輸。

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

傳輸層:定義了一些傳輸資料的協定和端口号(WWW端口80等),如:TCP(傳輸控制協定,傳輸效率低,可靠性強,用于傳輸可靠性要求高,資料量大的資料),UDP(使用者資料報協定,與TCP特性恰恰相反,用于傳輸可靠性要求不高,資料量小的資料,如QQ聊天資料就是通過這種方式傳輸的)。

主要是将從下層接收的資料進行分段和傳輸,到達目的位址後再進行重組。常常把這一層資料叫做段。

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

主要在你的系統之間發起會話或者接受會話請求(裝置之間需要互相認識可以是IP也可以是MAC或者是主機名)

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

7.應用層: 主要是一些終端的應用,比如說FTP(各種檔案下載下傳),WEB(IE浏覽),QQ之類的(可以把它了解成我們在電腦螢幕上可以看到的東西.就是終端應用)。

IP位址:InetAddress: 網絡中裝置的辨別,不易記憶,可用主機名

端口号: 用于辨別程序的邏輯位址,不同程序的辨別

傳輸協定: 通訊的規則常見協定:TCP,UDP

IP概述:所謂IP位址就是給每個連接配接在Internet上的主機配置設定的一個32bit位址。

IP位址的組成

IP位址 = 網絡位址+主機位址

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

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

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

IP位址分類

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是私有位址。

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

特殊位址

127.0.0.1 回環位址,可用于測試本機的網絡是否有問題. ping 127.0.0.1

DOS指令 ipconfig:檢視本機IP位址

xxx.xxx.xxx.255 廣播位址

端口

實體端口 網卡口

邏輯端口 我們指的就是邏輯端口

a:每個網絡程式都會有一個邏輯端口

b:用于辨別程序的邏輯位址,不同程序的辨別

c:有效端口:0~65535(兩個位元組),其中0~1023系統使用或保留端口。

UDP

将資料源和目的封裝成資料包中,不需要建立連接配接;

每個資料報的大小在限制在64k;

因無連接配接,是不可靠協定;

不需要建立連接配接,速度快

TCP

建立連接配接,形成傳輸資料的通道;

在連接配接中進行大資料量傳輸;

需要連接配接是以是可靠協定;

必須建立連接配接,效率會稍低

擷取主機名的 DOS 指令 :hostname

A:InetAddress類的概述

為了友善我們對IP位址的擷取和操作,java提供了一個類InetAddress 供我們使用

此類表示網際網路協定 (IP) 位址。

B:InetAddress類的常見功能

public static InetAddress getByName(String host)

public String getHostAddress()//擷取IP

public String getHostName()//擷取主機名

getLocalHost();

C:案例示範: InetAddress類的常見功能

InetAddress inetAddress = InetAddress.getByName("SHEN-MOU-MOU") ;

InetAddress inetAddress = InetAddress.getByName("192.168.3.120") ;

Socket=IP+端口号

Socket套接字概述:

網絡上具有唯一辨別的IP位址和端口号組合在一起才能構成唯一能識别的辨別符套接字。

Socket原理機制:

通信的兩端都有Socket。

網絡通信其實就是Socket間的通信。

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

步驟:// public DatagramSocket(int port)

a: 建立UDP通訊協定伺服器端對象(DatagramSocket) 注意要用有參數構造 指定端口号

b: 建立資料報包,作用用來接收資料 // public DatagramPacket(byte[] buf, int length)

c: 接收資料 receive(dp) ;

d: 解析資料報包,拿出資料 dp.getData() ; dp.getLength() ;

e: 釋放資源

public class UDPClient {

public static void main(String[] args) throws IOException {

//UDP 用戶端

//1.建立用戶端Socket

// DatagramSocket( int port, InetAddress laddr) 建立資料報套接字,将其綁定到指定的本地位址。

}

public class UDPServer {

//建立服務端的套接字

//DatagramSocket( int port)

//建立資料報套接字并将其綁定到本地主機上的指定端口。

DatagramSocket socket = new DatagramSocket(9898);

//接收資料

//DatagramPacket( byte[] buf, int length)

//構造 DatagramPacket,用來接收長度為 length 的資料包。

byte[] bytes = new byte[1024];

DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);

System.out.println("伺服器已經開啟等待接收收據...");

socket.receive(datagramPacket); //阻塞在這裡,等待接收資料

System.out.println("下來了");

//取出資料報包中的資料

byte[] data = datagramPacket.getData();

//把資料轉成字元串

System.out.println(new String(data, 0, datagramPacket.getLength()));

public class TCPClient {

public static void main(String[] args) throws IOException{

Socket socket = new Socket("192.168.8.123", 9999);

//擷取通道中的輸出流

OutputStream out = socket.getOutputStream();

//包裝通道中的輸出流

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));

//建立一個輸入流,來關聯這個文本檔案

BufferedReader reader = new BufferedReader(new FileReader("msg.txt"));

String line = null;

while ((line = reader.readLine()) != null) {

writer.write(line);

writer.newLine();

writer.flush();

//用戶端,已經傳完了

socket.shutdownOutput();//關閉輸出通道,服務端那邊就不會阻塞了

//我要讀取服務端的回報

InputStream inputStream = socket.getInputStream();

int len = inputStream.read(bytes);

System.out.println(new String(bytes, 0, len));

reader.close();

socket.close();

public class TCPServer {

//服務端上傳檔案完成了之後,給用戶端一個回報

ServerSocket ss = new ServerSocket(9999);

System.out.println("伺服器已經開啟....");

Socket socket = ss.accept();

InputStream in = socket.getInputStream();

//把通道中的輸入流包裝成字元流

BufferedReader reader = new BufferedReader(new InputStreamReader(in));