Socket是什麼?
套接字允許兩個不同的進程之間的通信相同的或不同的機器上。在Unix中,每個I/O操作都是由寫入或讀取一個文件描述符。文件描述符是一個打開的文件相關聯的僅僅是一個整數,它可以是網絡連接、一個文本文件中或一個終端,還可以是其他的東西。
對於程序員套接字看起來和行為很像一個較低水平的文件描述符。這是因為命令,例如read()和write()和套接字方式同樣,他們做的文件和管道的工作。套接字和正常的文件描述符之間的差異發生在創建一個socket,並通過各種特殊的操作來控製一個套接字。
套接字是2.1BSD首次推出,其後細化到當前的形式-4.2BSD。套接字功能是現在目前大多數的UNIX係統版本。
哪裡使用套接字?
使用Unix套接字在客戶端服務器應用程序框架。一台服務器是一個過程,從客戶端的請求負責完成一些功能。大部分的應用層協議,如FTP,SMTP和POP3使用套接字建立連接客戶端和服務器之間,然後進行數據交換。
Socket 類型:
有四種類型可供用戶使用的套接字。最常用的是前兩個而最後兩個很少被使用。
進程被推定為隻有相同類型的套接字之間進行通信,但冇有任何限製,防止不同類型的套接字之間的通信。
-
Stream Sockets: 在網絡環境下的傳遞保證。如果您發送通過流套接字三個項目“A,B,C”,他們將在同一順序到達 - “A,B,C”。這些套接字使用TCP(傳輸控製協議)進行數據傳輸。如果傳遞是不可能的,發送者會收到一個錯誤信號。數據記錄冇有任何界限。
-
Datagram Sockets: 傳遞在網絡環境中是無法得到保證。他們是無連接的,因為並不需要有一個開放的流套接字連接 - 建立了一個數據包的目的地信息,並將其發送出去。他們使用UDP(用戶數據報協議)。
-
Raw Sockets: 為用戶提供訪問底層通信協議支持套接字抽象的。這些套接字通常是麵向數據報,但其確切的特點是依賴於該協議所提供的接口。原始套接字並不打算為廣大用戶,他們主要是針對那些熱衷於開發新的通信協議或獲得一些更深奧的設備,現有協議已提供。
-
Sequenced Packet Sockets: 它們是相似的流套接字,除了保留記錄邊界。此接口僅提供作為網絡係統(NS)的套接字概念的一部分,並且是非常重要的,在最嚴重的NS應用。序列測定數據包套接字允許用戶操作序列數據包協議(SPP)或互聯網數據報協議(IDP)可以通過編寫一個原型頭沿與要被發送的所有數據,或者通過指定一個數據包或數據包的一組接頭連接器上可以使用一個缺省的頭部與所有傳出的數據,允許用戶接收傳入的數據包的報頭。
下一步學習什麼?
在接下來的幾章中,將使用使用套接字寫一個服務器和客戶端作為示例。如果直接想要跳轉看如何編寫一個客戶端和服務器,這裡不推薦這樣做。本教學會強烈建議先學習完成前麵幾章,了解一些必要的基礎知識,然後開始做編程。