如何在Android上实现Mesh网络

4

我们正在处理一个项目,需要在4个或更多的设备之间离线共享数据。使用Google Nearby连接,我们能够通过P2P-STAR拓扑结构在设备之间建立连接。但是我们真正需要的是让所有设备都能够接收和发送数据给已连接的设备(M-N连接)。

经过研究,发现Google Nearby API不支持网状网络,因此我们必须在该API的基础上构建一个。但我们无法找到一个好的示例来开始操作。

如果您有任何建议可以指引我们,我们将不胜感激。


使用Bridgefy应用程序制作......(仅限消息)使用Serval应用程序制作......(语音+消息) - Devanshu Singh
2个回答

1

连接应该在离线状态下建立,并且所有设备之间应该发送和接收数据。我们需要在注册后立即依次发送数据,而不是每次请求连接。因此,在我们的情况下,WIFI-Direct 不是最佳选择。 - Laura

1
WiFi Direct可以用于Mesh网络,因为每个节点既可以作为其他设备的WiFi接入点,也可以作为自身的WiFi站点(客户端)。棘手的部分是,每个设备作为群组所有者将被分配IP地址192.168.49.1,因此会出现IP地址冲突。解决方法是使用IPv6链路本地地址来传输数据。
val ssid = group?.networkName
val passphrase = group?.passphrase
val interfaceName = group?.`interface`
val linkInterface = NetworkInterface.getNetworkInterfaces().toList()
            .firstOrNull {
                it.name == interfaceName
            }

val linkLocalAddr = linkInterface?.inetAddresses?.toList()
            ?.firstOrNull { it.isLinkLocalAddress && it is Inet6Address } as? Inet6Address

每个节点可以通过多跳方式中继数据到/从其他节点。
连接设备在连接到接入点之前需要知道另一个节点的LinkLocal IP地址;这可以通过QR码和/或蓝牙低功耗广告来完成。
一些Android 12+设备支持接入点-站点并发。在这些设备上,可以同时运行一个本地热点并作为一个站点(客户端)连接到另一个接入点。本地热点的IP范围是随机的,因此两个相邻节点的IP地址冲突的可能性很小。
现在有一个开源库,其中包含了一个基于WiFi的Mesh网络的初始实现(免责声明:我是该库的作者)。

https://www.github.com/UstadMobile/Meshrabiya


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接