為什麼要講Socket呢?因為看過我藍芽協議(一)和藍芽協議(二)的文章的人知道,我要做的這個應用是把藍芽筆裡面的資料讀取到手機裡,就要用到基於Bluetooth協議的Socket,所以就也是為什麼在這裡我要講一下Socket編程了。
一:什麼是Socket
它實際上是網路通訊的一種介面,基於不同的協議,有各種不同的Socket,比如有基於TCP協議的Socket和基於UDP協議的Socket以及基於藍芽協議的Socket,Android中使用的是Java的Socket模型。
Socket在電腦行業通常稱為”通訊端“,用於描述IP地址和連接埠,是一個通訊鏈的控制代碼。這是一個比較抽象的概念。電腦是擁有連接埠的,每一個連接埠都可以有一個應用程式來進行通訊的使用,比如:80連接埠是HTTP協議所使用的連接埠,21連接埠是FTP協議所使用的連接埠,連接埠是電腦和外界通訊的介面,這些介面都是邏輯的介面,連接埠號碼取值的範圍是零到256乘以256減1,1024以下的連接埠都是作業系統使用的保留連接埠,以上的連接埠我們可以自由的來使用,不要和其他應用程式的連接埠衝突。
應用程式可以通過“通訊端”向網路發送請求或者應答網路的請求,這時候就把Socket分成了兩部分,一部分是伺服器端的Socket,這個Socket主要用來接收來自網路的請求,它一直監聽在某一個連接埠上。一部分是用戶端的Socket,這個Socket主要用來向網路發送資料。
二:Socket通訊模型
-UDP協議和TCP協議
UDP協議和TCP協議是互連網使用最廣的兩種協議都是基於IP的協議。第一個區別是UDP協議是一個不太靠譜的協議,UDP協議把資料都打成資料包,資料包上內建郵寄地址,也就是說我要把這個資料包發送到網路上的哪一個地址,通過網路把這個資料包發送出去,至於這個資料包是否發送到目的地,是否伺服器端接收到了這個資料包,這個協議並不保證,就像中國的郵政,你是把信寄出去了,但是郵政系統不保證對方能收到你寄送的信。TCP發送資料的時候要求接收方接收到資料之後給一個回應,也就是你是否收到了,TCP可靠一些,當我們發送一些比較重要的資料的時候一般都使用TCP協議。另外一個區別是UDP協議發送的一個資料包它的容量是有限的,而TCP協議則沒有這樣一個限制。並不是說UDP協議一定就不如TCP協議,在不同的領域有不同是使用,UDP協議好處是速度相對快些。TCP協議相對慢些。
-Socket通訊流程
應用程式通過“通訊端”也就是Socket可以選擇這兩種協議當中的一種,你可以選擇用UDP發送資料,也可以選擇用TCP發送資料,資料發送出去通過“通訊通道”也就是IP的基礎網路,來到伺服器端(接收端),就可以接收到資料了。發送資料的時候用UDP協議,接收的時候也要用UDP協議,發送資料的時候用TCP協議,接收的時候也要用TCP協議,在發送的時候指定接收端的IP地址和連接埠號碼就可以了,究竟資料包或資料是如何發送的,架構已經幫我們封裝好了,我們不去關心它了。