linux網路程式設計學習

2021-08-27 04:35:51 字數 2073 閱讀 4054

終於抽時間學習了linux的網路程式設計,以前只是對socket有個字面上的了解,具體的機制和用法一無所知。正好專案要用,學習下,做個筆記。

在linux上,任何都可以當做檔案來對待。獲得乙個檔案描述符,就可以對它進行讀寫操作。socket也是一樣。

socket在linux下被翻譯成套接字,我覺得這個翻譯真的很爛,第一次接觸的人不可能知道套接字是個什麼東西。翻譯成插座反而直觀明了,更容易理解。

socket是為c/s模型設計的,也就是客戶--伺服器模型。解決了程序間通訊的問題。

下面主要說的面向連線的socket,無連線的socket就不講了。

簡單的將,服務端起乙個socket,監聽乙個埠,等待客戶端的連線,然後客戶端起乙個socket,指向服務端的ip位址,埠號,向伺服器發起連線請求。連線成功後就可以傳送資訊。看一下簡單的流程

前面講了socket可以當做乙個檔案來讀寫。那麼讀寫檔案一般都是要獲得乙個檔案描述符,socket通訊要獲得乙個socket描述符,也可以理解為特殊的檔案描述符,叫法不同而已。

通過socket函式獲得socket描述符

int socket(int domain , int type , int protocol);
這個函式返回乙個int型的值,就是socket描述符。如果發生錯誤則返回-1。

domain確定通訊域,包括位址格式。通常被設為af_inet代表ipv4網際網路。

type確定socket型別,是無連線還是有鏈結的。

protocol通常設為0,表示按給定的域和socket型別選擇預設協議。比如domain為af_inet,type為scok_stream時,預設協議就是tcp。

bind()函式繫結埠。宣告如下

int bind (int sockfd , const struct sockaddr *my_addr , int addrlen) ;addrlen一般設為sizeof(struct sockaddr);  

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

返回乙個int型的值,連線成功返回0,出錯則返回-1;

引數sockfd還是socket描述符,此時是請求連線的socket。

serv_addr就是伺服器位址。

listen函式

這個函式用來監聽埠是否有請求,然後可以使用accept()來處理請求。宣告:

int listen(int sockfd, int backlog);

sockfd跟前面一樣,是socket描述符,backlog是未處理的請求佇列可容納最大數目。

accept()函式

int accept(int sockfd, void *addr, int *addrlen);
返回乙個int值,這個int值是乙個新的socket描述符,代表這個連線。此時有兩個socket描述符,返回的這個就是和遠端計算機的連線,而一開始的那個socket描述符仍然在指定的埠上進行監聽。此時返回的這個socket描述符就可以進行讀寫了。

引數sockfd是在監聽的socket描述符。

addr是乙個struct sockaddr_in結構的指標,儲存遠端計算機的資訊,如埠號和ip位址

發生錯誤返回-1.

面向連線的程式中,伺服器執行如下函式:

呼叫socket()函式建立乙個socket。

呼叫bind()函式把自己繫結在乙個位址上。

呼叫listen()函式監聽連線。

呼叫accept()函式處理請求。

呼叫send()和recv()來傳送和接受訊息

客戶端執行下面的函式:

呼叫socket()函式建立乙個socket。

呼叫connect()函式連線到伺服器的網路位址上。

呼叫send()和recv()函式來傳送和接收訊息。

不傳**了,**是改的別人的demo。

linux網路程式設計學習(3)

linux網路程式設計學習 3 domain 設定通訊使用的ip協議 也就是通訊區域 本地 非本地 af unix,local communication unix 7 af local af inet ipv4 internet protocols ip 7 af inet6 ipv6 inter...

Linux網路程式設計學習筆記(五)

通過捕捉sigchld訊號捕捉殭屍程序,可解決多個子程序同時連線的情況 伺服器端 include include include include include include include include include void error handling char message void...

Linux網路程式設計學習筆記 索引

一 linux基本知識 學習筆記 linux平台的檔案i o操作 學習筆記 linux平台的檔案,目錄及操作 linux學習筆記 標準輸入輸出 linux學習筆記 程序概念及控制 linux學習筆記 訊號處理 二 程序間通訊 三 傳輸層協議tcp和udp 四 tcp套接字 五 udp資料報 六 套接...