Как я могу обрабатывать несколько клиентов, подключенных к серверу с помощью сокетов?

У меня есть приложение для Android, которое позволяет подключать несколько устройств. Одно устройство должно выступать в качестве владельца группы и выдавать инструкции всем клиентам для выполнения определенных действий. Я предполагаю, что это сравнимо с беспроводной портативной игрой, где один игрок - хозяин.

У меня есть пара вопросов, поэтому я постараюсь сделать их краткими. Даже ответ только на первый поможет.

Во-первых, я успешно соединил один сервер и один клиентский телефон с помощью сокетов. Я сделал это с помощью технологии Android Wi-Fi Direct (Описано здесь). Учебное пособие полезно, но, к сожалению, не очень тщательно, особенно в описании связей «один ко многим». Как только список пиров найден, соединения сокетов могут быть открыты. Мне удалось соединить два устройства, используя поток для сервера (Используя этот пример), вот так:

public class ServerThread implements Runnable {

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

Клиент создается после нажатия кнопки (я думаю, все еще пытаюсь разобраться с моим измененным кодом):

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.)
}

Итак, я предполагаю, что мой первый вопрос: как бы я разрешил подключать больше клиентов? Мой ServerThread ссылается на одну клиентскую переменную, указанную выше, поэтому я не вижу, как я позволил бы варьировать число (мое приложение рассчитано на что-то от 2 до 10 пользователей), и при этом я не знаю, как правильно различать все мои разные клиенты. Мое единственное предположение, что я буду использовать уникальный IP-адрес каждого телефона.

Мой второй вопрос: после того, как я установил соединение с несколькими клиентами / партнерами, как бы я тогда правильно отправлял и получал им инструкции? В настоящее время мой единственный сервер ожидает инструкции и, получив ее, выдает инструкцию ответа. Мне нужно, чтобы сервер мог отправлять инструкции с самого начала, используя нажатия кнопок, и результат этого виден на клиентских устройствах.

Надеюсь, я все прояснил!

Ответы на вопрос(2)

Ваш ответ на вопрос