函数
进入等待连接请求状态
#include<sys/socket.h>
@param sock:希望进入等待连接请求状态的套接字文件描述符,传递的描述符套接字参数成为服务器端套接字(监听套接字)
@parmam backlog:连接请求等待队列(Queue)的长度,若为5,则队列长度为5,表示最多使5个连接请求进入队列
int listen(int sock,int backlog)
//成功返回0,失败返回-1
受理客户端连接请求
#include<sys/socket.h>
@param sock:服务器套接字的文件描述符
@param addr:保存发起连接请求的客户端地址信息的变量地址值,调用函数后向传递来的地址变量参数填充客户端地址信息
@param addrlen:第二个参数addr结构体的长度,是存有长度的遍历地址。函数低完成后,该变量被填入客户端地址长度。
int accept(int sock,struct sockaddr*addr,socklen_t*addrlen);
//成功返回创建的套接字文件描述符,失败返回-1
客户端请求连接
#include<sys/socket.h>
int connect(int sock,struct sockaddr *servaddr,socklen_t addrlen);
//成功返回0,失败返回-1
TCP
TCP是Transmission Control Protocol(传输控制协议)的简写,意为"对数据传输过程的控制"。
链路层负责在物理链接层面完成数据的传输。
IP层解决数据传输中的路径选择问题,只需照此路径传输数据。
TCP和UDP层以IP层提供的路径信息为基础完成实际的数据传输,故该层又称传输层(Transport)。
TCP可保证可靠的数据传输,它发送数据时以IP层为基础。
应用层,上述内容是套接字通信过程中自动处理,应用层给出的工具即为套接字。
TCP服务器端的默认函数调用顺序:
socket():创建套接字
bind():分配套接字地址
listen():等待连接请求状态
accept():允许连接
read()、write():数据交换
close():断开连接
TCP客户端的默认函数调用顺序
socket():创建套接字
connect():请求连接
read() write():交换数据
close():断开连接
基于TCP的服务器端/客户端函数调用关系
实例
必须退出一个客户端才能使用下一个客户端进行连接,即同一时刻服务器只为一个客户端服务。