Um servidor, por natureza, é multi-cliente. Quando você escreve o lado servidor da aplicação, você deve abrir um socket para escutar requisições de cliente. É a famosa porta TCP. Quando um cliente pede para estabelecer uma comunicação, uma nova porta é aberta para realizar a comunicação de fato, liberando a porta original para atender novas requisições. A sua aplicação pode limitar o número de clientes atendidos, mas o número de conexões pode (e geralmente é) por outros mecanismos como o SO, firewall, etc.
Uma comunicação cliente-cliente é, na verdade uma comunicação cliente-servidor de 2 vias. Ou seja, um cliente desse tipo pode tanto pedir por conexões quanto ouvir por pedidos de comunicação. Em termos de socket, cada um deve ter um server socket e um client socket. Não é possível estabelecer uma conexão entre dois sockets clientes.
A informação sobre quais clientes estão conectados devem ser centralizadas no servidor.
Agora, é fato que desenvolver uma aplicação de rede conhecendo apenas a API de sockets é muito difícil. A API é apenas um facilitador para implementar esse tipo de aplicação. Você precisa conhecer muito bem protocolos de rede, pelo menos protocolos de aplicação, transporte e rede, para que você tome decisões de projeto corretas.