Qual é a diferença entre fluxos e datagramas na programação de rede?

Qual é a diferença entre soquetes (fluxo) vs soquetes (datagramas)? Por que usar um sobre o