2013-10-05 28 views
5

Zajmuję się tworzeniem aplikacji na Androida, gdzie szukam wszystkich rówieśników w zasięgu i potem łączę się z nimi wszystkimi, Urządzenie, które zainicjowało odkrycie, staje się właścicielem grupy, a wszystkie inne stają się klient, wykonałem wszystkie połączenia, ale teraz chcę, aby właściciel grupy wysłał wiadomość do wszystkich łączących się użytkowników, Jak to osiągnąć, a także proszę mi powiedzieć, jaka jest metodologia w komunikacji peer-to-peer, Czy p2p w Androidzie również używasz adresu IP do wysyłania i odbierania danych?Android Wi-Fi Direct Network

Dziękuję Pozdrawiam Talib.

+0

Czy odniosłeś sukces w swoich wysiłkach? Jeśli tak, proszę dać mi znać, mam ten sam problem i nie mogę znaleźć rozwiązania. Przewierciłem wszystkie możliwe dokumentacje, ale bez powodzenia :(:( –

Odpowiedz

10

Wi-Fi Direct/P2P można uznać za zwykły Wi-Fi, ale tam, gdzie właściciel grupy (GO) działa jako punkt dostępu do oprogramowania (serwer dhcp, zasilanie itp.). Aby odpowiedzieć na ostatnie pytanie, tak Wi-Fi Direct używa również adresu IP do wysyłania i odbierania danych.

Chcesz wysłać dane do wszystkich członków grupy? Istnieją dwa rozwiązania tego problemu:

  1. Prześlij wiadomość raz za pomocą multiemisji.
  2. Wyślij wiadomość do każdego klienta indywidualnego w grupie.

Najbardziej skuteczną metodą byłoby rozwiązanie 1, do transmisji danych za pomocą multiemisji, ponieważ wystarczy wysłać dane tylko raz. Niestety obsługa multiemisji Wi-Fi jest bardzo pofragmentowana w systemie Android, ponieważ wiele urządzeń blokuje ruch nie-unicastowy. Aby uzyskać więcej szczegółowych informacji, przejdź na tę stronę pod numer this article.

Rozwiązanie 2 to najlepsza metoda, jeśli chcesz zagwarantować obsługę wszystkich urządzeń i transmitować tylko niewielką ilość danych. System GO potrzebuje adresów IP klientów w grupie, ale ze względu na sposób implementacji Wi-Fi Direct w systemie Android tylko urządzenia GO IP są znane wszystkim urządzeniom. Jednym z rozwiązań jest umożliwienie klientom podłączyć do gniazdka w podróży, aby uzyskać ich adres IP:

kod Client

private static final int SERVER_PORT = 1030; 

... // on group join: 
wifiP2pManager.requestConnectionInfo(channel, new ConnectionInfoListener() { 
    @Override 
    public void onConnectionInfoAvailable(WifiP2pInfo p2pInfo) { 
     if (!p2pInfo.isGroupOwner) { 
      // Joined group as client - connect to GO 
      Socket socket = new Socket(); 
      socket.connect(new InetSocketAddress(p2pInfo.groupOwnerAddress, SERVER_PORT)); 
     } 
    } 
}); 

Grupa kod Właściciel:

private static final int SERVER_PORT = 1030; 
private ArrayList<InetAddress> clients = new ArrayList<InetAddress>(); 

public void startServer() { 
    clients.clear(); 
    ServerSocket serverSocket = new ServerSocket(SERVER_PORT); 

    // Collect client ip's 
    while(true) { 
     Socket clientSocket = serverSocket.accept(); 
     clients.add(clientSocket.getInetAddress()); 
     clientSocket.close(); 
    } 
} 

Teraz trzeba do to uruchom serwerocket na każdym kliencie i przejdź do iteracji poprzez listę klientów, tworząc połączenie z gniazdem i wysyłając wiadomość, którą chcesz nadać.

+0

pomysł jest dobry, ale implementacja nie działa w moim przypadku Nie można wysłać wiadomości do klienta od właściciela grupy Czy możesz pomóc @nikki ashton? –