C語言實現基於TCP協議的C S模型

2021-09-26 02:15:06 字數 2612 閱讀 9571

程式設計模型:

serve:client:

建立套接字(socket)

建立套接字(socket)

準備本機位址(sockaddr_in)    

準備目標機位址

繫結(bind)    

監聽/宣告願意連線(listen)

等待連線/獲取連線請求並建立連線(accept fork)    

連線(connect)

接收請求(read/recv)  

傳送請求(write/send)

響應請求(write/send)  

接收響應(read/recv)

關閉(close)        

關閉(close)

先對使用socket進行tcp通訊的幾個函式做個說明:

#include int listen(int socket,int backlog);

功能: 宣告它願意接收連線請求/設定等待連線的最大數量

sockfd: 被監聽的套接字描述符

backlog: 提示系統該程序所要入隊的未完成連線請求的數量

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

注:一旦伺服器呼叫了listen,套接字就能接收連線請求

#include int accept(int socket,struct sockaddr *addr,socklen_t *addrlen);

功能:獲取連線請求並建立連線

addr:獲取連線的位址

addrlen:設定連線位址結構體的長度

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

sockfd:sockfd描述符:socket函式的返回值

addr:通訊位址結構體,實際給的是sockaddr_un 或 sockaddr_in 需要強制型別轉換。

addrlen:通訊位址結構體型別的位元組數,使用sizeof計算。

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

功能:在請求服務的程序套接字(客戶端)和提供服務的程序套接字(伺服器)之間建立連線

sockfd:套接字描述符

addr:通訊目標位址

返回值:在不同的程式設計模型下返回值意義不同,在本地通訊返回加0,失敗返回-1。

附上具體的實現**

/**伺服器端**(linux下)**/

#include #include #include #include #include #include int main()

puts("準備位址");

struct sockaddr_in addr = {};

addr.sin_family = af_inet;

addr.sin_port = htons(6677);

addr.sin_addr.s_addr = inet_addr("10.0.2.15");

socklen_t len = sizeof(addr);

puts("繫結位址");

if(bind(sockfd,(struct sockaddr*)&addr,len))

puts("設定監聽");

if(listen(sockfd,5))

puts("等待連線");

for(;;)

; socklen_t lencli = sizeof(addrcli);

int clifd = accept(sockfd,(struct sockaddr*)&addrcli,&lencli);

if(0 > clifd)

if(0 == fork())

; for(;;)

}} }

}

/**客戶端**(linux下)**/

#include #include #include #include #include #include #include int main()

puts("準備位址");

struct sockaddr_in addr = {};

addr.sin_family = af_inet;

addr.sin_port = htons(6677);

addr.sin_addr.s_addr = inet_addr("10.0.2.15");

socklen_t len = sizeof(addr);

puts("連線伺服器");

if(connect(sockfd,(struct sockaddr*)&addr,len))

char buf[1024] = {};

for(;;)

printf("read:");

read(sockfd,buf,sizeof(buf));

printf("%s\n",buf);

} close(sockfd);

}

基於TCP協議的C S通訊

一 環境 os win10 ide visual studio 2010 二 在同一解決方案下新建兩個win32控制台應用程式,專案名分別是server和client,分別在兩個專案的原始檔下新增server.cpp和client.cpp server.cpp include include inc...

基於UDP和TCP實現CS

1.我們應該先了解udp和tcp協議 首先udp和tcp是基於傳輸層的協議 我們需要了解udp和tcp的特性 tcp協議的特性 1 面向連線的服務 2 可靠的資料傳輸服務 3 面向位元組流。udp協議的特性 1 無連線服務 2 不可靠的資料傳輸 3 面向資料報 以下是流行網際網路應用層及其應用層協議...

用C 實現基於用C 實現基於TCP協議的網路通訊

tcp 協議是乙個基本的網路 協議,基本上所有的網路服務都是基於 tcp協議的,如http,ftp等等,所以要了解網路程式設計就必須了解基於 tcp協議的程式設計。然而 tcp協議是乙個龐雜的體系,要徹底的弄清楚它的實現不是一天兩天的功夫,所幸的是在.net framework環境下,我們不必要去追...