【零碎JAVA】網絡編程

網絡基礎

說到網絡,我們不得不說一下OSI七層模型,OSI是Open System Interconnection的簡稱,中譯爲開放式系統互連參考模型。他將網絡協議從邏輯上劃分成7層,從上到下分別爲:應用層,表示層,會話層,傳輸層,網絡層,數據鏈路層,物理層。網絡上傳輸數據流程如下圖所示。

上圖表示的是主機1向主機2發送數據"ABC'的過程,主機從應用層逐層往下,直到物理層,沒到一層都會將數據進行一次封裝,這個過程稱爲加包。然後通過物理層發送到主機2的物理層中,主機2逐層解包提前數據,最後應用層能夠獲得主機1發送的數據“ABC”。

TCP/IP層級結構簡化了OSI的七層結構,TCP/IP分爲4層結構,分別爲 應用層,傳輸層,網際層,網絡接口層。

 

端口和IP

在本地,我們向本地指定文件寫入數據,我們需要指定文件的路徑去確定該文件。網絡中我們進行通信,也需要確定通信目標,網絡中通過IP和端口號來確定通信目標。IP位目標的主機號,端口號爲一個邏輯號碼,該號碼可以區分主機的不同應用,一般我們不使用0~1024端口,因爲這些是預留給系統的,如果我們使用的話很有可能會造成不可預知的衝突。

java中將ip與端口號一起分裝成了一個類InetAddress,該類提供了很多操作端口號,ip的方法,詳情參考JAVA Api。

 

UDP

網絡通信中,傳輸層協議可分爲TCP 和UDP兩種,此處我們講解一下UDP協議。

UDP是一種無連接的傳輸協議,他只負責將數據打包後發送,不會去理會對稱是否成功,正確接收到數據,網絡視頻直播用的就是UDP協議,他適用於對速度要求高,但對數據準確度一般的場合。

UPD特點:

1.速度快
2.不可靠
3.不需要建立連接
4.數據大小限制在64k內

UDP協議是以數據包的形式發送數據的,java中將UDP協議封裝到了DatagramSocket中,將數據包封裝到了DatagramPacket中,我們可以通過這兩個類實現UDP。

UDP實現步驟:

發送端:1.創建DatagramSocket類對象,指定端口號。

2.創建DatagramPacket類對象,將要發送的數據封裝到這個對象中,並制定目標IP與端口號。

3.調用DatagramSocket類對象的send方法發送數據。

接收端:1.創建DatagramSocket類對象,指定端口號。

2.創建DatagramPacket類對象,用於接收數據。

3.調用DatagramSocket的recieve方法接收數據,存儲到DatagramPacket類對象中。

一個基於UDP的聊天程序示例

 

TCP

TCP是一種基於鏈接的,可靠的網絡通信協議。他需要經過三次握手信號,來確保收發端都能夠準確的收到數據。基於TCP的網絡通信需要一個服務端,一個客戶端。服務器端可以同時與多個客戶端連接。java中將TCP服務器封裝成了ServerSocket類,將客戶端封裝成了Socket。當客戶端請求連接服務端時,服務端會獲得該客戶端的Socket屬性,根據這些屬性在服務器端創建一個Socket對象。Socket類內部封裝了InputStream和OutputStream用於數據的通信,大致示意圖如下:

 

TCP實現:

客戶端:1.創建套接字Socket對象,參數傳入服務器IP,以及使用的端口號。
              2.獲取套接字的輸出流,向輸出流寫入數據。
              3.獲取套接字的輸入流,監聽獲取服務器端的反饋。
              4.關閉套接字。

服務端:1.創建服務器套接字ServerSocket,指定監聽的端口號。
              2.創建創建Socket對象,調用accept方法獲取與服務器連接的套接字對象。
              3.獲取Socket的輸入流,獲取客戶端發送過來的數據。
              4.獲取Sokcet的輸出流,向客戶端發出反饋。
              5.關閉套接字Socket,關閉服務端套接字ServerSocket。

一個基於TCP的聊天程序

一個基於TCP的文本文件上傳程序

 

 

 

 


 

 

發佈了36 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章