Un socket permite que las aplicaciones se comuniquen a través de una red mediante el envío y recepción de datos. Existen dos tipos principales de sockets: los stream sockets que usan TCP y ofrecen una conexión fiable, y los datagram sockets que usan UDP. Los sockets TCP/IP están identificados por una dirección, protocolo (TCP o UDP) y número de puerto. En Java, los sockets orientados a conexión establecen un canal virtual entre cliente y servidor de forma fiable, con el cliente usando la clase Socket y el servidor usando ServerSocket.