我开始一个小型项目,基本上是一个多人游戏(如两名以上玩家)的变体经典战舰游戏。安卓P2P(直接连接)通过互联网(在NAT后面)
我在潜入编码之前试图解决的一个问题是多个玩家之间的沟通问题。目前的可能性是使用中央HTTP服务器作为通信的中心枢纽(加上Android C2DM API以允许从HTTP服务器到设备的推送通信)。这似乎是一个很好的解决方案,因为从理论上讲,只要你能够访问互联网,无论你是否支持NAT,它都应该能够完美工作。
然而,所提出的解决方案具有存在单点故障/额外负载(web服务器)的缺点。所以我想尝试其他选择。我想在客户端之间使用Sockets进行直接连接(Web服务器只是作为初始会议点),但是如果所有设备都在同一个网络中,那么这种方式只能工作得很好。考虑到今天我们几乎总是在路由器的NAT后面,我该如何实现直接通信?我一直在阅读关于打孔技术的知识,但是我找不到任何有很好文档记录的良好库(包含很好的使用示例),并且确实适用于Android。另外,大多数(如果不是全部的话)冲孔技术(STUN,ICE等)只能用于UDP,这适用于音频/视频和实时多人游戏,可能会丢失一些消息,但对于多人游戏机基于游戏的保证交付每个回合的数据是非常重要的(这是UDP不可能直接实现的)。
因此,任何想法如何实现在Android设备后面NAT的可靠打孔(最好是TCP)?它不必在100%的情况下工作(一些陌生的NAT可能不被支持),但如果它在大多数情况下工作,它将会很好。
Win Myo Htet提供的解决方案具有很好的潜力(它使用Google自己的基础架构)。不过,我仍然对Android上的TCP和/或UDP打孔解决方案感兴趣。 – petersaints 2012-04-04 16:34:16
你最终以@petersaints结束了什么? – kishu27 2017-04-26 21:08:15