実際のAndroid Wi-Fi Directアプリケーションの展開では、20台のデバイスで問題になることはありません。
理論的には、GOがAndroidデバイスであるWi-Fi P2Pグループの最大デバイス数は254です。グループ所有者にはIP、192.168.49.1が割り当てられています。クライアントには、192.168.49.2〜192.168.49.254の範囲のIPが割り当てられます。
グループ所有者アドレスは、次WifiP2pServiceImpl.java
中で定義される。
WifiP2pServiceImpl.java
において、startDhcpServer(String intf)
方法は、DHCPサーバを起動します。次のようにクライアントの範囲を決定
/* Is chosen as a unique address to avoid conflict with
the ranges defined in Tethering.java */
private static final String SERVER_ADDRESS = "192.168.49.1";
が行われ与えられたインターフェース - 驚きではありません。このメソッドは、グループが開始され、そのデバイスがグループ所有者であるときに呼び出されます。
このコードを詳しく見てみると、InterfaceConfigurationオブジェクトのリンクアドレスは192.168.49.1に設定され、プレフィックスの長さは24(プレフィックスの長さはサブネットマスクに設定されたビットの数です。ここでは255.255.255.0に相当) - これは答えを意味しますが、少し詳しく調べることができます。
ifcg = mNwService.getInterfaceConfig(intf);
ifcg.setLinkAddress(new LinkAddress(NetworkUtils.numericToInetAddress(
SERVER_ADDRESS), 24));
ifcg.setInterfaceUp();
mNwService.setInterfaceConfig(intf, ifcg);
次に、次のコマンド文字列[]、tetheringDhcpRanges
によって指定されたDHCP範囲と係留再起動します。 mNwService(Network Management Service)メソッドの呼び出しは、適切なnetdコマンドを実行します。
ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(
Context.CONNECTIVITY_SERVICE);
String[] tetheringDhcpRanges = cm.getTetheredDhcpRanges();
if (mNwService.isTetheringStarted()) {
if (DBG) logd("Stop existing tethering and restart it");
mNwService.stopTethering();
}
mNwService.tetherInterface(intf);
mNwService.startTethering(tetheringDhcpRanges);
そしてcm.getTetheredDhcpRanges()
最終的に下記(ConnectivityManager.getTetheredDhcpRanges() - > ConnectivityService.getTetheredDhcpRanges() - > Tethering.getTetheredDhcpRanges())への参照である:
// USB is 192.168.42.1 and 255.255.255.0
// Wifi is 192.168.43.1 and 255.255.255.0
// BT is limited to max default of 5 connections. 192.168.44.1 to 192.168.48.1
// with 255.255.255.0
// P2P is 192.168.49.1 and 255.255.255.0
private String[] mDhcpRange;
private static final String[] DHCP_DEFAULT_RANGE = {
"192.168.42.2", "192.168.42.254", "192.168.43.2", "192.168.43.254",
"192.168.44.2", "192.168.44.254", "192.168.45.2", "192.168.45.254",
"192.168.46.2", "192.168.46.254", "192.168.47.2", "192.168.47.254",
"192.168.48.2", "192.168.48.254", "192.168.49.2", "192.168.49.254",
}
と:
mDhcpRange = context.getResources().getStringArray(
com.android.internal.R.array.config_tether_dhcp_range);
if ((mDhcpRange.length == 0) || (mDhcpRange.length % 2 ==1)) {
mDhcpRange = DHCP_DEFAULT_RANGE;
}
com.android.server.connectivity.Tethering
。
もちろん、デバイスメーカーがこのコードを変更することは可能ですので、これも検討する価値があります。
ユーザーが多い場所にアプリケーションを展開する予定の場合は、複数のデバイスをGOにするメカニズムが必要です。デバイス間でデータを同期させる必要がある場合は、「チャーン」をシミュレートしてGOをある期間GOにしてから、別のGOへのクライアントになり、データを同期させることができます。
どのように2つのAndroid搭載端末間でwifi p2pを開始しますか?または、2つのアンドロイドデバイスで2つのアプリの間で?あなたはwifi P2Pで何を思いついていますか? – greenapps
@greenapps:私はアンドロイドのドキュメント[here](http://developer.android.com/guide/topics/connectivity/wifip2p.html)に従って、サンプルコードを使って構築したいと考えていました。私はネットワークプログラミングに慣れていません。 UIを更新するクライアント/サーバー間の命令を送信するには、デバイスを接続する必要があります。 – Ritz
私はあなたのリンクに従いません。わかりやすい説明文をここに投稿してください。 – greenapps