如何创建跨网络运行的 P2P 游戏



我目前正在开发一款基于Java的游戏,可以在没有服务器的情况下玩P2P。到目前为止,我已经能够让它工作,一个人输入另一个人的IP,这是我在通话中获得的

InetAddress.getLocalHost().getHostAddress());

但是,这仅适用于同一网络上的两台计算机。如何获得跨网络工作的 IP?感谢您的帮助!

编辑:这是一个1v1游戏,所以多个连接不是问题。我打算让用户通过Skype或其他方式发送IP......这只是我想和朋友一起使用的东西。前任。它显示IP,您将其发送给您的朋友,他使用它进行连接。

即使是洪流P2P网络也使用服务器来确定对等方的IP地址。获取 ip 地址后,连接当然是在对等方之间。所以我建议至少有一个 Web 服务来列出对等方的 IP 地址。(或者你可以把像listActivePeers.php/aspx/etc文件这样的文件放到你的网站上,每5分钟ping一次,并列出已经ping的IP地址。

我还想指出,每个对等节点都需要打开与另一个节点的连接,除非您有几个玩家,否则这种连接并不那么有效。如果您有 100 个在线播放器,则每个对等体最终将有 100 个连接,有时某些接入点或调制解调器不支持这种活动连接!它们可能会卡住或变慢。

此外,您还需要处理大量的并发问题。认为两个数据同时来到两个对等方。在做出任何举动之前,同行需要互相检查"我是否可以做出这个举动?或者你们中的任何人做出任何举动我都应该注意吗?因此,在每次移动之前,您将通过与它们的连接发送一些信息来锁定其他对等方,并且每个人都会在移动之前执行此操作。

更新(来自我上面的评论)
查看此链接,了解如何获取您的 IP 地址。https://stackoverflow.com/a/2939223/1216609 还可以谷歌"调制解调器端口打开或转发[您的接入点/调制解调器的品牌/型号]"查询,以转发特定于您的调制解调器或路由器的端口。

这个问题是关于找到你想要的 IP:如何通过 Java 在 Linux 上获取计算机的 ip?

您还需要使用某种端口转发来连接到不同网络上的计算机。

最新更新