關於SOCKET程式設計的一些整理!

2021-06-09 15:27:49 字數 1661 閱讀 7649

1.int socket(int af , int type ,int protocol)

1.首先來看af  協議域又稱協議族,協議族決定了socket的位址型別,在通訊中必須採用對應的位址,

2.type :指socket型別,常用到的有:sock_stream    sock_dgram  sock_raw  sock_packet 等。

sock_stream是基於tcp的,資料傳輸比較有保障。sock_dgram是基於udp的,專門用於區域網,基於廣播。

3.protocol:指定協議:常用的協議有:ipproto_tcp 、ipptoto_udp、ipproto_sctp、ipproto_tipc等:

他們分別對應:tcp傳輸協議、udp傳輸協議、stcp傳輸協議、tipc傳輸協議。

ps:透明程序間通訊(transparent inter-process communication, tipc)是一種用於程序間通訊的網路通訊協議,原本是為集群間通訊特別設計的。它允許設計人員能夠建立可以和其它應用快速可靠地通訊應用,無須考慮在其它需要通訊的應用在機群環境中的位置。

ps:並不是上面的type 和protocol可以隨意組合。如:socket_stream和ipproto_udp就不可以組合。當protocol為0時,會自動選擇type 型別對應的預設協議。

至此,我們如果使用socket函式建立乙個socket時,返回的socket描述字存在於協議族(即就是:af_**中)空間中。但是他沒有對應的位址,如果想給他賦予乙個位址,就必須使用bind()函式。

2.bind()函式

int bind(int sockfd ,int const struct sockaddr *addr ,socklen_t addrlen);

1.sockfd :這是乙個描述字,唯一標示乙個socket,  bind()函式就是給這個描述字繫結乙個名字。

2. addr:乙個const struct sockaddr*型別的指標。指向sockfd的協議位址, 

struct sockaddr_in

sa_family   sin_family;

in_port_t     sn_port;

struct   int_addr     sin_addr;

struct in_addr

uint32_t       s_addr;

3. addrlen:對應的是位址的長度。一般都用sizeof(struct sockaddr).

3.listen()

listen(int sockfd,int backlog)

第乙個引數為監聽的描述字,第二個引數為相應socket可排隊等待的最大連線個數。

4.connect()

connect(int  sockfd ,const struct  sockaddr *addr ,socklen_t addrlen)

第乙個引數為客戶端的描述字,第二個引數為伺服器的socket位址,都三個引數為socket位址長度。

5.accept()

int accept(in sockfd, struct  sockaddr* addr,socklen_t *addrlen) ;

第乙個引數是監聽套接字,其實說白了就是乙個位址和乙個埠號的組合。

關於Socket的一些概念

對於 tcp ip 我們還知道 tcp和 udp,前者可以保證資料的正確和可靠性,後者則允許資料丟失。最後,我們還知道,在建立連線前,必須知道對方的 ip位址和埠號。除此,普通的程式設計師就不會知道太多了,很多時候這些知識已經夠用了。最多,寫服務程式的時候,會使用多執行緒來處理併發訪問。我們還知道如...

一些socket的程式設計經驗

沒有逐條實踐,先收藏,歡迎交流。1.如果在已經處於 established狀態下的socket 一般由埠號和標誌符區分 呼叫closesocket 一般不會立即關閉而經歷time wait的過程 後想繼續重用該socket bool breuseaddr true setsockopt s,sol ...

關於排序的一些整理

第一部分 stl中的sort排序 在stl中,排序是通過使用函式模板sort來完成的。這裡給出一些使用的例子 sort v.begin v.end 整個容器v按非降序排列 sort v.begin v.end greater 將整個容器降序排列 sort v.begin v.begin v.end ...