Jak mogę obsługiwać wielu klientów podłączonych do serwera za pomocą gniazd?

Mam aplikację na Androida, która musi umożliwiać połączenie wielu urządzeń. Jedno urządzenie powinno działać jako właściciel grupy i wydawać instrukcje wszystkim klientom, aby wykonywali określone czynności. Przypuszczam, że jest to porównywalne z bezprzewodową grą podręczną, w której jeden gracz jest gospodarzem.

Mam kilka pytań, więc postaram się je zwięźle przedstawić. Pomogłaby nawet odpowiedź na pierwsze.

Po pierwsze, udało mi się sparować pojedynczy serwer i pojedynczy telefon klienta za pomocą gniazd. Zrobiłem to za pomocą technologii Wi-Fi Direct systemu Android (Opisano tutaj). Samouczek jest pomocny, ale niestety niezbyt dokładny, szczególnie przy opisywaniu połączeń jeden-do-wielu. Po znalezieniu listy równorzędnej można otworzyć połączenia gniazd. Udało mi się połączyć dwa urządzenia za pomocą wątku dla serwera (Korzystając z tego przykładu), tak:

public class ServerThread implements Runnable {

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

Klient jest tworzony po naciśnięciu przycisku (myślę, że nadal próbuję obalić mój zmodyfikowany kod):

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

Przypuszczam więc, że moje pierwsze pytanie brzmi: w jaki sposób pozwoliłbym na połączenie większej liczby klientów? Moja ServerThread odnosi się do pojedynczej zmiennej klienta powyżej, więc nie widzę, jak pozwoliłbym na różną liczbę (moja aplikacja ma na celu od 2 do 10 użytkowników), ani nie znam właściwego sposobu na rozróżnienie wszystkich moich różnych klientów. Domyślam się, że użyłbym unikalnego adresu IP każdego telefonu.

Moje drugie pytanie brzmi: jak ustanowię połączenie z wieloma klientami / peerami, w jaki sposób mogę prawidłowo wysyłać i odbierać instrukcje do nich? Obecnie mój pojedynczy serwer oczekuje na instrukcję i po jej otrzymaniu wydaje instrukcję odpowiedzi. Potrzebuję go, aby serwer mógł wysyłać instrukcje od początku za pomocą naciśnięć przycisków, a ich wynik jest widoczny na urządzeniach klienckich.

Mam nadzieję, że wszystko wyjaśniłem!

questionAnswers(2)

yourAnswerToTheQuestion