java 之 API-網絡編程

網絡編程概述

計算機網絡
    是指將地理位置不同的具有獨立功能的多臺計算機及其外部設備,通過通信線路連接起來,在網絡操作系統,網絡管理軟件及網絡通信協議的管理和協調下,實現資源共享和信息傳遞的計算機系統。
網絡編程
    就是用來實現網絡互連的不同計算機上運行的程序間可以進行數據交換。

網絡模型

計算機網絡之間以何種規則進行通信,就是網絡模型研究問題。
網絡模型一般是指
    OSI(Open System Interconnection開放系統互連)參考模型
    TCP/IP參考模型

這裏寫圖片描述

網絡通信三要素

IP地址:InetAddress
網絡中設備的標識,不易記憶,可用主機名
端口號
    用於標識進程的邏輯地址,不同進程的標識
傳輸協議
    通訊的規則
    常見協議:TCP,UDP

IP地址

要想讓網絡中的計算機能夠互相通信,必須爲每臺計算機指定一個標識號,通過這個標識號來指定要接受數據的計算機和識別發送的計算機,在TCP/IP協議中,這個標識號就是IP地址。
那麼,我們如果獲取和操作IP地址呢?
    爲了方便我們對IP地址的獲取和操作,java提供了一個類InetAddress 供我們使用。

InetAddress類的使用

沒有構造方法,那麼如何使類提供的功能呢?
要掌握的功能
    獲取任意主機:getByName

    主機名:getHostName
    主機Ip地址:getHostAddress

端口號

物理端口 網卡口
邏輯端口 我們指的就是邏輯端口
    A:每個網絡程序都會至少有一個邏輯端口
    B:用於標識進程的邏輯地址,不同進程的標識
    C:有效端口:0~65535,其中0~1024系統使用或保留端口。
    通過360可以查看端口號

協議UDP和TCP

UDP
    將數據源和目的封裝成數據包中,不需要建立連接;每個數據報的大小在限制在64k;因無連接,是不可靠協議;不需要建立連接,速度快
TCP
    建立連接,形成傳輸數據的通道;在連接中進行大數據量傳輸;通過三次握手完成連接,是可靠協議;必須建立連接,效率會稍低

Socket

Socket套接字:
    網絡上具有唯一標識的IP地址和端口號組合在一起才能構成唯一能識別的標識符套接字。
Socket原理機制:
    通信的兩端都有Socket。
    網絡通信其實就是Socket間的通信。
    數據在兩個Socket間通過IO傳輸。

這裏寫圖片描述

UDP傳輸

DatagramSocket與DatagramPacket
建立發送端,接收端。
建立數據包。
調用Socket的發送接收方法。
關閉Socket。
發送端與接收端是兩個獨立的運行程序。

UDP傳輸-發送端思路

1:建立udp的socket服務
2:將要發送的數據封裝成數據包
3:通過udp的socket服務,將數據包發送出
4:關閉資源

這裏寫圖片描述

UDP傳輸-接收端思路

1:建立udp的socket服務.
2:通過receive方法接收數據
3:將收到的數據存儲到數據包對象中
4:通過數據包對象的功能來完成對接收到數據進行解析.
5:可以對資源進行關閉

這裏寫圖片描述

TCP傳輸

Socket和ServerSocket
建立客戶端和服務器端
建立連接後,通過Socket中的IO流進行數據的傳輸
關閉socket
同樣,客戶端與服務器端是兩個獨立的應用程序。

TCP傳輸-客戶端思路

1:建立客戶端的Socket服務,並明確要連接的服務器。
2:如果連接建立成功,就表明,已經建立了數據傳輸的通道.就可以在該通道通過IO進行數據的讀取和寫入.該通道稱爲Socket流,Socket流中既有讀取流,也有寫入流.
3:通過Socket對象的方法,可以獲取這兩個流
4:通過流的對象可以對數據進行傳輸
5:如果傳輸數據完畢,關閉資源

這裏寫圖片描述

TCP傳輸-服務器端思路

1:建立服務器端的socket服務,需要一個端口
2:服務端沒有直接流的操作,而是通過accept方法獲取客戶端對象,在通過獲取到的客戶端對象的流和客戶端進行通信
3:通過客戶端的獲取流對象的方法,讀取數據或者寫入數據
4:如果服務完成,需要關閉客戶端,然後關閉服務器,但是,一般會關閉客戶端,不會關閉服務器,因爲服務端是一直提供服務的

這裏寫圖片描述

TCP傳輸容易出現的問題

客戶端連接上服務端,兩端都在等待,沒有任何數據傳輸。
通過例程分析:
    因爲read方法或者readLine方法是阻塞式。
解決辦法:
    自定義結束標記
    使用shutdownInput,shutdownOutput方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章