Linux12-UDP\
一、UDP
1.特点:
尽最大努力交付,存在丢包的可能
无连接
面向数据报
机制简单,传输效率高
2.应用场景:
1.画面传输 VNC 直播:要求实时性高、允许数据丢失、
二、TCP
1.特点:
面向数据流(流式套接字)
建立连接
安全可靠的传输协议
三次握手:TCP建立连接时,需要进行三次握手,确保收发数据前,双方都已准备就绪
SYN:
ACK:
四次挥手:TCP断开连接时,需要进行四次挥手,从而确保通信双方都已收发数据结束。
2.编程
C/S模型:
客户端:
socket()//SOCK_STREAM流式套接字
connect()
send()
recv()
close()
ssize_t send(int sockfd, const void *buf, size_t len, int flags); |
功能: 发送数据 |
参数: sockfd:套接字文件描述符 buf:存放数据空间首地址 len:数据长度 flag:属性默认为0 |
返回值: 成功返回发送字节数 失败返回-1 |
ssize_t recv(int socket,void *buf,size_t len,int flags) |
功能:从tcp套接字接受数据 |
参数: len:期待接收到的字节数 |
返回值: 成功:实际收到的字节数 当发送端关闭时,返回时0 失败:-1 |
服务端:
socket()(监听套接字)
bind()
listen()(监听:要和服务端建立三次握手的客户端)
accept()(通信套接字、接收和服务端第一个完成三次握手的客户端,并产生一个通讯套接字)
recv()
send()
close()
int listen(int sockfd, int backlog); |
功能: 监听三次握手链接请求 |
参数: sockfd:套接字文件描述符 backlog:最多允许等待尚未处理的三次握手链接个数 |
返回值: 成功返回0 失败返回-1 |
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); |
功能: 处理三次握手等待队列中的第一个请求并建立一个用来通信的新套接字 |
参数: sockfd:套接字文件描述符 addr:存放发送端IP地址空间首地址 addrlen:想要接收的IP地址的长度 |
返回值: 成功返回新文件描述符 失败返回-1 |