1.4.1 數(shù)據(jù)收發(fā)操作概覽
- 向操作系統(tǒng)內(nèi)部的協(xié)議棧發(fā)出委托時薄霜,需要按照指定的順序來調(diào)用Socket庫中的程序組件。
- 步驟:
a. 創(chuàng)建套接字(創(chuàng)建套接字階段)
b. 將管道連接到服務(wù)端的套接字上(連接階段)
c. 收發(fā)數(shù)據(jù)(通信階段)
d. 斷開管道并刪除套接字(斷開階段)
1.4.2 創(chuàng)建套接字階段
- 創(chuàng)建套接字只需要調(diào)用Socket庫中的socket程序組件就可以了劫扒。
- 套接字創(chuàng)建完成后,協(xié)議棧會返回一個描述符,應(yīng)用程序?qū)⑹盏降拿枋龇娣旁趦?nèi)存中仍稀,描述符用來識別不同的套接字拳芙。
1.4.3 連接階段:把管道接上去
- 應(yīng)用程序通過調(diào)用Socket庫中的名為connect的程序組件來完成連接操作察藐。
- 調(diào)用connect需要的三個參數(shù)是描述符、服務(wù)器IP地址舟扎、服務(wù)器端口號分飞。協(xié)議棧需要通過描述符判斷使用哪個套接字進行連接,服務(wù)器端通過IP和端口號識別出進行連接的套接字睹限。
- 連接成功后譬猫,協(xié)議棧會將對方的IP地址和端口號等信息保存在套接字中讯檐。
1.4.4 通信階段:傳遞消息
- 發(fā)送通過調(diào)用Socket的write組件,讀取調(diào)用Socket的read組件染服。
- 收發(fā)步驟:
a. 應(yīng)用程序首先要在內(nèi)存中準備好要發(fā)送的數(shù)據(jù)别洪。
b. 調(diào)用write程序組件,要指定描述符和發(fā)送數(shù)據(jù)柳刮。
c. 調(diào)用read讀取數(shù)據(jù)挖垛,需要指定存放響應(yīng)數(shù)據(jù)的內(nèi)存地址,稱為接收緩沖區(qū)秉颗。
1.4.5 斷開階段:收發(fā)數(shù)據(jù)結(jié)束
- 調(diào)用Socket的close組件斷開連接痢毒,最終管道會被斷開,套接字本身被刪除蚕甥。
- HTTP協(xié)議規(guī)定哪替,服務(wù)器發(fā)送響應(yīng)消息后應(yīng)主動斷開連接,斷開操作傳達到客戶端后梢灭,客戶端套接字也進入斷開階段夷家。