直接连接2个或更多Android客户端

我想通过p2p连接连接2个或更多Android设备。 据我所知,我可以在一个wifi网络下使用Wi-Fi Direct https://developer.android.com/guide/topics/connectivity/wifip2p.html

但我想连接位于不同地方但可能只有一个IP(vpn或其他)的Android客户端。 我怎样才能做到这一点?

这是我的算法

Client_1 register its name and current IP on Server Client_2 register its name and current IP on Server Client_1 request registred IP from Server by Client_2 name Client_2 request registred IP from Server by Client_1 name Client_1 send message directly to Client_2 IP 

如果Client_1和Client_2具有相同的IP,则此算法将不起作用。 或者如果客户端在NAT后面。

是否有可以使用的库以这种方式连接2个或更多Android设备?

如果您想为个人目的进行设置,可以使用Fixed Ip Simcards 。 另一个选择是将您的Android手机本地私人IP转换为公共IP,这可以通过更新No-IP应用程序完成,这个应用程序将为您提供直接链接与您拥有的公共IP进行通信。

我希望我的回答对你有所帮助。

您最好的选择是在蜂窝连接上查看NAT遍历。 Stack Overflow上有几个线程可以讨论这个问题,例如Android和Android 上的3G / 4G无线数据连接的UPnP NAT Traversal :NAT Traversal?

总而言之,最简单的解决方案是使用STUN来确定您的应用程序/设备是否已被NAT,然后使用TURN或ICE尝试使用NAT遍历在您的设备之间建立(不一定是直接的)连接。 存在多个实现这些协议/方法的库,例如http://www.pjsip.org/ ,它具有Android支持并且具有相当好的文档,包括所有提到的技术的示例应用程序。