8

当我的设备是 wifi-direct P2P 连接中的组所有者 (GO) 时,我的应用程序需要知道对等设备的 IP 地址(通常 GO 充当 DHCP 服务器,对等站从服务器接收 IP)。我发现 DHCP 客户端列表存储在 /data/misc/dhcp/dnsmasq.leases 文件中,但是该应用程序必须是“dhcp”组的一部分才能读取该文件,并且我在尝试时收到 EACCES(权限被拒绝)阅读它。

我可以在清单中添加读取该文件的权限吗?或者有没有其他方法可以从没有 root 的 java/native Android 框架中获取这个 DHCP 客户端列表?

4

4 回答 4

2

我通过向组所有者发送对等方的本地 IP 地址(以 192.168.xx 开头)解决了这个问题。在这个并不需要时间的“握手”之后,一切都很好。没有找到其他获取peer的ip地址的方法,GroupListener/PeerListener/...提供的唯一信息就是mac地址。

于 2012-06-21T21:44:50.500 回答
2

我在 onConnectionInfoAvailable 中获得了 GO 的 IP 地址,这是您从 BroadcastReceiver .WIFI_P2P_CONNECTION_CHANGED_ACTION 事件中获得的,该事件在您连接后触发。
因此,您在连接后调用 requestConnectionInfo(mChannel, mMyWiFiActivity),然后挂钩到回调 onConnectionInfoAvailable(WifiP2pInfo info)。

然后给你组 owner.info.groupOwnerAddress.getHostAddress(); 的地址

希望这可以帮助

于 2014-07-08T07:06:35.643 回答
0

如果您有 adb root 访问权限,您可以获得访问 DHCP 客户端列表,该列表存储在 ./data/misc/dhcp/dnsmasq.leases

以编程方式,

在服务器端或 GO 端:

1)在端口上打开一个套接字(比如端口:9999)

2) 调用 Accept() & 等待客户端或 GC 连接 (Socket clientSocket = Socket.accept();)

3) 一旦客户端/GC 连接,可以使用“clientSocket.getInetAddress().toString()”找到 GC IP 地址

在客户端或 GC 端:

1)触发从客户端(GC)到组所有者的连接

2)打开并连接套接字到组所有者的IP地址

3) P2P GO IP地址可通过“info.groupOwnerAddress.getHostAddress()”获得(WifiP2pInfo info;)

4) 连接到同一个端口,比如 9999

于 2015-03-18T09:47:30.940 回答
-2

没有。您需要使用服务发现协议。

于 2012-06-21T21:44:13.377 回答