三次握手是在accept之前完成的

2021-07-11 09:44:52 字數 3246 閱讀 6177

server.c

#include #include #include #include #include #include #include #include #include #include #include #include #include #include /*

int socket(int domain, int type, int protocol);

*//*

int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);

//man 2 bind

struct sockaddr

//man 7 ip

struct sockaddr_in ;

//internet address.

struct in_addr ;

*///int listen(int sockfd, int backlog);

//accept 接受乙個新的連線 ,這個新的連線是乙個主動套接字

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

on success, accept() returns a non-negative integer that is a descriptor for the accepted socket. on error,

int conn = 0;

*//*

int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);

int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);

*/int main()

//tcp/ip 協議的結構體

struct sockaddr_in srvaddr;

//位址協議

srvaddr.sin_family = af_inet;

//埠

srvaddr.sin_port = htons(8001);

//位址

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

= inaddr_any; //繫結本機的任意乙個位址

int optval = 1;

//設定位址復用

if (setsockopt(sockfd, sol_socket, so_reuseaddr, &optval, sizeof(optval))

< 0)

//繫結

if (bind(sockfd, (struct sockaddr *) &srvaddr, sizeof(srvaddr)) < 0)

//一但呼叫listen函式,這個套接字sockfd將變成被動套接字;只能接受連線,不能主動的傳送連線

//listen 做了兩個佇列。。。。。。

if (listen(sockfd, somaxconn) < 0)

pause();

return 0;

}

client.c

#include #include #include #include #include #include #include #include #include #include #include #include #include #include /*

int socket(int domain, int type, int protocol);

*//*

int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);

//man 2 bind

struct sockaddr

//man 7 ip

struct sockaddr_in ;

//internet address.

struct in_addr ;

*///int listen(int sockfd, int backlog);

//accept 接受乙個新的連線 ,這個新的連線是乙個主動套接字

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

on success, accept() returns a non-negative integer that is a descriptor for the accepted socket. on error,

int conn = 0;

*/int main()

struct sockaddr_in srvaddr;

srvaddr.sin_family = af_inet;

srvaddr.sin_port = htons(8001);

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

= inaddr_any; //繫結本機的任意乙個位址

if (connect(sockfd, (struct sockaddr*) (&srvaddr), sizeof(srvaddr)) < 0)

}pause();

return 0;

}

tcp        0      0 127.0.0.1:8001          0.0.0.0:*               listen     

tcp 0 0 127.0.0.1:52150 127.0.0.1:8001 established

tcp 0 0 127.0.0.1:8001 127.0.0.1:52151 established

tcp 0 0 127.0.0.1:8001 127.0.0.1:52150 established

tcp 0 0 127.0.0.1:52151 127.0.0.1:8001 established

可見:三次握手是在accept之前完成的。

什麼是TCP 三次握手及為什麼進行三次握手?

tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個 syn置位的 tcp報文,其中包含連線的初始序列號 x和乙個視窗大小 表示客戶端上用來儲存從伺服器...

tcp三次握手 TCP 三次握手總結

tcp特點概述 tcp segment structure 段結構 step2 server host receives syn,replie with syn ack segment 答覆syn ack報文段 step3 client receives synack,replies with ac...

什麼是三次握手與四次握手

三次握手的過程 第一次握手 建立連線時,客戶端傳送同步序列編號到伺服器,並進入傳送狀態,等待伺服器確認 第二次握手 伺服器收到同步序列編號,並確認同時自己也傳送乙個同步序列編號 確認標誌 此時伺服器進入接受狀態 第三次握手 客戶端收到伺服器傳送的包,並向伺服器傳送確認標誌,隨後鏈結成功 注意 是在鏈...