socket程式設計是一門技術,它主要是在網路通訊中經常用到。
既然是一門技術,由於現在是物件導向的程式設計,一些計算機行業的大神通過抽象的理念,在現實中通過反覆的理論或者實際的推導,提出了抽象的一些通訊協議,基於tcp/ip協議,提出大致的構想,一些泛型的程式大牛在這個協議的基礎上,將這些抽象化的理念介面化,針對協議提出的每個理念,專門的編寫制定的介面,與其協議一一對應,形成了現在的socket標準規範,然後將其介面封裝成可以呼叫的介面,供開發者使用。
目前,開發者開發出了很多封裝的類來完善socket程式設計,都是更加方便的實現剛開始socket通訊的各個環節,所以我們首先必須了解socket的通訊原理,只有從本質上理解socket的通訊,才可能快速方便的理解socket的各個環節,才能從底層上真正的把握。
要理解socket必須的得理解tcp/ip,它們之間好比送信的線路和驛站的作用,比如要建議送信驛站,必須得了解送信的各個細節。
應用層:tftp,http,snmp,ftp,smtp,dns,telnet 等等
傳輸層:tcp,udp
網路層:ip,icmp,ospf,eigrp,igmp
資料鏈路層:slip,cslip,ppp,mtu
每一抽象層建立在低一層提供的服務上,並且為高一層提供服務,看起來大概是這樣子的。
通過上面的圖形,由於底一層的需要向高一層的提供服務,我們大致的理解應用程式需要傳輸層的tcp和網路層的ip協議提供服務。
大致的了解了應用程式和tcpip協議的大致關係,我們只是知道socket程式設計是在tcp/ip上的網路程式設計,但是socket在上述的模型的什麼位置呢。這個位置被乙個天才的理論家或者是抽象的計算機大神提出並且安排出來。
第一次握手:客戶端嘗試連線伺服器,向伺服器傳送syn包,syn=j,客戶端進入syn_send狀態等待伺服器確認。
第二次握手:伺服器接收客戶端syn包並確認(ack=j+1),同時向客戶端傳送乙個syn包(syn=k),即syn+ack包,此時伺服器進入syn_recv狀態。
第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入established狀態,完成三次握手。
三次握手如下圖:
根據tcp的三次握手,socket也定義了三次握手,也許是參考tcp的三次握手,一些計算機大神們畫出了socket的三次握手的模型圖,如下:
在上面圖的基礎上,如果我們得到上面的圖形,需要我們自己開發一些介面,來滿足上面的通訊的三次握手,問題就出來了,我們會需要開發哪些函式。
通過上面的圖,我們清楚,我們好比一些泛型的程式設計師,一些理論提供者提供給了我們上面的圖形的理論,我們需要做的就是講上面的圖形的抽象化的東西具體化。
第二次握手:伺服器端需要接收客戶端傳送過來的syn j+1 包,然後在傳送ack包,所以我們需要有伺服器端接受處理函式。
第三次握手:客戶端的處理函式和伺服器端的處理函式。
三次握手只是乙個資料傳輸的過程,但是,我們傳輸前需要一些準備工作,比如將建立乙個套接字,收集一些計算機的資源,將一些資源繫結套接字裡面,以及接受和傳送資料的函式等等,這些功能介面在一起構成了socket的程式設計。下面大致的按照客戶端和服務端將所需的函式詳細的列舉出來。
上圖都概述了socket的通訊原理。
通訊模型socket
i o的概念 作業系統的分為socket的i o還有使用者介面的輸入輸出,一般乙個輸入操作分為兩個不同的階段,1 等待資料準備好 2 從核心向程序複製資料 從理論上來講,阻塞i o 非阻塞i o 復用i o 訊號驅動i o都是同步io模型,非同步i o就是非同步io,同步i o向應用程式通知的是i ...
高效通訊模型之 非同步通訊模型
非同步模型 非同步和同步 同步,就是在發出乙個功能呼叫時,在沒有得到結果前,呼叫不返回 非同步,當乙個非同步過程呼叫發出後,呼叫者不能立即得到呼叫結果,而是通過狀態,通知和 來通知呼叫者。通過檢查狀態來判斷非同步呼叫結果,效率會很低,因為需要週期性檢查狀態 函式和通知差不多 同步呼叫與阻塞呼叫 對於...
C S通訊模型與B S通訊模型介紹
1 客戶端與伺服器之間的通訊模型 基於socket連線的客戶端與伺服器之間的通訊模型圖如上圖所示,整個通訊過程如下所示 1 伺服器端首先啟動監聽程式,對指定的埠進行監聽,等待接收客戶端的連線請求 2 客戶端程式啟動,請求連線伺服器的指定埠 3 伺服器收到客戶端的連線請求後與客戶端建立套接字 sock...