本次學習主要了解socket函式的建立以及不同套接字的特性,只涉及到socket函式,所以大家不用覺得困難,但是會有些枯燥,這是後面實際網路程式設計的基礎,需要好好掌握。
看一下socket函式:
#include
int socket(int domain,int type,int protocol);
第乙個引數是套接字使用的協議族資訊,第二個是套接字資料傳輸型別資訊,第三個是計算機通訊中用的協議資訊(套接字實際採用的最終協議資訊),第乙個引數一般是ipv4協議族(pf_inet),第乙個引數決定第三個引數
2、type決定了套接字資料傳輸方式,下面介紹兩種典型的套接字型別;
(1)、面向連線的套接字(socket _stream)
面向連線的套接字可以看成是一條傳送帶,兩端各有乙個工人,傳送糖果,一般來說,傳送的糖果不會丟失,而且也是先後有序的,並且沒有邊界,糖果是乙個個傳送的,但是接受100個才打包。
面向連線的套接字有乙個緩衝,也就是位元組陣列,一旦緩衝滿了會停止傳輸,防止資料丟失。
所以面向連線的套接字:可靠的,有序的,基於位元組的,一一對應的疏忽傳輸方式。
(2)、面向訊息的套接字(socket_dgram)
可以看成是電單車送快遞。以高速資料傳輸為目的,不強調按序傳遞,資料可能丟失或損毀,而且傳輸的資料大小有限,並且資料有邊界,意味著,傳輸次數和接收次數相同。這種套接字是沒有連線概念的。
3、第三個引數決定了協議的最終選擇
第三個引數主要在這種情況下使用:同一協議族中存在多個資料傳輸方式相同的協議。
在ipv4中,滿足面向連線和訊息的套接字都只有一種;如下
int tcp_socket=socket(pf_inet,socket_stream,ipproto_tcp)
int udp_socket=socket(pf_inet,socket_dgram,ipproto_udp)
其中第三個引數可以用0代替,因為符合要求的具體協議只有一種,
學過計算機網路的同學對這個tcp/udp協議應該很熟悉,學起來更加熟練。
例項的話,我們對之前客戶端read函式進行修改,每次讀取乙個位元組的資料,然後列印出呼叫read函式的次數,就可以驗證,詳細**可以看之前的github鏈結。
TCP IP 第2章 套接字型別與協議設定
int socket int domain,int type,int protocol 成功時返回檔案描述符,失敗時返回 1。domain 套接字中使用的協議族 protocol family 資訊。type 套接字資料傳輸型別資訊。protocol 計算機間通訊中使用的協議資訊。標頭檔案sys s...
網路程式設計 2 套接字型別與協議設定
協議就是為了完成資料交換而定好的約定。include intsocket int domain,int type,int protocol domain 套接字中使用的協議族資訊 type 套接字資料傳輸型別資訊 protocol 計算機間通訊中使用的協議資訊 名稱 協議族pf inet ipv4網...
套接字型別 socket type
1 資料流套接字 stream socket 1 tcp提供可靠的連線。當tcp向另外一端傳送資料時,它要求對方返回乙個確認回答。如果沒有收到確認,則會等待一段時間後重新傳送,在數次重發失敗後,tcp才會放棄傳送。2 tcp為傳送的資料進行排序。比如傳送2048個位元組,tcp可能將它分成大小為10...