项目开发中可能会用到Socket通信,在使用Socket时,根据需求来决定使用TCP还是UDP。
下面总结一些重要的区别。
一、数据大小
- TCP:传输数据无大小限制,可直接进行大数据量传输;
- UDP:传输数据限定在64K以下,超过64K需要分包发送。
二、缓冲区
-
TCP:对于TCP来说,Socket接收缓冲区可用空间大小限制了TCP通信的数据数据传输,如果缓冲区溢出,将会造成阻塞现象;如果接收端的速度远远大于发送端发送数据的速度,则会发生缓冲区溢出,write()阻塞现象。
-
UDP:对于UDP来说,当Socket接收缓冲区慢,发送端数据装不进缓冲区,数据包就会被丢弃。即会造成数据的丢失,但是不会因为缓冲区溢出造成阻塞问题。无拥塞控制。
三、使用场景
UDP
- 无连接
- 实时性要求很高,并且几乎不能容忍重传;
- 传输效率高的场合;
- 一定程序上允许传输错误和数据丢失;
- 支持一对一,一对多,多对多的交互通信;
TCP
- 建立连接,行程数据传输通道,每一条TCP连接是点对点。
- 可进行大数据传输
- 可靠的数据传输,数据不会丢失