Red inalámbrica Wi-Fi de Android
Estoy desarrollando una aplicación en Android donde estoy buscando todos los compañeros de la gama y luego me conecto con todos ellos, El dispositivo que inició el descubrimiento se convierte en el propietario del grupo y todos los demás se convierten en cliente, he hecho todo lo que la conexión Pero ahora quiero que el propietario del grupo para enviar el mensaje a todos los compañeros de conexión, ¿Cómo lograr esto y también por favor dime cuál es la metodología en la comunicación peer-to-peer, p2p en Android también utilizar IP para enviar y recibir ¿datos?
Gracias Recuerdos Talib.
- ¿Qué es diferente de NSD y WifiP2pManager?
- ¿Existe un equivalente de Wi-Fi Direct / Wi-Fi P2P para Phonegap / Cordova?
- Android Wifi Direct: Evitar la aceptación por parte del usuario cuando se conecta a un conocido par
- Wifi-Direct siempre se desconecta después de treinta minutos
- ¿Por qué Android Wi-Fi Direct solo devuelve un servicio a la vez con discoverServices?
- Cómo encontrar el nombre de archivo de un archivo que se transfiere a través de wifi modo directo en Android?
- Obtenga la dirección IP de la interfaz de red de Android
- Descubrimiento del servicio directo Wifi de Android
- Cómo imprimir un archivo de texto con WiFi Direct
- El estado de WifiP2pDevice permanece en INVITADO después de la invitación directa de Wifi
- IOS 7 Multipeer Connectivity es compatible con Android Wi-Fi Direct?
- Conecta Raspberry con Android a través de servicios Wifi Direct (p2p)
- Cómo obtener la dirección IP directa de WiFi de mi dispositivo
Wi-Fi Direct / P2P puede considerarse Wi-Fi normal, pero donde el propietario del grupo (GO) actúa como un punto de acceso de software (servidor dhcp, aprovisionamiento, etc.). Así que para responder a su última pregunta, sí Wi-Fi Direct también utiliza IP para enviar y recibir datos.
¿Quieres enviar datos a todos los miembros del grupo? Hay dos soluciones para esto:
- Transmita el mensaje una vez usando multicast.
- Envíe el mensaje a cada cliente individual del grupo.
El método más eficiente sería la solución 1, para difundir los datos mediante la multidifusión, ya que sólo tendría que enviar los datos una vez. Desafortunadamente, el soporte de multidifusión Wi-Fi está muy fragmentado en Android, ya que muchos dispositivos parecen bloquear el tráfico no unicast. Consulte este artículo para obtener más información en profundidad si desea ir por esta ruta.
La solución 2 es el mejor método si desea garantizar el soporte en todos los dispositivos y transmitir sólo una pequeña cantidad de datos. El GO necesita las direcciones IP de los clientes del grupo, pero debido a la forma en que Wi-Fi Direct está implementado en Android, sólo el GO IP es conocido por todos los dispositivos. Una solución es dejar que los clientes se conecten a un socket en el GO, para obtener su dirección IP:
Codigo del 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)); } } });
Código del propietario del grupo:
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(); } }
Ahora todo lo que necesita hacer es iniciar un serversocket en cada cliente, y hacer que iterate a través de la lista de clientes creando una conexión de socket a cada uno y enviando el mensaje que desea transmitir.
- ¿Cómo podemos hacer el diseño de la tabla para desplazarse en ambos sentidos (horizontal, verticalmente)
- Cómo agregar elementos a un stringArray en un arrayList mediante programación?