自律linux 第 32 天

今天学会了使用UDP在进程之间发送图片,当读取图片数据后,使用sendto发送给目标进程,然后目标进程使用recvfrom接收数据之后,放进新的文件中,当这个过程结束之后,当退出发送端时,接收端并不会跟着退出,因为就算没有发送端,recvfrom也不会返回0,还是会一直等待,如果想让接收端也退出,需要在发送端首先将要发送数据的总字节数传过去,然后接收端设置一整数类型变量,每读一次数据该变量也对应增加,直到该变量与总字节数相等,就说明数据传完了,就让接收端也退出。

但是UDP协议有一些缺点,比如容易丢包,就算没有接收端,发送端也能发送,还有发送端的数据会先进入缓存区,然后从缓存区传入接收端,发送端的数据才能进入缓冲区,在这个过程中,如果发送数据过快,就会有很多数据丢失,丢包率就会比较严重。不安全,不可靠,所以我们有学习了TCP协议。

UDP是可以一对多的协议,谁都可以给服务端发,而TCP协议是一对一的传输协议,同一时刻只有一个客户端能给服务端发送消息。但是TCP是使用网络链接的,面向字节流,如果前面的数据没送到,后面的数据就会卡在他后面,不会丢包。TCP中,客户端在发送数据之前要使用connect和服务端发送三次握手,服务端使用listen监听有哪些想要和服务端握手的客户端,然后使用accept和客户端建立联系,并返回一个用于和该客户端通信的文件描述符,然后就可以使用send和recv接收发送信息了,这个recv和UDP使用的recvfrom不同,当发送端结束之后,recv会返回0值,然后就可以直接退出,不用传入数据的总字节数。当程序收发都关闭之后,就使用close关闭文件描述符。

你可能感兴趣的:(linux,运维)