在wifi-direct p2p连接中获取对等设备的IP地址[重复]
Posted
技术标签:
【中文标题】在wifi-direct p2p连接中获取对等设备的IP地址[重复]【英文标题】:Get peer device's IP address in wifi-direct p2p connection [duplicate] 【发布时间】:2012-06-20 19:43:32 【问题描述】:当我的设备是 wifi-direct P2P 连接中的组所有者 (GO) 时,我的应用程序需要知道对等设备的 IP 地址(通常 GO 充当 DHCP 服务器,对等站从服务器接收 IP)。我发现 DHCP 客户端列表存储在 /data/misc/dhcp/dnsmasq.leases 文件中,但是该应用程序必须是“dhcp”组的一部分才能读取该文件,并且我在尝试时收到 EACCES(权限被拒绝)阅读它。
我可以在清单中添加读取该文件的权限吗?或者有没有其他方法可以在没有 root 的情况下从 java/native android 框架中获取这个 DHCP 客户端列表?
【问题讨论】:
【参考方案1】:我通过向组所有者发送对等方的本地 IP 地址(以 192.168.x.x 开头)解决了这个问题。在这个并不需要时间的“握手”之后,一切都很好。 没有找到其他方法获取peer的ip地址,GroupListener/PeerListener/...提供的唯一信息就是mac地址。
【讨论】:
但是问题是你是如何获得Peer的本地IP地址的..?我的意思是你能提供一些代码sn-p..吗? 是的。我也有同样的问题。有什么解决办法吗? 服务器只获取已建立连接的socket的ip,不需要自己通过连接发送ip地址【参考方案2】:我在 onConnectionInfoAvailable 中获得了 GO 的 ip 地址,这是您从 BroadcastReceiver .WIFI_P2P_CONNECTION_CHANGED_ACTION 事件中获得的,该事件在您连接后触发。 所以你在连接后调用 requestConnectionInfo(mChannel, mMyWiFiActivity) ,然后挂钩到回调,onConnectionInfoAvailable(WifiP2pInfo info)。
然后给你这个组的地址 owner.info.groupOwnerAddress.getHostAddress();
希望对你有帮助
【讨论】:
好吧,这会给你GO的IP地址。如果您的代码已经在 GO 上运行并且您想知道对等方的 IP 地址,这将无济于事。 我不知道这是否有帮助,但在我的项目中,我有一个在 GO 上运行的 ServerSocket(一旦我知道该设备是来自 onConnectionInfoAvailable 回调的 GO,我就会启动它)。然后,当我得到我的对等列表时,在我的客户端设备上,连接到 GO 上的 serverSocket,serverSocket 请求刚刚连接到它的设备的 ip。然后我把它发回给客户。【参考方案3】:如果您有 adb root 访问权限,您可以获得访问 DHCP 客户端列表,该列表存储在 ./data/misc/dhcp/dnsmasq.leases 中
以编程方式,
在服务器端或 GO 端:
1) 在端口上打开一个 Socket(比如端口:9999)
2) 调用Accept() & 等待客户端或GC连接(Socket clientSocket = Socket.accept();)
3) 一旦客户端/GC连接,GC IP地址可以使用“clientSocket.getInetAddress().toString()”找到
在客户端或 GC 端:
1) 触发从客户端 (GC) 到 Group Owner 的连接
2) 打开套接字并将其连接到组所有者的 IP 地址
3) P2P GO IP地址可通过“info.groupOwnerAddress.getHostAddress()”获得(WifiP2pInfo info;)
4) 连接到同一个端口,比如 9999
【讨论】:
【参考方案4】:没有。您需要使用服务发现协议。
【讨论】:
ICS 是否支持服务发现? 没有。 JB 支持它作为平台的一部分。您可以尝试使用 JmDNS 之类的东西作为应用程序的一部分。 这样做这么难有什么原因吗?为什么你要创建一个 DHCP 服务器,然后却无法访问它所提供的内容?这是不必要的复杂......以上是关于在wifi-direct p2p连接中获取对等设备的IP地址[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android Wi-Fi Direct P2P 连接多个设备