Java網絡編程基礎

編程語言 Java Bing 科技 Java團長 2017-05-18

計算機唯一標示——ip

我們知道每臺計算機都有自己的ip地址,二而且這個ip地址是唯一的(在dos下鍵入ipconfig可以查看本機ip地址)該ip是用來唯一標示計算機的,這樣才可以在網絡上找到並訪問該計算機上的資源。

Java網絡編程基礎

所以ip是網絡編程的基礎,在java API中提供了兩個類來標示ip地址 InetAddress、InetSocketAddress

InetAddress類只包含計算機的地址和主機名,InetSocketAddress類另外還標示端口號。

端口:操作系統提供了66035個端口為外界提供服務,外部網路想要訪問該計算機上的資源必須同過端口上的監聽程序進行處理後才能獲取,(1~1024為系統預留端口不建議使用)

Java網絡編程基礎

InetAddressDemo

Java網絡編程基礎

InetSocketAddress

網絡資源路徑限定符--URL

URL是網絡中資源的唯一標示限定符,每一個url都標示一個資源。該對象一般用於從網絡中爬去某些資源,如下一個爬取bing首頁源代碼的demo

Java網絡編程基礎

URLDemo

Java網絡編程基礎

網絡中的快遞員--數據傳輸協議

有了數據傳輸協議個個計算機上的數據才能在網絡中進行傳輸,如我們在瀏覽器中訪問bing的首頁是瀏覽器就需要從bing的服務器上獲取數據,當我們搜索新聞時瀏覽器又需要將搜索框中我們輸入的內容發送個服務器,這個數據交換的過程就是使用的TCP協議(http及https都是tcp協議封裝後的結果)。

udp協議

udp協議相對於tcp協議而言,其傳輸速度要快的多,但其不能保證其數據一定能安全到達另一端,有可能出現數據丟失的情況,因為其不需要連接如果找不到另一端來接收就會出現數據丟失的情況,但正是由於去不需要連接所以傳輸速度比TCP協議要快得多!udp協議一般被用於局域網內的屏幕分享和直播平臺之類的場景。

java中提供的udp協議的實現類是DataGramSocket類,該類用於發送和接收udp協議的數據,而通過udp協議發送的數據必須要打成數據包(DataGramPacket)才能被DataGramSocket類進行發送

下面來看下DataGramSocket類的一些常用方法和構造,其提供了多個構造的重載來創建該對象,

Java網絡編程基礎

我們一般用的較多的是隻傳入端口號的那個構造,該構是在本機上建立監聽,其它的構造也可以自己制定監聽的地址,而實際上第二個構造和第三個構造本質上也是使用第四個構造來創建的。可以自己翻下源碼。

常用方法:

Java網絡編程基礎

Java網絡編程基礎

Java網絡編程基礎

DataGramPacket類的構造

Java網絡編程基礎

方法摘要

Java網絡編程基礎

Java網絡編程基礎

demo(Server端)

Java網絡編程基礎

demo(Client端)

效果圖

Java網絡編程基礎

Java網絡編程基礎

TCP協議

tcp協議與UDP協議想法它是有鏈接的,TCP協議傳輸協議需要進行三次握手,也就是我們常說的瀏覽器從服務其請求數據所說的三次握手。

java提供的tcp實現類為Socket和ServerSocket顧名思義Socket主要表示客戶端而ServerSocket主要表示服務端。這裡他們的構造和方法就不在介紹了,自己翻API吧(犯懶了,不想寫。。。)這裡直接上一個簡單demo

Java網絡編程基礎

demo(Client端)

Java網絡編程基礎

demo(Server端)

Java網絡編程基礎

Java網絡編程基礎

demo(ReadMessage )

Java網絡編程基礎

Java網絡編程基礎

Java網絡編程基礎

Java網絡編程基礎

demo(SendMessage )

效果圖

Java網絡編程基礎

Java網絡編程基礎

Server端像Client端發送數據

Java網絡編程基礎

Java網絡編程基礎

TCP協議與HTTP(/HTTPS)協議的區別

很多人都分不清這兩者之間的區別,前邊兒也已經說了Http協議實際上就是對TCP協議的封裝,我們正常的TCP兩鏈接中攜帶的數據時很廣泛的且沒有固定的格式,瀏覽器沒辦法進行通用的解析(瀏覽器實際上就是一個Socket客戶端)。也就是說一個每個瀏覽器都有自己解析數據的方式且相互之間並不統一,從而導致了互聯網一直停滯不前,所以就有了http協議的誕生,http協議封裝了TCP協議。簡單的說也就是:TCP協議規定了數據的傳輸方式,而http協議規定了連接中數據的格式。

學習Java的同學注意了!!!

學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入Java學習交流群495273252,我們一起學Java!

相關推薦

推薦中...