2021-11-4 socket的通信过程

在这里插入图片描述

客户端:首先创建socket套接字,然后调用connect()建立连接。进行TCP三次握手后,使用write()写数据,read()读取数据,最后close()关闭连接。
服务端:服务端首先创建套接字socket(),然后bind()绑定相应的地址和端口号,并置于监听状态。然后调用accept(),阻塞等待客户端发起连接。建立连接后,使用write()写数据,read()读数据,最后close()关闭连接。

TCP三次握手过程:
服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待;客户端Socket对象调用connect()向服务器发送了一个SYN并阻塞;服务器完成了第一次握手,即发送SYN和ACK应答;客户端收到服务端发送的应答之后,从connect()返回,再发送一个ACK给服务器;服务器Socket对象接收客户端第三次握手ACK确认,此时服务端从accept()返回,建立连接。

int socket(int domain, int type, int protocol);
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
int listen(int sockfd, int backlog);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
int close(int fd);

常用的socket类型有,SOCK_STREAM(TCP)、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等(socket的类型有哪些?)。

TCP四次挥手过程:
某个应用进程调用close()主动关闭,发送一个FIN;另一端接收到FIN后被动执行关闭,并发送ACK确认;之后被动执行关闭的应用进程调用close()关闭Socket,并也发送一个FIN;接收到这个FIN的一端向另一端ACK确认。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值