
- Unix 套接字教程
- Unix 套接字 - 首頁
- Unix 套接字 - 什麼是套接字?
- Unix 套接字 - 網路地址
- Unix 套接字 - 網路主機名
- Unix 套接字 - 客戶端-伺服器模型
- Unix 套接字 - 資料結構
- Unix 套接字 - 埠和服務
- Unix 套接字 - 網路位元組序
- Unix 套接字 - IP 地址函式
- Unix 套接字 - 核心函式
- Unix 套接字 - 輔助函式
- Unix 套接字 - 伺服器示例
- Unix 套接字 - 客戶端示例
- Unix 套接字 - 總結
- Unix 套接字有用資源
- Unix 套接字 - 快速指南
- Unix 套接字 - 有用資源
- Unix 套接字 - 討論
什麼是套接字 (Socket)?
套接字允許在同一臺機器或不同機器上的兩個不同程序之間進行通訊。更準確地說,它是一種使用標準 Unix 檔案描述符與其他計算機通訊的方法。在 Unix 中,每個 I/O 操作都是透過寫入或讀取檔案描述符來完成的。檔案描述符只是一個與開啟的檔案關聯的整數,它可以是網路連線、文字檔案、終端或其他內容。
對於程式設計師來說,套接字看起來和行為都非常類似於低階檔案描述符。這是因為像 read() 和 write() 這樣的命令與套接字的互動方式與它們與檔案和管道互動的方式相同。
套接字最初是在 2.1BSD 中引入的,隨後在 4.2BSD 中被改進到目前的形態。套接字功能現在在大多數當前的 UNIX 系統發行版中都可用。
套接字在哪裡使用?
Unix 套接字用於客戶端-伺服器應用程式框架。伺服器是一個根據客戶端請求執行某些功能的程序。大多數應用程式級協議,如 FTP、SMTP 和 POP3,都使用套接字來建立客戶端和伺服器之間的連線,然後交換資料。
套接字型別
使用者可以使用四種類型的套接字。前兩種最常用,後兩種很少使用。
假設程序只在相同型別的套接字之間進行通訊,但沒有限制阻止不同型別的套接字之間進行通訊。
流式套接字 (Stream Sockets) - 網路環境中的交付是有保證的。如果您透過流式套接字傳送三個專案“A、B、C”,它們將按相同的順序到達 - “A、B、C”。這些套接字使用 TCP(傳輸控制協議)進行資料傳輸。如果交付不可能,傳送方會收到錯誤指示。資料記錄沒有任何邊界。
資料報套接字 (Datagram Sockets) - 網路環境中的交付沒有保證。它們是無連線的,因為您不需要像流式套接字那樣開啟連線 - 您構建一個包含目標資訊的包並將其傳送出去。它們使用 UDP(使用者資料報協議)。
原始套接字 (Raw Sockets) - 這些套接字允許使用者訪問支援套接字抽象的基礎通訊協議。這些套接字通常是面向資料報的,儘管它們的精確特性取決於協議提供的介面。原始套接字並非面向普通使用者;它們主要提供給那些有興趣開發新的通訊協議或訪問現有協議某些更隱秘功能的人。
順序分組套接字 (Sequenced Packet Sockets) - 它們類似於流式套接字,區別在於保留了記錄邊界。此介面僅作為網路系統 (NS) 套接字抽象的一部分提供,在大多數重要的 NS 應用程式中非常重要。順序分組套接字允許使用者透過以下方式操作順序分組協議 (SPP) 或網際網路資料報協議 (IDP) 報頭:寫入原型報頭以及要傳送的任何資料,或指定一個預設報頭用於所有傳出資料,並允許使用者接收傳入資料包的報頭。
接下來是什麼?
接下來的幾章旨在強化您的基礎知識,並在您使用套接字編寫伺服器和客戶端程式之前奠定基礎。如果您想直接跳到如何編寫客戶端和伺服器程式,您可以這樣做,但不推薦這樣做。強烈建議您一步一步地完成這些最初的幾章,以便在繼續進行程式設計之前打好基礎。