一、基本模型
二、 TCP通信流程
2.1服务器端:
socket: 创建套接字(填充使用的应用层协议、传输层协议),只是为了连接使用
bind:绑定,将ip地址和端口号绑定到该套接字中(必须要执行)
listen:将套接字设置成监听状态,监听客户端的连接请求(非阻塞)
accept:接受客户端连接请求,从未连接队列中取第一个进行接受连接,接受客户端连接后,会创建出一个新的文件描述符套接字,该套接字用于通信使用,真正进行通信的是由该函数产生的套接字文件描述符
read/recv:从套接字中读取数据
write/send:向套接字中写数据
close:关闭套接字
2.2客户端:
socket: 创建套接字(填充使用的应用层协议、传输层协议),为了通信使用,可以绑定IP地址和端口号,也可以不用绑定,对于客户端而言,该操作实现了全自动
connect:连接服务器,需要提供服务器的ip地址和端口号
read/recv:从套接字中读取数据
write/send:向套接字中写数据
close:关闭套接字
三:相关函数说明
int socket(int domain, int type, int protocol);
功能:创建一个用于连接的套接字文件,并返回一个文件描述符
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:为socket函数创建的套接字绑定地址信息
int listen(int sockfd, int backlog);
功能:将套接字设置成被动监听套接字,转换为一个用于接收客户端请求的套接字,
并给套接字提供两个队列,分别是已经完成连接的队列和未完成连接的队列
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:从监听套接字的挂起队列中选择第一个客户端,并为其建立一个新的通信套接字
该新的套接字才是真正通信使用的套接字
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:阻塞或非阻塞接收客户端套接字发来的数据
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:向套接字中发送数据
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:将所在的客户端套接字连接到服务器
close函数:关闭文件描述符(套接字)