Trabajé mucho en este problema y aquí están las respuestas que encontré:
- Respuesta 1.1 Hay muchas posibilidades y la correcta depende de lo que esté tratando de lograr. Puede encontrar las diversas posibilidades aquí:http://processors.wiki.ti.com/index.php/OMAP_Wireless_Connectivity_NLCP_WiFi_Direct_Configuration_Scripts
Quería Linux como GO y Android como cliente, así que lo que funcionó para mí en Linux es:
// Kill current supplicant and avoid its automatic recreation
system("mv /usr/share/dbus-1/system-services/fi.* .");
system("killall udhcpd");
system("wpa_cli -i wlan0 terminate -B");
usleep(300000);
// Start new supplicant
system("wpa_supplicant -Dnl80211 -iwlan0 -c /etc/p2p_supplicant.conf -B");
system("wpa_cli -iwlan0 p2p_group_add");
system("ifconfig p2p-wlan0-0 192.168.1.2");
// Connect with a peer
for (;;) {
system("wpa_cli -ip2p-wlan0-0 wps_pbc");
system("udhcpd /etc/udhcpd.conf");
// Here start your TCP server on a port
Server server([port]);
server.startServer();
}
nótese bien Para destruir la conexión P2P y reiniciar la normal, uso este script:
#!/bin/bash
wpa_cli -i wlan0 terminate -B
wpa_cli -i p2p-wlan0-0 terminate -B
cp ./fi.* /usr/share/dbus-1/system-services/
service network-manager restart
Aquí el servidor escucha una conexión y el cliente de Android se conecta a él. Usé un servidor TCP muy fácil que se encuentra en el primer sitio web y funcionó de maravilla. Es importante iniciar el udhcpd o no obtendrá el ícono "conectado" en Android. Para el lado de Android, seguí lo que vi en http://developer.android.com/training/connect-devices-wireless/wifi-direct.html y funcionó perfectamente.
-
Respuesta 1.2 Desde wpa_cli puede obtener muchas advertencias y errores diferentes. Vi que simplemente llamar a la función (como hice en el fragmento anterior) hizo que todo funcionara a pesar de las advertencias. Los ignoré.
-
Respuesta 1.3 La conexión usando PIN funciona, cuando lo intenté no estaba iniciando el udhcpd y eso colapsaba mi conexión cada vez. No fue por PIN o PBC.
-
Respuesta 2.1 Tanto el servidor como el cliente están cambiando de interfaz. Es un comportamiento muy similar al que suele hacer con los sockets. Creas un socket de escucha, alguien se conecta, creas un nuevo socket para manejar ese cliente en un hilo separado mientras el socket de escucha todavía está allí, esperando a otros usuarios. Haces lo mismo con las interfaces. Iniciar un wpa_cli que monitorea la interfaz wlan0 y uno que monitorea la interfaz p2p-wlan0-0 da una buena idea de lo que sucede durante el cambio.
-
Respuesta 2.2 El cliente "fue" a la otra interfaz y ahora está listo para recibir una IP. ¡Inicie los servidores DHCP y TCP!
-
Respuesta 2.3 No use IP estática. Solo para el servidor está bien, el cliente debe usar una IP DHCP. Tal vez haya una forma de manejar IP estáticas, pero no fue útil para mis objetivos.
-
Respuesta 2.4 Listo. Ese fue el problema todo el tiempo
-
Respuesta 1.4 Esto funciona perfectamente incluso con Android/linux.
Lo siento si cometí algún error en mi respuesta, todavía no entiendo la imagen completa de las conexiones WiFi-Direct, simplemente espero que esto pueda ayudar a alguien más.
(Puede que no sea una respuesta completa, pero sí la dirección correcta)
El problema está en el lado de Linux. Estoy encontrando problemas similares entre un Cyanogenmod (Android 5) y Fedora 22, intentando usar Wifi Direct (Wifi P2P) para el software de visualización inalámbrica de Intel para el sistema operativo Linux (WDS).
Específicamente, el estafador de Intel divergió (escrito desde cero) en 2009 de lo que había sido estándar en Linux, NetworkManager. Connman parece ser la única implementación de Wifi Direct (Wifi P2P) para Linux, y fue escrito para el mercado integrado (móvil).
Debido a un problema de RPM, connman sigue sin probarse en mi sistema, pero el software debería proporcionar las comunicaciones dbus que necesita Linux.
Sitio web:https://01.org/connman