終於抽時間學習了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()函式繫結埠。宣告如下
sockfd跟前面一樣,是socket描述符,backlog是未處理的請求佇列可容納最大數目。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);
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資料報 六 套接...