¿Cómo puedo manejar múltiples clientes conectados a un servidor usando sockets?

Tengo una aplicación para Android que necesita permitir que se conecten varios dispositivos. Un dispositivo debe actuar como el propietario del grupo y emitir instrucciones a todos los clientes para hacer cosas específicas. Supongo que es comparable a un juego de mano inalámbrico donde un jugador es el anfitrión.

Tengo un par de preguntas, así que trataré de mantenerlas concisas. Incluso una respuesta a la primera ayuda.

Primero, he emparejado con éxito un solo servidor y un solo teléfono cliente usando sockets. Hice esto usando la tecnología Wi-Fi Direct de Android (Descrito aquí). El tutorial es útil, pero desafortunadamente no es muy completo, especialmente al describir conexiones de uno a muchos. Una vez que se encuentra una lista de pares, se pueden abrir las conexiones de socket. Pude conectar dos dispositivos usando un hilo para el servidor (Usando este ejemplo), al igual que:

public class ServerThread implements Runnable {

        public void run() {
             (Code...)
             client = serverSocket.accept();
             (...other code here.)
        }
}

Se crea un cliente después de presionar un botón (creo, aún tratando de entender mi código modificado):

public class MusicClientThread implements Runnable {
     Socket socket = new Socket(serverAddr, port);
     while (connected) {
          //(Other code here.)
          while ((line = in.readLine()) != null) {
          //While there are still messages coming
          }
     }
     socket.close();
     //(Other code here too.)
}

Así que supongo que mi primera pregunta es: ¿Cómo permitiría que se conecten más clientes? Mi ServerThread se refiere a una única variable de cliente arriba, así que no veo cómo permitiría un número variable (mi aplicación apunta a algo de 2 a 10 usuarios) ni sé la forma correcta de diferenciar entre todos mis diferentes clientes. Mi única suposición es que usaría la dirección IP única de cada teléfono.

Mi segunda pregunta es, una vez que establezca una conexión con varios clientes / compañeros, ¿cómo les enviaré y recibiré las instrucciones correctamente? Actualmente mi único servidor espera una instrucción, y al recibirla, emite una instrucción de respuesta. Lo necesito para que el servidor pueda enviar instrucciones desde el inicio, al presionar los botones, y el resultado de estos es visible en los dispositivos cliente.

Espero haberte dejado todo claro!

Respuestas a la pregunta(2)

Su respuesta a la pregunta