Linux下C編程(5)

前面講了socket的一般概念,主要是TCP爲主,實際上socket不僅函蓋TCP還有UDP,SCTP,unix socket等所有基於IP或IPC協議之上的應用。因此,學習socket開發,不僅需要了解關於TCP/UDP/SCTP等基於Internet的相關知道,還需要了解多進程、多線程、IPC、SIGNAL等其它的一些知識,才能開發出一個健壯的SOCKET應用,當然現在也有一些封閉庫,這些庫將一些底層的差異屏蔽掉。這裏還是針對一些不同協議的SOCKET進行一個簡要學習。

1)UDP 同TCP不同的,UDP是無連接的,同IP包一樣。不可靠的數據包。如下圖所示,服務端不再需要進行listen,客戶端也無需要connect,服務端直接進行數據接收,客戶端直接發送數據包,並且更靈活的是,不光服務端SOCKET可以接收不同的客戶端發過來的數據,而且客戶端也可以向多個服務端進行發送。不再有握手過程。

image 

開發UDP需要注意,首先創建SOCKET時使用SOCK_DGRAM,其次UDP SERVER不再使用fork創建出子線程來處理連接,而是一個枚舉過程。因此,當有多個數據包來臨時,對UDP SERVER來說,由內核提供一個BUFFER,這個BUFFER中維護一個FIFO的隊列。

image

2)DomainSocket Unix Domain protocols不是一個真實的協議簇,但是IPC的另外一種方法用來實現在相同主機上的不同進程之間通信的一種方法。UNIX DOMAIN Socket支持SOCK_STREAM/SOCK_DGRAM.

3)Route Socket

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章