2012-04-08 154 views
0

我目前正在开发一款基于Java的游戏,可以在没有服务器的情况下播放P2P。到目前为止,我已经能够得到它的工作,其中一人进入对方的IP,这是我与呼叫如何创建一个跨网络的P2P游戏?

InetAddress.getLocalHost().getHostAddress()); 

得到然而,这只能在同一网络中的两台电脑。我将如何获得跨网络工作的IP? 感谢您的帮助!

编辑: 这是一个1v1的游戏,所以多重连接不成问题。我想让用户通过Skype或其他东西发送IP地址......这只是我想和朋友们一起使用的东西。防爆。它显示IP,你将它发送给你的朋友,他使用它连接。

回答

0

这个问题是要找到你想要的IP:How to get the ip of the computer on linux through Java?

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

+0

这是行不通的,因为如果您通过网关(如路由器或接入点)发送包裹,则无法获取互联网地址。你会得到相同的10.0.0.something或192.0.0.something本地IP地址。你需要访问一些服务器,让他们告诉你你的IP。 – 2012-04-08 18:46:03

1

即使洪流P2P网络使用服务器来确定对端的IP地址。获得IP地址后,连接是在同伴之间进行的。所以我建议至少有一个Web服务来列出对等体的IP地址。 (或者你可以把类似于listActivePeers.php/aspx/etc文件的东西放到你的网站上,每5分钟ping一次,并列出ping过的ip地址。)

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

此外,您将需要处理大量的并发问题。认为两个数据同时来到两个同行。在做出任何举动之前,同行们需要互相检查“如果我可以做出这样的举动?或者我应该知道,你们中的任何人做出任何举动?”。因此,在每一步之前,您都会通过发送一些信息来锁定其他同事,并且他们每个人都会在做出行动之前这样做。

更新(来自我上面的评论)
检查此链接关于飞快您的IP地址。 https://stackoverflow.com/a/2939223/1216609谷歌的“调制解调器端口打开或转发[品牌/型号的接入点/调制解调器]”查询转发特定于您的调制解调器或路由器的端口。

+0

这是一个1v1的游戏,所以多重连接不成问题。我想让用户通过Skype或其他东西发送IP地址......这只是我想和朋友们一起使用的东西。防爆。它显示IP,你将它发送给你的朋友,他使用它连接。 – mattdee123 2012-04-08 09:38:23

+0

如上所述,如果您甚至不使用某个中央连接列表系统,那么很好地显示IP并手动发送它是最佳解决方案。但是很可能玩家会遇到问题,因为我们大多数人现在都在路由器防火墙后面,他们需要打开游戏的端口,或者您的游戏可以使用UPnP,而不是永久的解决方案,但总比没有好。发送IP的玩家需要路由器可访问的游戏端口。 – 2012-04-08 09:56:24

+0

是的,我的问题是,这种方法只适用于同一个网络。用户输入的地址就像“10.0.1.10”或其他东西。我将如何跨网络进行这项工作。我假设身份证需要另一个IP地址? – mattdee123 2012-04-08 12:49:40