¿Cuál es la diferencia entre flujos y datagramas en la programación de red?

¿Cuál es la diferencia entre sockets (stream) vs sockets (datagramas)? ¿Por qué usar uno sobre el