当我的设备是wifi直接P2P连接中的组所有者(GO)时,我的应用程序需要知道对等设备的IP地址(通常GO充当DHCP服务器,对等站从服务器接收IP)。我发现DHCP客户端列表存储在/data/misc/dhcp/dnsmasq.leases文件中,但应用程序必须是“dhcp”组的一部分才能读取该文件,并且我在尝试时获得EACCES(权限被拒绝)阅读它。
是否有权限可以在清单中添加以读取该文件?或者有没有其他方法可以从没有root的java / native Android框架获取此DHCP客户端列表?
答案 0 :(得分:1)
没有。你需要使用服务发现协议。
答案 1 :(得分:1)
我通过将对等方的本地IP地址(以192.168.x.x开头)发送给组所有者来解决这个问题。在这次“握手”之后,这并不需要时间,这一切都很好。 没有找到任何其他方式来获取对等方的IP地址,GroupListener / PeerListener / ...提供的唯一信息是mac地址。
答案 2 :(得分:1)
我在onConnectionInfoAvailable中获得了GO的ip地址,这是您从BroadcastReceiver .WIFI_P2P_CONNECTION_CHANGED_ACTION事件中获得的,该事件在您连接后触发。 所以你在连接后调用requestConnectionInfo(mChannel,mMyWiFiActivity),然后挂钩回调,onConnectionInfoAvailable(WifiP2pInfo info)。
然后给你组owner.info.groupOwnerAddress.getHostAddress();
的地址希望这有帮助
答案 3 :(得分:-1)
如果您有adb root访问权限,则可以访问存储在./data/misc/dhcp/dnsmasq.leases
中的DHCP客户端列表。以编程方式,
服务器端或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