socket 是「套接字」的意思,是計算機之間進行通訊的一種約定,也可以認為是一種技術。通過 socket 這種約定,一台計算機可以接收其他計算機的資料,也可以向其他計算機傳送資料。
學習 socket,就是學習計算機之間如何通訊,並能夠用程式語言開發出實用的程式。
計算機分布在世界各地,要想和它們通訊,必須要知道確切的位置。確定計算機位置的方式有多種,ip 位址是最常用的,例如,114.114.114.114 是國內第乙個、全球第三個開放的 dns 服務位址,127.0.0.1 是本機位址。
其實,我們的計算機並不知道 ip 位址對應的地理位置,當要通訊時,只是將 ip 位址封裝到要傳送的資料報中,交給路由器去處理。路由器有非常智慧型和高效的演算法,很快就會找到目標計算機,並將資料報傳遞給它,完成一次單向通訊。
目前大部分軟體使用 ipv4 位址,但 ipv6 也正在被人們接受,尤其是在教育網中,已經大量使用。
有了 ip 位址,雖然可以找到目標計算機,但仍然不能進行通訊。一台計算機可以同時提供多種網路服務,例如web服務、ftp服務(檔案傳輸服務)、smtp服務(郵箱服務)等,僅有 ip 位址,計算機雖然可以正確接收到資料報,但是卻不知道要將資料報交給哪個網路程式來處理,所以通訊失敗。
為了區分不同的網路程式,計算機會為每個網路程式分配乙個獨一無二的埠號(port number),例如,web服務的埠號是 80,ftp 服務的埠號是 21,smtp 服務的埠號是 25。
埠(port)是乙個虛擬的、邏輯上的概念。可以將埠理解為一道門,資料通過這道門流入流出,每道門有不同的編號,就是埠號。如下圖所示:
協議(protocol)就是網路通訊的約定,通訊的雙方必須都遵守才能正常收發資料。協議有很多種,例如 tcp、udp、ip 等,通訊的雙方必須使用同一協議才能通訊。協議是一種規範,由計算機組織制定,規定了很多細節,例如,如何建立連線,如何相互識別等。
(1) 什麼時候應該使用tcp?
(2) 什麼時候應該使用udp?
協議僅僅是一種規範,必須由計算機軟體來實現。例如 ip 協議規定了如何找到目標計算機,那麼各個開發商在開發自己的軟體時就必須遵守該協議,不能另起爐灶。
所謂協議族(protocol family),就是一組協議(多個協議)的統稱。最常用的是 tcp/ip 協議族,它包含了 tcp、ip、udp、telnet、ftp、smtp 等上百個互為關聯的協議,由於 tcp、ip 是兩種常用的底層協議,所以把它們統稱為 tcp/ip 協議族。
計算機之間有很多資料傳輸方式,各有優缺點,常用的有兩種:sock_stream 和 sock_dgram。
注意有可能多種協議使用同一種資料傳輸方式,所以在 socket 程式設計中,需要同時指明資料傳輸方式和協議。:sock_dgram 沒有想象中的糟糕,不會頻繁的丟失資料,資料錯誤只是小概率事件。
綜上所述:ip位址和埠能夠在廣袤的網際網路中定位到要通訊的程式,協議和資料傳輸方式規定了如何傳輸資料,有了這些,兩台計算機就可以通訊了。
C C socket網路程式設計掃盲篇
socket 是 套接字 的意思,是計算機之間進行通訊的一種約定,也可以認為是一種技術。通過 socket 這種約定,一台計算機可以接收其他計算機的資料,也可以向其他計算機傳送資料。學習 socket,就是學習計算機之間如何通訊,並能夠用程式語言開發出實用的程式。計算機分布在世界各地,要想和它們通訊...
C C socket程式設計學習筆記
socket 是 套接字 的意思,是計算機之間進行通訊的一種約定,也可以認為是一種技術。學習 socket,就是學習計算機之間如何通訊,並能夠用程式語言開發出實用的程式。同時學習linux和windows的原因 大多數專案是在linux下開發伺服器端,而在windows下開發客戶端,需要經常在兩大平...
linux下C C socket程式設計
簡單的linux下socket程式設計,分別基於tcp和udp協議實現的簡單程式 linux下socket程式設計可以概括為以下幾個函式的運用 流程 server include include include include include int main int argc,char argv ...