Как я могу обрабатывать несколько клиентов, подключенных к серверу с помощью сокетов?
У меня есть приложение для 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-адрес каждого телефона.
Мой второй вопрос: после того, как я установил соединение с несколькими клиентами / партнерами, как бы я тогда правильно отправлял и получал им инструкции? В настоящее время мой единственный сервер ожидает инструкции и, получив ее, выдает инструкцию ответа. Мне нужно, чтобы сервер мог отправлять инструкции с самого начала, используя нажатия кнопок, и результат этого виден на клиентских устройствах.
Надеюсь, я все прояснил!