Ich habe viel an diesem Problem gearbeitet und hier sind die Antworten, die ich gefunden habe:
- Antwort 1.1 Es gibt viele Möglichkeiten und die richtige hängt davon ab, was Sie erreichen möchten. Sie finden die verschiedenen Möglichkeiten hier:http://processors.wiki.ti.com/index.php/OMAP_Wireless_Connectivity_NLCP_WiFi_Direct_Configuration_Scripts
Ich wollte Linux als GO und Android als Client, also hat bei Linux folgendes für mich funktioniert:
// 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();
}
Hinweis:Um die P2P-Verbindung zu zerstören und die normale neu zu starten, verwende ich dieses Skript:
#!/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
Hier wartet der Server auf eine Verbindung und der Android-Client stellt eine Verbindung her. Ich habe einen sehr einfachen TCP-Server verwendet, der auf der ersten Website zu finden ist, und er hat wie ein Zauber funktioniert. Es ist wichtig, den udhcpd zu starten, sonst wird das Symbol "verbunden" in Android nicht angezeigt. Für die Android-Seite bin ich dem gefolgt, was ich gesehen habe http://developer.android.com/training/connect-devices-wireless/wifi-direct.html und es hat perfekt funktioniert.
-
Antwort 1.2 Von wpa_cli können Sie viele verschiedene Warnungen und Fehler erhalten. Ich habe gesehen, dass das einfache Aufrufen der Funktion (wie ich es im vorherigen Snippet getan habe) trotz der Warnungen alles funktioniert hat. Ich habe sie ignoriert.
-
Antwort 1.3 Die Verbindung mit PIN funktioniert, als ich es versuchte, startete ich den udhcpd nicht und das stürzte jedes Mal meine Verbindung ab. Es lag nicht an PIN oder PBC.
-
Antwort 2.1 Sowohl der Server als auch der Client wechseln die Schnittstelle. Es ist ein sehr ähnliches Verhalten wie bei Sockets. Sie erstellen einen lauschenden Socket, jemand stellt eine Verbindung her, Sie erstellen einen neuen Socket, um diesen Client in einem separaten Thread zu handhaben, während der lauschende Socket noch da ist und auf andere Benutzer wartet. Das gleiche machen Sie mit Schnittstellen. Das Starten eines wpa_cli, das die wlan0-Schnittstelle überwacht, und eines, das die p2p-wlan0-0-Schnittstelle überwacht, gibt eine gute Vorstellung davon, was während der Änderung passiert.
-
Antwort 2.2 Der Client ist auf die andere Schnittstelle „gegangen“ und ist nun bereit, eine IP zu empfangen. Starten Sie die DHCP- und TCP-Server!
-
Antwort 2.3 Verwenden Sie keine statische IP. Nur für den Server ist ok, der Client sollte eine DHCP IP verwenden. Vielleicht gibt es eine Möglichkeit, mit statischen IPs umzugehen, aber es war für meine Ziele nicht nützlich.
-
Antwort 2.4 Fertig. Das war die ganze Zeit das Problem
-
Antwort 1.4 Das funktioniert auch mit Android/Linux einwandfrei.
Tut mir leid, wenn ich in meiner Antwort einen Fehler gemacht habe, ich verstehe immer noch nicht das ganze Bild von WiFi-Direct-Verbindungen, ich hoffe einfach, dass dies jemand anderem helfen kann.
(Möglicherweise keine vollständige Antwort, aber die richtige Richtung)
Das Problem liegt auf der Linux-Seite. Ich stoße auf ähnliche Probleme zwischen einem Cyanogenmod (Android 5) und Fedora 22, wenn ich versuche, Wifi Direct (Wifi P2P) für Intels Wireless Display Software für Linux OS (WDS) zu verwenden.
Insbesondere Intels Connman wich (von Grund auf neu geschrieben) im Jahr 2009 von dem ab, was in Linux Standard war, NetworkManager. Connman scheint die einzige Implementierung von Wifi Direct (Wifi P2P) für Linux zu sein und wurde für den eingebetteten (mobilen) Markt geschrieben.
Aufgrund eines RPM-Problems bleibt connman auf meinem System ungetestet, aber die Software sollte die Dbus-Kommunikation bereitstellen, die Linux benötigt.
Website:https://01.org/connman