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

Java 如何创建跨网络运行的P2P游戏?,java,ip,ip-address,p2p,Java,Ip,Ip Address,P2p,我目前正在开发一款基于Java的游戏,可以在P2P上玩,无需服务器。到目前为止,我已经能够让它工作,一个人进入另一个人的IP,这是我通过呼叫获得的 InetAddress.getLocalHost().getHostAddress()); 但是,只有当两台计算机在同一网络上时,此功能才起作用。如何获得跨网络工作的IP? 谢谢你的帮助 编辑: 这是一款1v1游戏,所以多个连接不是问题。我打算让用户通过skype或其他方式发送IP。。。这正是我想和朋友们一起使用的东西。例如,它显示IP,你将其发送

我目前正在开发一款基于Java的游戏,可以在P2P上玩,无需服务器。到目前为止,我已经能够让它工作,一个人进入另一个人的IP,这是我通过呼叫获得的

InetAddress.getLocalHost().getHostAddress());
但是,只有当两台计算机在同一网络上时,此功能才起作用。如何获得跨网络工作的IP? 谢谢你的帮助

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

这个问题是关于找到你想要的IP:


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

即使torrent P2P网络也使用服务器来确定对等方的ip地址。在获得ip地址后,连接当然是在对等方之间进行的。因此,我建议至少有一个web服务来列出对等方的ip地址。(或者你可以将类似listActivePeers.php/aspx/etc的文件放到你的网站上,每5分钟ping一次,并列出ping的ip地址。)

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

此外,您还需要处理大量并发问题。假设两个数据同时到达两个对等点。在采取任何行动之前,同龄人需要互相检查“我是否可以采取这一行动?或者你们中的任何一位采取任何行动我都应该知道吗?”。因此,在每次移动之前,您都会通过向其他对等方发送一些信息来锁定其他对等方,并且每个对等方在移动之前都会这样做

更新(我在上面的评论中)

请查看此链接,了解如何标记您的ip地址。另外,谷歌搜索“调制解调器端口打开或转发[接入点的品牌/型号/调制解调器]”查询转发特定于调制解调器或路由器的端口。

这是一款1v1游戏,因此多个连接不是问题。我打算让用户通过skype或其他方式发送IP。。。这正是我想和朋友们一起使用的东西。例如,它显示IP,你将它发送给你的朋友,他使用它连接。如果你不使用我提到的某个中央连接列表系统,那么显示IP并手动发送是最好的解决方案。但玩家可能会遇到问题,因为我们大多数人现在都在路由器防火墙后面,他们需要打开游戏的端口,或者你的游戏可以使用UPnP,这不是一个永久的解决方案,但总比没有好。发送IP的玩家需要路由器可以访问的游戏端口。是的,我的问题是这种方法只能在同一个网络中工作。用户输入的地址类似于“10.0.1.10”之类的内容。我将如何在网络中实现这一点。我假设我需要另一个IP地址?你需要一个本地IP地址,你需要你的互联网连接的IP地址。试着从whatismyip.com这样的网站上获取它。您可以获取页面的源代码,将其存储在字符串中,并通过正则表达式或简单的拆分函数从中获取ip字符串。但正如我所说,ip的发送方播放器应该将端口从调制解调器或接入点转发到本地ip地址。还应在操作系统的网络适配器中设置一个静态ip。@user578602检查此链接,了解如何标记您的ip地址。也可以通过谷歌搜索“调制解调器端口打开或转发[接入点/调制解调器的品牌/型号]”查询转发特定于调制解调器或路由器的端口。这不起作用,因为如果您通过路由器或接入点等网关发送包件,则无法获取internet地址。您将获得相同的10.0.0或192.0.0本地ip地址。你需要访问一些服务器,让他们告诉你你的ip地址。