Come funzionano i socket TCP in Java?

Quale è la differenza tra le classi ServerSocket e Socket in Java?

Cosa sono ed a cosa servono gli stream?

Cosa significa che gli stream vengono usati tipicamente come wrapper di altri stream?

Quali sono i metodi più importanti (e cosa fanno) di InputStream e di OutputStream?

Perché di solito i programmatori non usano InputStream o OutputStream direttamente?

Come si fa a usare gli stream che sono associati ad un socket?

Quali sono i metodi offerti da ObjectInputStream (e ObjectOutputStream) per leggere (scrivere) un oggetto dallo (sullo) stream?