socket之回射c s模型 一

2021-07-09 06:27:34 字數 3415 閱讀 7185

今天簡單學了socket程式設計,以下簡單介紹c/s模型中的回射模型。

一、基礎知識

#include 

struct sockaddr_in;

以下是任何協議的套介面程式設計:

struct sockaddr;
通常我們在linux下先建立ipv4形式的,然後強制轉換為通用形式

2. 位元組序:

以下是常用函式:

我們可以編寫乙個程式來測試一下本主機是大端位元組序還是小端位元組序:

/*byteorder.c

*我的是小端位元組序,低位址存放低位

* 78,56,34,12

*/#include

int main(void)

int inet_aton(const

char* cp,struct in_addr* inp);

in_addr_t inet_addr(const

char* cp);

//將點分十進位制轉換成32位整數

char* inet_ntoa(strcut in_addr in);

//將位址結構轉換成點分十進位制的形式

寫乙個小**測試一下:

#include 

#include

int main(void)

二、c/s模型(回射模型)1.socket函式

功能:建立乙個套接字用於通訊

int socket(int domain,int

type,int protocol);

//domain:指定通訊協議族(protocol family)

//type:指定socket型別,流式套接字sock_stream,資料報套接字 sock_dgram,原始套接字sock_raw

//ptotocol:協議型別

返回值:成功返回非負整數,失敗返回-1

2.bind函式

int bind(int sockfd,const

struct sockaddr* addr,socklen_t addrlen);

//sockfd:socket函式返回的套接字

//addr:要繫結的位址

//addrlen:位址長度

返回值:成功返回0,失敗返回-1

3.listen函式

int listen(int sockfd,int backlog);

//sockfd:socket函式返回的套接字

//backlog:規定核心為此套接字排隊的最大連線個數

返回值:成功返回0,失敗返回-1

被動套接字:connect

主動套接字:accept

一般來說,listen在呼叫socket和bind之後,在accept之前呼叫

對於給定的監聽套介面,核心要維護兩個佇列:

*已由客戶發出並到達伺服器,伺服器正在等待完成相應的tcp三路握手過程

*已完成連線的佇列

4.accept函式

功能:從已完成連線佇列返回第乙個連線,如果已完成連線隊列為空,則阻塞。

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

//sockfd:伺服器套接字

//addr:將返回對等方的套接字位址

//addrlen:返回對等方的套接字長度

返回值:成功返回非負整數,失敗返回-1

5.connect函式

功能:建立乙個連線至addr所指定的套接字

int connect(int sockfd,const

struct sockaddr* addr,socklen_t addrlen);

//sockfd:未連線套接字

//addr:要連線套接字位址

//addrlen:第二個引數addr的長度

返回值:成功返回0,失敗返回-1

以下是**:

/*客戶端echosrv.c*/

#include

#include

#include

#include

#include

#include

#include

#define err_exit(m)\

\while(0);

int main(void)

close(conn);

close(listenfd);

return

0;}

/*客戶端echocli.c*/

#include

#include

#include

#include

#include

#include

#include

#define err_exit(m)\

\while(0);

int main(void);

char recvbuf[1024] = ;

/*從stdin中得到的資訊,也就是我們手動輸入的資訊*/

while(fgets(sendbuf,sizeof(sendbuf),stdin) != null)

close(sock);

return

0;}

**執行結果如下:

這只是乙個簡單的模型,但是該**有兩個不足之處:

1.不能處理多個客戶端

2.沒有客戶端或者伺服器的exit捕捉

關於不足之處的彌補,請看socket之回射c/s模型(二)

回射客戶 伺服器模型(1)

最近在學習socket程式設計,根據自己的學習過程及學習筆記,下面來梳理一下如何實現乙個簡單的回射客戶 伺服器模型,也藉此來熟悉一下socket bind listen accept connect這些函式的使用。簡單的回射客戶 伺服器模型 下面先看一下乙個客戶 伺服器模型的框架圖。可以看到,伺服器...

Socket的C S模型與TCP關係

首先我們看一下tcp的c s設計基本模型。在模型中有兩個關鍵點,與tcp連線可以對號入座 1 connet 與accept 的互動,完成tcp的三次握手連線。此處應該注意伺服器是屬於被動方。等待客戶端發起握手。期間任何乙個資料報的丟失都會使得連線不成功。2 雙方close 的互動,完成連線的關閉。當...

Socket程式設計 簡單回射伺服器的實現

include include include include include include include include include define err exit m do while 0 int main void if listenfd socket pf inet,sock str...