通信流程:
服务端
1.创建套接字
2.绑定地址信息
3.开始监听
4.获取新的socket
5.接受数据
6.发送数据
7.关闭套接字
客户端
1.创建socket
2.向服务端发起连接请求
3.发送数据
4.接受数据
5.关闭套接字
接口
创建套接字
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
第一个参数是地址域(IPV4地址)
第二个参数是套接字类型(流式套接字)
第三个参数是是协议类型(TCP协议)
绑定地址
bind(sockfd, &srv_addr, len)
第一个参数是套接字描述符
第二个参数是服务端的地址信息
第三个参数是地址信息长度
服务端开始监听
listen(sockfd, backlog)
第一个参数是套接字描述符
第二个参数是最大并发连接数(已完成队列最大节点数),即同一时间允许连接的最大客户端数
客户端发起连接请求
connect(sockfd, &srv_addr, len)
第一个参数是套接字描述符
第二个参数是要连接的服务端的地址信息
第三个参数是地址信息的长度
服务端获取新的socket
accept(sockfd, &cli_addr, &len)
第一个参数是套接字描述符
第二个参数是客户端的地址信息(为空代表不接受客户端地址信息)
第三个参数是地址信息长度
返回值:为该客户端新建的socket描述符
发送数据
send(sockfd, buf, len, flags)
第一个参数是套接字文件描述符
第二个参数是要发送的数据放在哪
第三个参数是要发送数据的长度
第四个参数0表示阻塞发送
返回值:实际发送的字节数
接受数据
recv(sockfd, buf, len, flags)
第一个参数是套接字描述符
第二个参数是接受的数据放在哪
第三个参数是想接受的数据的字节数
第四个参数
0:阻塞接受
MSG_PEEK:获取数据,但是不从缓冲区中移除(即探测性接收)
返回值
>0:实际接收的数据字节数个数
==0:表示连接