Socket系列(一)基本概述
一、Socket概述
Socket是進行網路程式設計的類,通過Socket可以在兩臺計算機之間進行網路通訊。比如,QQ軟體和QQ伺服器之間的通訊就是基於Socket的網路通訊,這個過程的實現大概是這樣,使用者甲像使用者乙傳送訊息,甲的訊息通過Socket傳送給伺服器,伺服器接收到甲的訊息後,在通過Socket推送給乙,這樣就完成了一次簡單聊天通訊。
Socket程式設計實現網路通訊主要包括客戶端和服務端兩部分。
伺服器端流程主要有以下幾個步驟:建立套接字(socket)、服務繫結(bind)、服務偵聽(listen)、處理新到連線(accept)、資料收發(rec/send)、關閉套接字(close)。
客戶端流程主要有以下幾個步驟:客戶端套接字建立(socket)、發起連線(connect)、資料收發(rec/send)、關閉套接字(close)。
二、Socket網路通訊工作原理
Socket連線可以使用TCP或者是UDP兩種傳送層協議,如果使用TCP協議,那麼建立起來的Socket連線就是一個TCP連線,接下來就以一個流程圖來展示基於TCP協議的Socket連線的工作原理,如下圖。
三、Socket連線與HTTP連線的區別
由於通常情況下Socket連線就是TCP連線,因此Socket連線一旦建立,通訊雙方即可開始相互發送資料內容,直到雙方連線斷開。但在實際網路應用 中,客戶端到伺服器之間的通訊往往需要穿越多箇中間節點,例如路由器、閘道器、防火牆等,大部分防火牆預設會關閉長時間處於非活躍狀態的連線而導致 Socket 連線斷連,因此需要通過輪詢告訴網路,該連線處於活躍狀態。
而HTTP連線使用的是“請求—響應”的方式,不僅在請求時需要先建立連線,而且需要客戶端向伺服器發出請求後,伺服器端才能回覆資料。
很多情況下,需要伺服器端主動向客戶端推送資料,保持客戶端與伺服器資料的實時與同步。此時若雙方建立的是Socket連線,伺服器就可以直接將資料傳送 給客戶端;若雙方建立的是HTTP連線,則伺服器需要等到客戶端傳送一次請求後才能將資料傳回給客戶端,因此,客戶端定時向伺服器端傳送連線請求,不僅可 以保持線上,同時也是在“詢問”伺服器是否有新的資料,如果有就將資料傳給客戶端。(部分內容參考與網路資源)