2021-11-4 socket的通信过程

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、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等(socket的类型有哪些?)。

TCP四次挥手过程:
某个应用进程调用close()主动关闭,发送一个FIN;另一端接收到FIN后被动执行关闭,并发送ACK确认;之后被动执行关闭的应用进程调用close()关闭Socket,并也发送一个FIN;接收到这个FIN的一端向另一端ACK确认。
2021-11-4 socket的通信过程

上一篇:用IO流复制文件的方法性能比较


下一篇:OkHttp踩坑记:为何 response,看这里