TCP/IP協議與socket的關係

一.常識

要寫網絡程序就必須用Socket,這是程序員都知道的。而且,面試的時候,我們會被問不會Socket編程?一般來說,很多人都會 說,Socket編程基本就是listen,accept以及send,write等幾個基本的操作。是的,就跟常見的文件操作一樣,只要寫過就一定知道。

對於網絡編程,我們也言必稱TCP/IP,似乎其它網絡協議已經不存在了。對於TCP/IP,我們還知道TCP和UDP,前者可以保證數據的正確和可靠性,後者則允許數據丟失。最後,我們還知道,在建立連接前,必須知道對方的IP地址和端口號。除此,普通的程序員就不會知道太多了,很多時候這些知識 已經夠用了。最多,寫服務程序的時候,會使用多線程來處理併發訪問。

二.TCP/IP協議與socket的關係

TCP/IP只是一個協議棧(是一堆約定),就像操作系統的運行機制一樣,必須要具體實現,同時還要提供對外的操作接口。就像操作系統會提供標準的編程接口,比如Win32編程接口一樣,TCP/IP也必須對外提供編程接口,這就是Socket編程接口--原來是這麼回事啊!(這個比喻很形象,但不知道正確不)

在Socket編程接口裏,設計者提出了一個很重要的概念,那就是socket。這個socket跟文件句柄很相似,實際上在BSD系統裏就是跟文 件句柄一樣存放在一樣的進程句柄表裏。這個socket其實是一個序號,表示其在句柄表中的位置。這一點,我們已經見過很多了,比如文件句柄,窗口句柄等 等。這些句柄,其實是代表了系統中的某些特定的對象,用於在各種函數中作爲參數傳入,以對特定的對象進行操作--這其實是C語言的問題,在C++語言裏, 這個句柄其實就是this指針,實際就是對象指針啦。

現在我們知道,socket跟TCP/IP並沒有必然的聯繫。Socket編程接口在設計的時候,就希望也能適應其他的網絡協議。以,socket的出現只是可以更方便的使用TCP/IP協議棧而已,其對TCP/IP進行了抽象,形成了幾個最基本的函數接口。比如 create,listen,accept,connect,read和write等等。 (感覺像是hibernatejdbc的關係)

三.socket編程在ios開發中的用途

socket可以用於聊天編程(UDP) 

 

發佈了18 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章