Android的P2P(直接连接)通过互联网(NAT后面)(Android P2P (direct-

2019-06-23 10:17发布

我开始一个小项目,基本上是一个多人(如在两个以上的玩家)的经典战舰游戏的变化。

我想要解决之前,我潜入编码的一个问题是多个玩家之间的沟通问题。 的电流可能是使用一个中央HTTP服务器用于通信中心毂(加上了Android C2DM API,以允许从HTTP服务器到设备推送通信)。 这似乎是一个很好的解决方案,因为从理论上讲,只要你能上网,应该很好地工作,无论你是在NAT之后还是不行。

然而,所提出的解决方案具有现有失败/额外的负载(Web服务器)中的一个单点的缺点。 所以我想试试其他选项。 我想制作使用的客户端(与只是被用来作为初始交汇点的网络服务器)之间的插座直接连接的,但是,如果所有设备都在同一个网络中,这将只是很好地工作。 考虑到今天我们几乎都是路由器的NAT后面我怎么能实现直接沟通? 我一直在阅读有关打孔,但我无法找到是有据可查(含利用的很好的例子),以及适用于Android肯定任何好的库。 另外大部分(如果不是全部)打孔技术(STUN,ICE等)广泛仅适用于UDP,这是很好的音频/视频和实时多人游戏,可能会失去一些消息的工作,但对于一个多人转基于游戏,以保证每一轮的数据的传递是很重要的(东西,它不可能直接与UDP)。

因此,任何想法如何实现NAT后面Android设备之间的可靠打孔(最好是通过TCP)? 它没有对案件100%(有些陌生的NAT可能不支持)工作,但如果它的工作在大多数情况下,这将是很好。

Answer 1:

通过咂嘴使用XMPP超过每增加。 您不必担心服务器和单点故障。 让谷歌担心! 我已经写了俄罗斯方块,使之使用,每增加一个通信层对战两个播放。 http://code.google.com/p/tetrads-drop-lite/您可以尝试MUC如果你想要更多的球员。



Answer 2:

UDP是不可靠的交付但你可以把它可靠的通过要求发送UDP数据包需要确认的是回报。 这与其他一些要求一起,是什么使TCP可靠的IP电话(这是不太可靠开始)。

作为一个说明,这是有可能实现,但可能会耗费时间和成本/效益可能无法在您的情况制定。



Answer 3:

你几乎被迫使用的媒介。 你可以看一下Natblaster一种机制,将建立一些NAT的设备之间的TCP连接的工作,但它不是东西,你可以在Android上使用而不生根两个设备。 即使如此,它的实验。

最好的可能是使用现有的联邦通讯系统,如闲聊。



文章来源: Android P2P (direct-connection) over the Internet (behind NAT)