Linux學習筆記(socket網絡編程)

socket概念

在TCP/IP協議中,“IP地址+TCP或者UDP端口號”衛衣表示網絡通訊中的一個進程,“IP地址+端口號”就稱爲socket,socket也是一個描述符。

在TCP協議中,建立連接的兩個進程各自有一個socket來標識,那麼這兩個socket組成。

下面說一聲socket編程的步驟:
服務器端:
1.創建socket:

int socket(int domain,int type,int protocol);

domain:
AF_INET 這是大多數用來產生socket的協議,使用TCP或UDP來傳輸,用IPv4的地址
AF_INET6 與上面類似,不過是來用IPv6的地址
AF_UNIX 本地協議,使用在Unix和Linux系統上,一般都是當客戶端和服務器在同一臺及其上的時候使用
type:
SOCK_STREAM 這個協議是按照順序的、可靠的、數據完整的基於字節流的連接。當將protocol設爲0時,則默認使用TCP來進行傳輸。
SOCK_DGRAM 這個協議是無連接的、固定長度的傳輸調用。該協議是不可靠的,當將protocol設爲0時,則默認使用UDP來進行傳輸。
protocol
0 默認協議

返回值:
成功返回一個新的文件描述符
失敗返回-1,並設置errno

2.綁定socket

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

sockfd:
socket文件描述符
addr :
構造出IP地址加端口號
addrlen :
sizeof(addr)長度

返回值:
成功返回0,失敗返回 - 1, 並設置errno

3.監聽:

int listen(int sockfd, int backlog);

sockfd :
socket文件描述符
backlog :
排隊建立3次握手隊列和剛剛建立3次握手隊列的鏈接數和
即最大監聽數

4.處理客戶端連接請求

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

socket文件描述符
addr :
傳出參數,返回鏈接客戶端地址信息,含IP地址和端口號
addrlen :
傳入傳出參數, 傳入的是調用者提供的緩衝區addr的長度以避免緩衝區溢出問題,傳出的是客
戶端地址結構體的實際長度(有可能沒有佔滿調用者提供的緩衝區)。

返回值:
成功返回一個新的socket文件描述符,用於和客戶端通信,失敗返回 - 1,並設置errno。

5.與客戶端收發數據
6.客戶端斷開連接後,關閉socket

客戶端:

1.創建socket:

int socket(int domain,int type,int protocol);

2.與服務器進行連接:

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

參數類型與bind()差不多

3.收發數據
4.與服務器斷開連接,關閉socket
在這裏插入圖片描述

常用的收發數據的函數:

ssize_t read(int sockfd, const void *buf, size_t len);

socket描述符,緩衝區,數據長度。

ssize_t write(int sockfd, const void *buf, size_t len);
ssize_t send(int sockfd, const void *buf, size_t len,int flags);

flags:標誌位默認設置爲0

ssize_t recv(int sockfd, const void *buf, size_t len,int flags);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章