TCP : 传输控制协议 传输层
流式套接字
1. TCP特点:
1.面向连接
2.安全、可靠
3.面向数据流
4.机制复杂、占用资源开销大
三次握手:
指建立tcp连接时,需要客户端和服务端总共发送三次报文确认连接。
四次挥手:
断开一个tcp连接,需要客户端和服务端发送四个报文以确认断开。
2. 编程模型
client: socket--->connect--->send/write--->close
server: socket--->bind--->listen--->accept---> recv/read--->close
3. 函数接口:
1.socket
socket(AF_INET, SOCK_STREAM, 0);
2.connect
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
功能:
发送三次握手链接请求
参数:
sockfd:套接字文件描述符
addr:存放目的地址空间首地址
addrlen:目的地址长度
返回值:
成功返回0
失败返回-1
3.send
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:
发送数据
参数:
sockfd:套接字文件描述符
buf:存放数据空间首地址
len:数据长度
flag:属性默认为0
返回值:
成功返回发送字节数
失败返回-1
4.recv
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:
接收数据
参数:
sockfd:套接字文件描述符
buf:存放数据空间首地址
len:最多接收数据长度
flags:接收属性默认为0
返回值:
成功返回实际接收字节数
失败返回-1
连接断开返回0
5.bind
int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
6.listen
int listen(int sockfd, int backlog);
功能:
监听三次握手链接请求
参数:
sockfd:套接字文件描述符
backlog:最多允许等待尚未处理的三次握手链接个数
返回值:
成功返回0
失败返回-1
10.accept
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:
处理三次握手等待队列中的第一个请求并建立一个用来通信的新套接字
参数:
sockfd:套接字文件描述符
addr:存放发送端IP地址空间首地址
addrlen:想要接收的IP地址的长度
返回值:
成功返回新文件描述符
失败返回-1