私はこの問題にかなり取り組みましたが、ここに私が見つけた答えがあります:
- Answer 1.1 多くの可能性があり、正しいものは何を達成しようとしているかによって異なります。さまざまな可能性をここで見つけることができます:http://processors.wiki.ti.com/index.php/OMAP_Wireless_Connectivity_NLCP_WiFi_Direct_Configuration_Scripts
Linux を GO として、Android をクライアントとして欲しかったので、Linux でうまくいったのは次のとおりです。
// 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.B. P2P 接続を破棄して通常の接続を再開するには、次のスクリプトを使用します:
#!/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
ここでは、サーバーが接続をリッスンし、Android クライアントがそれに接続します。最初の Web サイトで見つけた非常に簡単な TCP サーバーを使用しましたが、魅力的に機能しました。udhcpd を開始することが重要です。そうしないと、Android で「接続済み」アイコンが表示されません。Android 側については、私が見たものに従いましたhttp://developer.android.com/training/connect-devices-wireless/wifi-direct.html で問題なく動作しました。
-
回答 1.2 wpa_cli からは、さまざまな警告やエラーが表示されます。関数を呼び出すだけで (前のスニペットで行ったように)、警告にもかかわらずすべてが機能することがわかりました。私はそれらを無視しました。
-
回答 1.3 PIN を使用した接続は機能します。試してみると、udhcpd が開始されず、毎回接続がクラッシュしました。 PIN や PBC によるものではありません。
-
回答 2.1 サーバーとクライアントの両方がインターフェイスを切り替えています。これは、通常ソケットで行う動作と非常によく似ています。リスニングソケットを作成し、誰かが接続し、リスニングソケットがまだそこにあり、他のユーザーを待っている間、別のスレッドでそのクライアントを処理する新しいソケットを作成します。インターフェイスでも同じことを行います. wlan0 インターフェースを監視する wpa_cli と p2p-wlan0-0 インターフェースを監視する wpa_cli を開始すると、変更中に何が起こっているかを把握できます。
-
回答 2.2 クライアントは他のインターフェイスに「行き」、IP を受け取る準備ができました。 DHCP と TCP サーバーを起動してください!
-
回答 2.3 静的 IP を使用しないでください。サーバーのみで問題ありません。クライアントは DHCP IP を使用する必要があります。静的 IP を処理する方法があるかもしれませんが、それは私の目的には役に立ちませんでした.
-
回答 2.4 完了しました。それがずっと問題だった
-
回答 1.4 Android/Linux でも問題なく動作します。
答えに間違いがあった場合は申し訳ありませんが、WiFi-Direct 接続の全体像をまだ把握できていません。これが他の人の助けになることを願っています。
(完全な答えではないかもしれませんが、正しい方向です)
問題は Linux 側にあります。 Cyanogenmod (Android 5) と Fedora 22 の間で同様の問題が発生し、Intel の Linux OS (WDS) 用ワイヤレス ディスプレイ ソフトウェアに Wifi Direct (Wifi P2P) を使用しようとしています。
具体的には、Intel の connman は、Linux の標準であった NetworkManager から 2009 年に分岐 (ゼロから作成) されました。 Connman は、Linux 用の Wifi Direct (Wifi P2P) の唯一の実装であるようで、組み込み (モバイル) 市場向けに作成されました。
RPM の問題により、connman は私のシステムではテストされていませんが、ソフトウェアは Linux が必要とする dbus 通信を提供するはずです。
ウェブサイト:https://01.org/connman