2013-10-05 22 views
5

Sto sviluppando un'applicazione su Android dove sto cercando tutti i peer della gamma e successivamente mi collego con tutti, Il dispositivo che ha avviato la scoperta diventa il proprietario del gruppo e tutti gli altri diventano cliente, ho fatto tutto il collegamento ma ora voglio che il proprietario del gruppo invii il messaggio a tutti i colleghi di collegamento, come ottenere ciò e per favore dimmi qual è la metodologia nella comunicazione peer-to-peer, fa p2p in Android utilizzare anche l'IP per inviare e ricevere dati?Rete Wi-Fi Android Android

Thankyou Saluti Talib.

+0

hai avuto successo nei tuoi sforzi? Se sì, per favore fatemelo sapere, sto affrontando lo stesso problema e non riesco a ottenere una soluzione. Ho analizzato tutte le possibili documentazioni ma non ha avuto successo :(:( –

risposta

10

Wi-Fi Direct/P2P può essere considerato normale Wi-Fi ma il proprietario del gruppo (GO) funge da punto di accesso software (server DHCP, provisioning, ecc.). Quindi per rispondere alla tua ultima domanda, sì, Wi-Fi Direct usa anche l'IP per inviare e ricevere dati.

Si desidera inviare dati a tutti i membri del gruppo? Esistono due soluzioni:

  1. Trasmettere il messaggio una volta tramite multicast.
  2. Inviare il messaggio a ciascun singolo cliente del gruppo.

Il metodo più efficiente sarebbe la soluzione 1, per trasmettere i dati tramite multicast, in quanto sarebbe necessario inviare i dati solo una volta. Sfortunatamente il supporto multicast Wi-Fi è molto frammentato in Android, in quanto molti dispositivi sembrano bloccare il traffico non unicast. Vedere this article per ulteriori informazioni approfondite se si desidera percorrere questa rotta.

Soluzione 2 è il metodo migliore se si desidera garantire il supporto su tutti i dispositivi e trasmettere solo una piccola quantità di dati. GO richiede gli indirizzi IP dei client nel gruppo, ma a causa del modo in cui Wi-Fi Direct è implementato in Android, solo l'IP GO è noto a tutti i dispositivi. Una soluzione è quella di lasciare che i client si connettono ad una presa in movimento, per ottenere il loro indirizzo IP:

Codice cliente

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

Gruppo code Proprietario:

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(); 
    } 
} 

Ora tutto è necessario do è avviare un serverocket su ciascun client e fare su GO iterate attraverso l'elenco dei client creando una connessione socket a ciascuno e inviando il messaggio che si desidera trasmettere.

+0

l'idea è buona, ma l'implementazione non funziona nel mio caso. Impossibile inviare un messaggio al cliente dal proprietario del gruppo. Puoi aiutare @nikki ashton? –

Problemi correlati