socket協議的形象描述
socket的 英文原義是「孔」或「插座」。在這裡作為4bds
unix的程序通訊機制,取後一種意思。socket非常類似於**插座。以乙個國家級**網為例。**的通話雙方相當於相互通訊的2個程序,區號是它的網路位址;區內乙個單位的交換機相當於一台主機,主機分配給每個使用者的局內號碼相當於socket號。任何使用者在通話之前,首先要占有一部**機,相當於申請乙個socket;同時要知道對方的號碼,相當於對方有乙個固定的socket。然後向對方撥號呼叫,相當於發出連線請求(假如對方不在同一區內,還要撥對方區號,相當於給出網路位址)。對方假如在場並空閒(相當於通訊的另一主機開機且可以接受連線請求),拿起**話筒,雙方就可以正式通話,相當於連線成功。雙方通話的過程,是一方向**機發出訊號和對方從**機接收訊號的過程,相當於向socket傳送資料和從socket接收資料。通話結束後,一方掛起**機相當於關閉socket,撤消連線。
通常短連線是這樣:連線->傳輸資料->關閉連線
那什麼是長連線?一般長連線相對短連線而言的,長連線在傳輸完數後不關閉連線,而不斷的傳送包保持連線等待處理下乙個資料報。
such
as: 連線->傳輸資料->保持連線 -> 傳輸資料-> 。。。
->關閉連線。
那什麼時候用短連線呢?
一般長連線用於少數client-end to
server-end的頻繁的通訊,例如:資料庫的連線用長連線,如果用短連線頻繁的通訊會造成socket錯誤,而且頻繁的socket
建立也是對資源的浪費。
而像web**的http服務一般都用短鏈結,因為長連線對於服務端來說會耗費一定的資源,而像web**這麼頻繁的成千上萬甚至上億客戶端的連線用短連線會更省一些資源。
tcp/ip通訊解讀長短鏈結
一。通訊方式
主要有以下三大類:
(一)server/client方式
1.乙個client方連線乙個server方,或稱點對點(peer
to peer):
2.多個client方連線乙個server方,這也是通常的併發伺服器方式。
3.乙個client方連線多個server方,這種方式很少見,主要
用於乙個客戶向多個伺服器傳送請求情況。
(二)連線方式
1.長連線
client方與server方先建立通訊連線,連線建立後不斷開,
然後再進行報文傳送和接收。這種方式下由於通訊連線一直
存在,可以用下面命令檢視連線是否建立:
netstat
–f inet|grep
埠號(如5678)。
此種方式常用於點對點通訊。
2.短連線
client方與server每進行一次報文收發交易時才進行通訊連
接,交易完畢後立即斷開連線。此種方式常用於一點對多點
通訊,比如多個client連線乙個server.
(三)傳送接收方式
1.非同步
報文傳送和接收是分開的,相互獨立的,互不影響。這種方
式又分兩種情況:
(1)非同步雙工:接收和傳送在同乙個程式中,有兩個不同的
子程序分別負責傳送和接收
(2)非同步單工:接收和傳送是用兩個不同的程式來完成。
2.同步
報文傳送和接收是同步進行,既報文傳送後等待接收返回報文。
同步方式一般需要考慮超時問題,即報文發上去後不能無限等
待,需要設定超時時間,超過該時間傳送方不再等待讀返回報
文,直接通知超時返回。
實際通訊方式是這三類通訊方式的組合。比如一般書上提供的
tcp/ip範例程式大都是同步短連線的server/client程式。有的
組合是基本不用的,比較常用的有價值的組合是以下幾種:
同步短連線server/client
同步長連線server/client
非同步短連線server/client
非同步長連線雙工server/client
非同步長連線單工server/client
其中非同步長連線雙工是最為複雜的一種通訊方式,有時候經
常會出現在不同銀行或不同城市之間的兩套系統之間的通訊。
比如金卡工程。由於這幾種通訊方式比較固定,所以可以預
先編制這幾種通訊方式的模板程式。
二.報文格式
通訊報文格式多樣性更多,相應地就必須設計對應的讀寫報文的接
收和傳送報文函式。
(一)阻塞與非阻塞方式
1.非阻塞方式
讀函式不停地進行讀動作,如果沒有報文接收到,等待一段時間後
超時返回,這種情況一般需要指定超時時間。
2.阻塞方式
如果沒有報文接收到,則讀函式一直處於等待狀態,直到有報文到達。
(二)迴圈讀寫方式
1.一次直接讀寫報文
在一次接收或傳送報文動作中一次性不加分別地全部讀取或全部
傳送報文字節。
2.不指定長度迴圈讀寫
這一般發生在短連線程序中,受網路路由等限制,一次較長的報
文可能在網路傳輸過程中被分解成了好幾個包。一次讀取可能不
能全部讀完一次報文,這就需要迴圈讀報文,直到讀完為止。
3.帶長度報文頭迴圈讀寫
這種情況一般是在長連線程序中,由於在長連線中沒有條件能夠
判斷迴圈讀寫什麼時候結束,所以必須要加長度報文頭。讀函式
先是讀取報文頭的長度,再根據這個長度去讀報文.實際情況中,
報頭的碼制格式還經常不一樣,如果是非ascii碼的報文頭,還必須
轉換成ascii,常見的報文頭碼制有:
(1)n個位元組的ascii碼
(2)n個位元組的bcd碼
(3)n個位元組的網路整型碼
socket短連線 長連線
通常短連線是這樣 連線 傳輸資料 關閉連線 那什麼是長連線?一般長連線相對短連線而言的,長連線在傳輸結束後不關閉連線,而不斷的傳送包保持連線等待處理下乙個資料報。一般長連線用於少數client end to server end的頻繁的通訊,例如 資料庫的連線用長連線,如果用短連線頻繁的通訊會造成s...
socket 長連線與短連線
短連線 連線 傳輸資料 關閉連線 http是無狀態的,瀏覽器和伺服器每進行一次http操作,就建立一次連線,但任務結束就中斷連線。也可以這樣說 短連線是指socket連線後傳送後接收完資料後馬上斷開連線。長連線連線 傳輸資料 保持連線 傳輸資料 關閉連線。長連線指建立socket連線後不管是否使用都...
Socket長連線和短連線
短連線 連線 傳輸資料 關閉連線 http是無狀態的,瀏覽器和伺服器每進行一次http操作,就建立一次連線,但任務結束後就中斷連線。短連線是指socket連線後傳送後接收完資料後馬上斷開連線。長連線 連線 傳輸資料 保持連線 傳輸資料 關閉連線 長連線指建立socket連線後不管是否使用都保持連線,...