datagram

Jaka jest różnica między strumieniami a datagramami w programowaniu sieciowym?

Jaka jest różnica między gniazdami (strumieniem) a gniazdami (datagramami)? Po co używać jednego nad drugim?