TCP協議下的客戶機和伺服器模型

2021-07-30 16:37:03 字數 2270 閱讀 6220

tcp可以提供一種面向連線的、可靠的資料傳輸服務。

這是tcp服務的**過程:

使用tcp進行通訊的過程:

1、建立連線:

第一步:連線的發起端(客戶機)向目標計算接(伺服器)傳送乙個請求連線的請求資料報。

第二步:伺服器收到請求後,對客戶機端的同步訊號作出響應,並傳送自己的同步訊號給客戶端。

第三步:客戶端對伺服器端發來的同步訊號進行響應。連線建立完成,就可以進行資料傳輸了。

以上三步也稱作是tcp協議的「三次握手」;

2、關閉:

第一步:請求主機傳送乙個關閉連線的請求給對方;

第二步:另一方收到關閉連線的請求後,傳送乙個接受請求的確認資料報,並關閉它的socket連線。

第三步:請求主機主機收到確認資料報,傳送乙個確認資料報給對方,告知另一方其傳送的資料報已經確認收到。

第四步:請求主機關閉它的socket。

以上的四步簡稱tcp的「四次揮手」。

下面我們開看看tcp模型的**實現:

//伺服器//

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define max_buffer_size 256

int main()

struct sockaddr_in addrser,addrcli;

addrser.sin_family = af_inet;//ipv4 af_unix af_inet6

addrser.sin_port = htons(9090);//伺服器和客戶端必須是在對同乙個位址和埠操作,才能連線

addrser.sin_addr.s_addr = inet_addr("127.0.0.1");

socklen_t len = sizeof(struct sockaddr);

int res = bind(sockser, (struct sockadrr*)&addrser, len);//繫結

if(res == -1)

res = listen(sockser, 5);//監聽,不接受連線,有下面的accept來實現

if(res == -1)

int serconn = accept(sockser, (struct sockaddr*)&addrcli, &len);//接受連線

printf("client ip:> %s\n", inet_ntoa(addrcli.sin_addr));//顯示連線客戶端的ip位址

printf("client port:>%s\n",ntohs(addrcli.sin_port));//顯示連線客戶端的埠號

if(serconn == -1)

else

char sendbuff[max_buffer_size];

char recvbuff[max_buffer_size];

while(1)

///客戶端//

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define max_buffer_size 256

int main()

struct sockaddr_in addrser,addrcli;

addrser.sin_family = af_inet;

addrser.sin_port = htons(9090);

addrser.sin_addr.s_addr = inet_addr("127.0.0.1");

socklen_t len = sizeof(struct sockaddr);

int res = connect(sockcli, (struct sockaddr*)&addrser, &len);

if(res == -1)

else

close(sockcli);

return

0;}

UDP協議的客戶機和伺服器通訊

在tcp ip模型中,udp協議位與傳輸層,在網路層之上而在應用層之下。udp協議向應用程式提供一種面向無連線的服務,通常udp協議被用於不需要可靠資料傳輸的網路環境中 不可靠 udp不需要建立連線。udp伺服器和客戶端建立連線 如下 在 實現之前我們來看看udp協議下的sendto和recvfro...

Python網路程式設計 TCP客戶端和伺服器

import socket 客戶端建立步驟 1 建立網路套接字 2 連線到目標ip位址和埠 3 收發資料 4 關閉套接字 ip socket.gethostname port 5004 sock socket.socket socket.af inet,socket.sock stream sock...

Redis客戶端和伺服器

一 redis客戶端 redisserver結構中儲存了所有客戶端的狀態資訊。struct redisserver 命令client list可以列出目前所有連線到伺服器的客戶端。命令client setname name 可以給客戶端設定乙個名字。偽客戶端 由於伺服器必須接收來自客戶端的命令以執行...