1.4 委托協(xié)議棧發(fā)送消息

1.4.1 數(shù)據(jù)收發(fā)操作概覽

  1. 向操作系統(tǒng)內(nèi)部的協(xié)議棧發(fā)出委托時,需要按照指定的順序來調(diào)用Socket庫中的程序組件。
  2. 步驟:
    a. 創(chuàng)建套接字(創(chuàng)建套接字階段)
    b. 將管道連接到服務(wù)端的套接字上(連接階段)
    c. 收發(fā)數(shù)據(jù)(通信階段)
    d. 斷開管道并刪除套接字(斷開階段)

1.4.2 創(chuàng)建套接字階段

  1. 創(chuàng)建套接字只需要調(diào)用Socket庫中的socket程序組件就可以了。
  2. 套接字創(chuàng)建完成后,協(xié)議棧會返回一個描述符,應(yīng)用程序?qū)⑹盏降拿枋龇娣旁趦?nèi)存中,描述符用來識別不同的套接字。

1.4.3 連接階段:把管道接上去

  1. 應(yīng)用程序通過調(diào)用Socket庫中的名為connect的程序組件來完成連接操作。
  2. 調(diào)用connect需要的三個參數(shù)是描述符、服務(wù)器IP地址、服務(wù)器端口號。協(xié)議棧需要通過描述符判斷使用哪個套接字進(jìn)行連接,服務(wù)器端通過IP和端口號識別出進(jìn)行連接的套接字。
  3. 連接成功后,協(xié)議棧會將對方的IP地址和端口號等信息保存在套接字中。

1.4.4 通信階段:傳遞消息

  1. 發(fā)送通過調(diào)用Socket的write組件,讀取調(diào)用Socket的read組件。
  2. 收發(fā)步驟:
    a. 應(yīng)用程序首先要在內(nèi)存中準(zhǔn)備好要發(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é)束

  1. 調(diào)用Socket的close組件斷開連接,最終管道會被斷開,套接字本身被刪除。
  2. HTTP協(xié)議規(guī)定,服務(wù)器發(fā)送響應(yīng)消息后應(yīng)主動斷開連接,斷開操作傳達(dá)到客戶端后,客戶端套接字也進(jìn)入斷開階段。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容