套接字的型別

2021-08-21 08:41:46 字數 954 閱讀 6883

套接字型別

套接字的型別其實是指套接字的一種傳輸資料的方式,它們就是面向連線和面向訊息。

1.面向連線的套接字

代號sock_stream。它的特徵就是傳輸的資料是什麼順序接收的時候就是什麼順序;當在傳輸的過程中出現問題,那麼問題點的資料就會停止傳輸並阻塞後面的資料,等問題解決了再從該點繼續傳輸,這樣保證了資料在傳輸過程中不會丟失;按這種排序的方式一直傳輸下去的話,資料是可以沒有邊界的(只要傳的人有那麼多資料,接收的人也有那麼多空間,兩端條件滿足)。

這種傳輸方式還有乙個特點,就是傳輸的資料量大時,傳輸這邊覺得一次傳不了那麼多(每次傳輸的資料大小不能沒法沒天啊,是有限制的),那麼就會把資料分成幾份,先後傳出去。而接收這邊,有乙個地方專門放接收到的資料(接資料到達的順序存放)的地方(人稱緩衝區),當要從這個存放的地方取資料的時候可不一定按你發來的是幾份我就取幾次,我可能覺得我能力大,一次就從裡面取完了,也可能沒錯得取兩次也行。這完全取決於接收者。

像上面說的,你也發現了,它每乙個傳輸資料者都會對應乙個資料接收者。也就是兩端的套接字是一一對應的。

人們總結這種傳輸方式:可靠、按順序的、基於位元組的面向連線傳輸方式。

2.面向訊息的套接字

代號sock_dgram。它的特徵就是非順序、還有可能丟失傳輸過程中的資料、有傳輸邊界但是速度快的傳輸方式。

為什麼它的速度比面向連線的要快呢。不從原理上看,單模擬乙個常景:要從五袋公尺到乙個地方,五個人同時出發送總比五個人按順序乙個送完乙個接著這種要快吧。

總結面向連線的套接字是比較耗資源的,耗的是哪些資源呢:時間、傳輸通道。它的前提是兩端的套接字必需連線好了之後才進行資料傳輸。在傳輸的過程中就一直佔著此傳輸通道(可以把網線想像成由五條管子紮成一扎組成,兩個連線的套接字就相當於在傳輸的這段時間佔著其中一根)。又因為它要保證順序又要保證失敗重傳,所以它的傳輸過程有很多規矩,大家都知道,按規矩辦事肯定是慢的。要順序,那肯定得乙個傳完再傳乙個;要失敗重傳,那必需要乙個傳完之後等特對方應答後再看情況傳輸。

監聽套接字 連線套接字

摘要 對於伺服器程式設計中最重要的一步等待並接受客戶的連線,那麼這一步在程式設計中如何完成,accept函式就是完成這一步的。它從核心中取出已經建立的客戶連線,然後把這個已經建立的連線返回給使用者程式,此時使用者程式就可以與自己的客戶進行點到點的通訊了。accept函式等待並接受客戶請求 inclu...

監聽套接字 連線套接字的區別

摘要 對於伺服器程式設計中最重要的一步等待並接受客戶的連線,那麼這一步在程式設計中如何完成,accept函式就是完成這一步的。它從核心中取出已經建立的客戶連線,然後把這個已經建立的連線返回給使用者程式,此時使用者程式就可以與自己的客戶進行點到點的通訊了。accept函式等待並接受客戶請求 inclu...

Dart的套接字與web套接字

首先在專案中建三個dart檔案,如下圖 main.dart中的 如下 import dart io import dart convert main listarguments socket 1.dart中的 如下 import dart io main listarguments socket 2...