更改 WiFi-Direct IP 范围?在 Android WiFi-Direct 中强制使用 IPv6?

Change WiFi-Direct IP range? Force IPv6 in Android WiFi-Direct?

我有两个 Android KitKat phones,都是 运行 WiFi-Direct 组作为组所有者,我们称它们为 GO1 和 GO2

我成功地将作为旧版客户端的 GO1 连接到 GO2,而没有破坏任何(之前设置的)wifi-direct 组。

问题是,您可能知道,GO IP 地址在 Android 源代码中被硬编码,并设置为 192.168.49.1

因此,我的两个设备 GO1 和 GO2 具有相同的 IP 地址 (**)...每个都在他的本地网络上。

我的应用程序同时是客户端和服务器。但是两个网络都使用相同的 IP 范围 (192.168.49.XXX),显然,我无法更改。

因此,如果它们都托管 WiFi-Direct 组,我无法在它们之间创建 TCP 连接,因为任何设备在尝试连接到 192.168.49.1 时都会连接到自身

所以问题是:

** :实际上,因为 GO1 作为传统客户端连接到 GO2,所以 GO1 被称为 192.168.49.227(例如)到 GO2,GO2 被称为 192.168.49.1 到 GO1。但是因为 GO1 也是一个 GO,它也被他的客户(和它自己)称为 192.168.49.1。

无法更改 IP 范围,因为正如您正确指出的那样,它已硬编码在 Android Wi-Fi Direct 系统服务中。就个人而言,我不知道 Wi-Fi P2P 接口上启用了 IPv6,即使启用了,它也可能是硬编码的 IPv6 地址。

如果 GO1 和 GO2 必须相互连接,同时都处于 GO 模式,那么也许可以考虑使用蓝牙或其他传输方式让它们进行通信。如果 GO1 和 GO2 之间的通信可以延迟,则缓存要交换的任何信息,并在这两个设备之间发送它,当一个可以是另一个的客户端时,例如什么时候GO1可以不再是GO,可以成为GO2的client了

无需 root phone 即可解决此问题的一种方法是通过多播 UDP* 发送您的数据包。这些数据包将从 GO1 到达 GO2。

这有一些副作用:

  • 要将其用于网络,您必须在 OSI 应用程序级别执行封装和路由(效率不高)。

  • 您还需要根据 MAC 地址进行路由,因为每个设备都有相同的 192.168.49.1 地址。

  • "It is important to note that the multicast socket encapsulates a one-to-many unicast communication and, as a result of this, cannot fully utilize the total available WiFi and WiFi Direct bandwidth" *

其他值得注意的事情:

  • 随着 GO 数量的增加,您将 运行 遇到所有节点都在同一 wifi 信道上运行的问题。这不是几个设备的问题,但是有数百个设备,这将是一个巨大的问题。

*在此处找到的标题为 "Supporting Multi-hop Device-to-Device Networks Through WiFi Direct Multi-group Networking" 的 Colin Funai、Cristiano Tapparello 和 Wendi Heinzelman 论文中提到了此方法:https://arxiv.org/pdf/1601.00028.pdf