TCP是TCP/IP协议族中一个比较重要的协议,这是一种可靠、建立链接、面向字节流的传输,工作在传输层。和TCP相对的不可靠、无链接、面向数据报的协议UDP,了解UDP客户端与服务器之间通信请戳UDP协议实现的服务器与客户端通信
TCP协议建立连接
首先我们通过一个大概的图来了解。
建立连接首先必须是服务器启动,这没什么好说的,服务器为被动方,客户端为主动方,当客户端发起请求建立连接,服务器被动接受,经过上图三次握手建立连接,注意这三次连接都是在操作系统内部实现的。
那么我们就来介绍建立连接的相关API
socket获取通信的文件描述符。
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
端口号的绑定
#include <sys/socket.h>
int bind(int sock, const struct sockaddr* address, socklen_t address_len);
这俩个API在UDP协议实现的服务器与客户端通信中有详细的参数返回值介绍。
作为服务器首先要进行监听
#include <sys/socket.h>
int listen(int socket, int backog);
参数介绍:
socket: 为socket函数返回的文件描述符
backlog: 建立连接过程中等待建立的请求个数
返回值:
成功返回0,失败返回-1;
这里我们再介绍这个backlog参数的含义:
这就相当与我们去银行取钱,到了发现人比较多,这个时候就需要坐在凳子上等,那么这里的凳子就是backlog的含义,就是现在最大的等待处理的个数。
接受请求:
#include <sys.socket.h>
int accept(int socket, struct sockaddr* address, socklen_t* address_len);
参数:
socket:文件描述符
address:输出型参数,用来接受对方的IP 端口号,是一个结构体。
address_len:是一个输入输出型参数,输入进去为当前address的大小,输出为实际的大小。
返回值:
返回值成功为一个文件描述符,失败为-1;
这里要解释一下,socket不是已经创建出一个文件描述符,怎么还有?
accept的文件描述符,使用来直接进行数据的发送与收取,