首页 文章

通过互联网进行Android P2P(直接连接)(NAT后面)

提问于
浏览
16

我正在开始一个小型项目,基本上是经典战舰游戏的多人游戏(与超过两个玩家一样) .

在我深入编码之前,我试图解决的一个问题是多个玩家之间的沟通问题 . 当前的可能性是使用中央HTTP服务器作为通信的中央集线器(与Android C2DM API结合以允许从HTTP服务器到设备的推送通信) . 这似乎是一个很好的解决方案,因为从理论上讲,只要您可以访问Internet,它就应该可以正常工作,无论您是否支持NAT .

然而,所提出的解决方案具有存在单个故障点/额外负载(网络服务器)的缺点 . 所以我想尝试其他选择 . 我想过在客户端之间使用套接字 Build 直接连接(网络服务器只是用作初始会合点),但是这只有在所有设备都在同一网络中时才能正常工作 . 考虑到今天我们几乎总是落后于路由器的NAT,我怎样才能实现直接通信?我一直在阅读有关打孔的内容,但我找不到任何有良好记录的好文库(包含很好的使用示例),并且肯定适用于Android . 大多数(如果不是全部)打孔技术(STUN,ICE等等)广泛可用只能与UDP一起使用,这对于音频/视频以及可能丢失一些消息的实时多人游戏来说很好,但对于多人转向基于游戏,保证每个回合数据的传递非常重要(这是不可能直接用UDP进行的) .

那么任何想法如何在NAT后面的 Android 设备之间实现可靠的打孔(最好通过TCP)?它不必在100%的情况下工作(可能不支持某些陌生人的NAT),但如果它适用于大多数情况则会很好 .

3 回答

  • 8

    通过smack over gtalk使用xmpp . 您不必担心服务器和单点故障 . 让谷歌担心!我写了俄罗斯方块,使用gtalk作为通信层来对抗两个玩家 . http://code.google.com/p/tetrads-drop-lite/如果您想要更多玩家,可以尝试MUC .

  • 0

    UDP不是可靠的传送,但您可以通过要求发送UDP数据包要求确认返回来使其可靠 . 这与其他一些要求一起,使得TCP对IP的可靠性(开始时这是不可靠的) .

    需要注意的是,这可能会实现,但可能会非常耗时,而且在您的情况下,成本/收益可能无法实现 .

  • 1

    你几乎被迫使用中间人 . 您可以查找Natblaster以获得一种机制,该机制可用于在某些NAT设备之间 Build TCP连接,但这并不是您可以在Android中使用而无需同时使用两个设备的东西 . 即使这样,它也是实验性的 .

    最好的可能是使用像jabber这样的现有联合消息传递系统 .

相关问题