我另外一片博客中詳細解析了Linux下tcp socket通信的過程,下面是我對socket機制更深一層的學習。
服務器和客戶端創建過程簡單描述如下:
服務器端
一、創建服務器套接字(CREATE)。
二、服務器套接字進行信息綁定(BIND),並開始監聽連接(LISTEN)。
三、接受來自客戶端的連接請求(ACCEPT),並創建接收進程。
四、開始數據傳輸(SEND、RECEIVE)。
五、關閉套接字(CLOSESOCKET)。
客戶機端
一、創建客戶機套接字(CREATE)。
二、與遠程服務器進行連接(CONNECT),如被接受則創建接收進程。
三、開始數據傳輸(SEND、RECEIVE)。
四、關閉套接字(CLOSESOCKET)
socket函數
SOCKET socket(int af, int type, int protocol);
af:指定應用程序使用的通信協議的協議族,對於TCP/IP協議族該參數設置爲AN_INET,對於UNIX可建立本地Socket
type:指定創建socket類型:
流套接字類型(SOCK_STREAM):最常見的類型,基於TCP協議
數據報套接字類型(SOCK_DGRAM):即UDP數據報
原始套接字類型(SOCK_RAW):在IP層對套接字進行編程
protocol:指定應用程序所使用的通信協議。最常用的是TCP和UDP
流套接字和數據報套接字不能完成的任務,可以在原始套接字中得以實現。
Socket從傳輸模式上又分爲端對端和點對點的連接,流套接字和數據報套接字都屬於端對端的連接,因此需要綁定端口號。而原始套接字是基於IP協議的,屬於點對點的傳輸模式,是沒有端口這個概念的。比如常用的監測網絡連接ping命令,就是基於ICMP協議的,它不存在端口的概念。Socket是一種服務,與其實現的語言無關。基於這個性質,我們能實現不同服務之間,不同語言之間的互聯互通。
socket實質上提供了進程通信的端點。進程通信之前,雙方首先必須各自創建一個端點,否則是沒有辦法建立聯繫並相互通信的。正如打電話之前,雙方必須各自擁有一臺電話機一樣。
更多詳細內容:百度socket詞條http://baike.baidu.com/link?url=PsoIpr5DfvwlKhwf4hVgxCB7UhzIYkCroynJWdUhWLMo_D9VX39oaRdpEwoaUuu-RSaSvq8gGvSfuY85zKhFOa2-2O3OGm6GpchojKLyA4G