TCP IP 第2章 套接字型別與協議設定

2021-09-14 01:35:53 字數 1802 閱讀 6801

int socket(int domain, int type, int protocol);
成功時返回檔案描述符,失敗時返回-1。

domain:套接字中使用的協議族(protocol family)資訊。

type:套接字資料傳輸型別資訊。

protocol:計算機間通訊中使用的協議資訊。

標頭檔案sys/socket.h中宣告的協議族 名稱

協議族pf_inet

ipv4

pf_inet6

ipv6

pf_local

本地通訊的unix協議族

pf_packet

底層套接字的協議族

pf_ipx

ipx novell協議族

主要用pf_inet協議族。

套接字型別指的是套接字的資料傳輸方式,通過第二個引數傳遞。協議族中存在著多種資料傳輸方式。

sock_stream:面向連線的套接字

收發資料的套接字內部有buffer(緩衝區)。所以可以n對m的進行read()和write()。

當buffer滿了之後,傳輸端套接字將停止傳輸。

「可靠的、按序傳遞的、基於位元組的面向連線的資料傳輸方式的套接字」

sock_dgram:面向訊息的套接字

「不可靠的、不按序傳遞的、以資料的高速傳輸為目的的套接字」

在大部分情況俠,傳遞前兩個引數即可建立所需的套接字。所以可以向第三個引數傳遞0。

但是會遇到,同一協議族中存在多個資料傳輸方式相同的協議。

在基於ipv4網路協議族中:

sock_stream只有ipproto_tcp。 

sock_dgram只有ipproto_udp。

#include #include #include #include #include #include void error_handling(char *message);

int main(int argc, const char * ar**)

sock = socket(pf_inet, sock_stream, 0);

if(sock == -1)

error_handling("socket() error");

memset(&serv_addr, 0, sizeof(serv_addr));

serv_addr.sin_family=af_inet;

serv_addr.sin_addr.s_addr=inet_addr(ar**[1]);

serv_addr.sin_port=htons(atoi(ar**[2]));

if(connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1)

error_handling("connect() error!");

int idx=0,read_len=0;

while(read_len=read(sock, &message[idx++],1))

if(str_len==-1)

error_handling("read() erroe!");

printf("message from server : %s\n",message);

printf("use read() %d times",idx);

close(sock);

return 0;

}void error_handling(char* s)

套接字型別與協議設定

本次學習主要了解socket函式的建立以及不同套接字的特性,只涉及到socket函式,所以大家不用覺得困難,但是會有些枯燥,這是後面實際網路程式設計的基礎,需要好好掌握。看一下socket函式 include int socket int domain,int type,int protocol 第...

網路程式設計 2 套接字型別與協議設定

協議就是為了完成資料交換而定好的約定。include intsocket int domain,int type,int protocol domain 套接字中使用的協議族資訊 type 套接字資料傳輸型別資訊 protocol 計算機間通訊中使用的協議資訊 名稱 協議族pf inet ipv4網...

TCP IP 第1章 理解網路程式設計和套接字

1.socket函式建立套接字。2.呼叫bind函式給套接字分配ip位址和埠號。3.呼叫listen函式轉為可接受請求狀態。4.呼叫accept函式受理連線請求 include include include include include include using namespace std v...