計算機網路之套接字SOCKET

2021-08-10 14:04:36 字數 1246 閱讀 4592

當某個應用程序啟動系統呼叫時,控制權就從應用程序傳遞給了系統呼叫介面。

此介面再將控制權傳遞給計算機的作業系統。作業系統將此呼叫轉給某個內部過程,並執行所請求的操作。

內部過程一旦執行完畢,控制權就又通過系統呼叫介面返回給應用程序。

關於tcp/ip協議最著名的api就是berkeleyunix 作業系統定義的套接字介面(socketinte***ce)。微軟公司在其作業系統中採用了套接字介面 api,形成了乙個稍有不同的 api,並稱之為 windows socket。

請注意,在套接字以上的程序是受應用程式控制的,而在套接字以下的運輸層協議軟體則是受計算機作業系統的控制。因此,只要應用程式使用tcp/ip協議進行通訊,它就必須通過套接字與作業系統互動並請求其服務。

當應用程序需要使用網路進行通訊時就發出系統呼叫,請求作業系統為其建立「套接字」,以便把網路通訊所需要的系統資源分配給該應用程序。

作業系統為這些資源的總和用乙個叫做套接字描述符的號碼來表示,並把此號碼返回給應用程序。應用程序所進行的網路操作都必須使用這個號碼。

通訊完畢後,應用程序通過乙個關閉套接字的系統呼叫通知作業系統**與該「號碼」相關的所有資源。

下圖描述了作業系統所建立的套接字描述符與套接字資料結構的關係:

由於在乙個機器中可能同時出現多個套接字,因此需要乙個存放套接字描述符的表,而每乙個套接字描述符有乙個指標指向存放套接字的位址。

當套接字被建立後,它的埠號和 ip 位址都是空的,因此應用程序要呼叫 bind(繫結)來指明套接字的本地位址。在伺服器端呼叫 bind 時就是把熟知埠號和本地ip位址填寫到已建立的套接字中。這就叫做把本地位址繫結到套接字

伺服器在呼叫 bind 後,還必須呼叫listen(收聽)把套接字設定為被動方式,以便隨時接受客戶的服務請求。udp伺服器由於只提供無連線服務,不使用 listen 系統呼叫。

伺服器緊接著就呼叫 accept(接受),以便把遠地客戶程序發來的連線請求提取出來。系統呼叫 accept 的乙個變數就是要指明從哪乙個套接字發起的連線。

計算機網路 簡單聊聊套接字 Socket

socket 由來 在學習乙個新知識之前,要去想它為什麼會出現,它的出現解決了什麼問題.這樣印象才會深刻一些.在同乙個主機下,兩個程序間的通訊是很容易,直接把各種通訊細節交給作業系統去做就 ok 了.但是如果兩個程序是處於不同主機下呢?該如何進行通訊呢?而且在實際的應用場景中,是很複雜的,有的使用 ...

計算機網路 簡單聊聊套接字 Socket

socket 由來 在學習乙個新知識之前,要去想它為什麼會出現,它的出現解決了什麼問題.這樣印象才會深刻一些.在同乙個主機下,兩個程序間的通訊是很容易,直接把各種通訊細節交給作業系統去做就 ok 了.但是如果兩個程序是處於不同主機下呢?該如何進行通訊呢?而且在實際的應用場景中,是很複雜的,有的使用 ...

計算機網路實驗 UDP套接字程式設計

我用自己的ubuntu16.04來舉例,實驗室的是虛擬機器,差不多 只針對第三個題目,修改伺服器來通過響應客戶端傳送的gettime並傳送給客戶端當前系統時間。ubuntu16.04介面就不說了。我只是多下了chrome,藍燈和uget 建立檔案敲 不知道你自己會把 放在 所以這一步自己注意。沒有 ...