我有两部 Android KitKat 手机,两者都作为组所有者运行 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 时都会连接到自身
所以问题是:
- 有没有办法更改 Wifi-Direct 中使用的 IP 范围?
- 有没有办法在 Wifi-Direct 中使用 IPv6 而不是 IPv4?
- 这些可以在不root手机的情况下完成吗?
- 还有其他建议吗?
** :实际上,由于 GO1 作为旧客户端连接到 GO2,因此 GO1 对于 GO2 来说被称为 192.168.49.227(例如),而 GO2 对于 GO1 来说被称为 192.168.49.1。但由于 GO1 也是 GO,因此他的客户(及其本身)也将其称为 192.168.49.1。
无需 root 手机即可解决此问题的一种方法是通过多播 UDP* 发送数据包。这些数据包将从 GO1 发送到 GO2。
这样做有一些副作用:
要将其用于网络,您必须在 OSI 应用程序级别执行封装和路由(效率不高)。
您还需要根据 MAC 地址进行路由,因为每个设备都有相同的 192.168.49.1 地址。
“值得注意的是,多播套接字封装了一对多单播通信,因此无法充分利用可用的 WiFi 和 WiFi Direct 总带宽”*
还有一点值得注意:
- 当您扩大 GO 的数量时,您将遇到所有节点都在同一 wifi 通道上运行的问题。对于少数设备来说这不是问题,但是对于数百台设备来说,这将是一个巨大的问题。
*此方法在 Colin Funai、Cristiano Tapparello 和 Wendi Heinzelman 题为“通过 WiFi Direct 多组网络支持多跳设备到设备网络”的论文中提到,可在此处找到:https://arxiv.org/pdf/1601.00028.pdf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)